【问题标题】:Shutdown another system using its IP address in the command prompt by a c# program?c#程序在命令提示符下使用其IP地址关闭另一个系统?
【发布时间】:2018-07-26 05:33:55
【问题描述】:

我正在开发一个 c# 程序,该程序将从记事本文件中获取 IP 地址,并且对于每个 IP 地址,如果系统处于开机状态,它将在命令提示符下运行一个命令,该命令将远程关闭它。我已经编写了这段代码,它目前正在获取我系统的 IP 地址(目前不是通过记事本文件),检查它是打开还是关闭,并根据要求远程关闭它。

它正在使用 ping 请求,但这很好,因为这里没有系统拒绝 ping 请求。我想要的是读取 IP 地址,如果它打开,如果用户说“是”,则将其关闭。 [我已经使用“shutdown \s”来立即关闭我的系统”]这是我现在的代码。

        Console.WriteLine("1-Check PC Status\n2-Exit");
        input = Int32.Parse(Console.ReadLine());
        switch (input)
        {
                case 1:
                    string LocalIP = string.Empty;
                    var host = Dns.GetHostEntry(Dns.GetHostName());
                    foreach (var ip in host.AddressList)
                    {
                        if (ip.AddressFamily == AddressFamily.InterNetwork)
                        {
                            LocalIP = ip.ToString();
                        }
                    }

                    var PingRequest = new Ping();
                    var PingReply = PingRequest.Send(LocalIP);
                    if (PingReply.Status == IPStatus.Success)
                    {
                        Console.WriteLine("{0, -20} {1, 5}", "IP Address", "Status");
                        Console.WriteLine("{0, -20} {1, 5}", LocalIP, "On");
                        Console.WriteLine("\nShutdown the system (y/n)?");
                        string shutdownChoice;
                        shutdownChoice = Console.ReadLine();
                        if(shutdownChoice == "y" || shutdownChoice == "Y")
                        {
                            Process cmdProcess = new Process();
                            cmdProcess.StartInfo.FileName = "cmd.exe";
                            cmdProcess.StartInfo.RedirectStandardInput = true;
                            cmdProcess.StartInfo.RedirectStandardOutput = true;
                            cmdProcess.StartInfo.CreateNoWindow = true;
                            cmdProcess.StartInfo.UseShellExecute = false;
                            cmdProcess.Start();

                            cmdProcess.StandardInput.WriteLine("shutdown /s");
                            cmdProcess.StandardInput.Flush();
                            cmdProcess.StandardInput.Close();
                            cmdProcess.WaitForExit();
                        }
                        else
                        {
                            input = 2;
                        }
                    }
                    else
                    {
                        Console.WriteLine("{0, -20} {1, 5}", LocalIP, "Off");
                    }
                    break;
                case 2:
                    input = 2;
                    break;
                default:
                    Console.WriteLine("Incorrect input");
                    break;
            }

我知道这个命令shutdown \i,但这会打开一个对话框来输入 IP 地址,但我想直接通过控制台将其关闭,而无需任何额外的对话框或窗口。 shutdown \m //computername 不能正常工作。

对于冗长的描述,我们深表歉意。 谢谢

【问题讨论】:

  • 为什么你总是写\ 而不是/?
  • 运行您的应用程序的用户是否有权关闭远程 PC?也许你应该以管理员身份启动shutdown。
  • 对不起,“\”,这是错误的输入,我在命令中使用了“/”,并且授予了权限。
  • 这段代码没有打开任何对话框你检查了吗?
  • 这似乎与yesterday's question 没有太大区别,您没有对所提供的答案提供任何反馈。当您自己编写程序并且您可以采用 程序化 方法时,为什么您如此痴迷于运行其他程序来完成任务?

标签: c# cmd system.diagnostics


【解决方案1】:

尝试使用shutdown /s /f /m \\computername

如果这不起作用,我建议您查看 PsTools 套件。他们有一些命令行工具,PsShutdown 可以提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2014-03-18
    • 2017-02-11
    相关资源
    最近更新 更多