在C#中调用CMD命令远程关机

时间:2022-09-02 18:23:12

要远程关机得满足3个条件

第一 组策略里允许了 远程网络强制关机
第二 防火墙要关了
第三 GUEST这个帐户要开启

 

void shutdown()
        {
            Process commandProcess = new Process();
            try
            {
                commandProcess.StartInfo.FileName = "cmd.exe";
                commandProcess.StartInfo.UseShellExecute = false;
                commandProcess.StartInfo.CreateNoWindow = true;
                commandProcess.StartInfo.RedirectStandardError = true;
                commandProcess.StartInfo.RedirectStandardInput = true;
                commandProcess.StartInfo.RedirectStandardOutput = true;
                commandProcess.Start();
                commandProcess.StandardInput.WriteLine("shutdown /r /m 127.0.0.1 /t 200 /f");
                commandProcess.StandardInput.WriteLine("exit");
                for (; !commandProcess.HasExited; )//等待cmd命令运行完毕
                {
                    System.Threading.Thread.Sleep(1);
                }
                //错误输出
                string tmpout = commandProcess.StandardError.ReadToEnd();
                string tmpout1 = commandProcess.StandardOutput.ReadToEnd();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                if (commandProcess != null)
                {
                    commandProcess.Dispose();
                    commandProcess = null;
                }
            }
           
        }

 

使用C#调用cmd.exe执行shutdown.exe命令就行。  
  Shutdown使您能够一次关闭或重新启动一台本地或远程计算机。  
   
  语法  
  shutdown   [/i   |   /l   |   /s   |   /r   |   /a   |   /p   |   /h   |   /e]   [/f]   [/m   \\ComputerName]   [/t   XXX]   [/d   [p:]   XX:YY   [/c   "Comment"]]  
   
  参数  
  /i    
  显示“远程关机对话框”。/i   选项必须是键入的第一个参数,之后的所有参数都将被忽略。    
  /l    
  立即注销当前用户,没有超时期限。不能将   /l   与   /m   \\ComputerName   或   /t   一起使用。    
  /s    
  关闭计算机。    
  /r    
  关机后重新启动计算机。    
  /a    
  取消关机操作(仅在超时期限内有效)。a   参数仅可以与   /m   \\ComputerName   一起使用。    
  /p    
  关闭本地计算机(不是远程计算机),没有超时或警告。/p   只能和   /d   一起使用。如果您的计算机不支持关闭电源功能,使用   /p   将关闭系统但不会切断您的计算机电源。    
  /h    
  使本地计算机处于休眠状态(如果已启用休眠)。仅可将   h   与   /f   一起使用。    
  /e    
  允许在目标计算机上记录意外关机原因。    
  /f    
  强制关闭正在运行的应用程序而不提前警告用户。  
    警告  
   
  使用   /f   选项可能导致未保存的数据丢失。  
  /m   \\ComputerName    
  指定目标计算机。不能与   /l   选项一同使用。    
  /t   XXX    
  将重新启动或关机前超时期限或延迟设置为   XXX   秒会使得在本地控制台显示一条警告信息。您可以指定的范围为   0   -   600   秒。如果省略   /t,则默认超时期限为   30   秒。    
  /d   [p:]XX:YY    
  列出系统重新启动、关机或关闭电源的原因。下表描述了参数值。   值   描述    
  p:   表示重新启动或关机是已计划的。如果不使用   /p   选项,关闭事件跟踪程序将认为重新启动或关机是没有计划的。    
  XX   指定主要原因代码   (0-255)。    
  YY   指定次要原因代码   (0-65535)。    
   
  /c   "Comment"    
  使您可以对关机原因做出详细注释。必须首先使用   /d   选项提供一个原因。必须将注释引在引号中。最多可以使用   127   个字符。    
  /?    
  在命令提示符下显示帮助,包括在本地计算机上定义的主要原因和次要原因的列表。只键入   shutdown   而不带任何参数也可以显示帮助。    
  注释  
  必须为用户授予关闭系统的用户权力,该用户才能使用   shutdown   命令关闭本地或远程管理的计算机。详细信息,请参阅“相关主题”中的“访问控制概述”和“特权”。    
  用户必须是   Administrators   组的成员才能对本地或远程管理的计算机的意外关机进行批注。如果目标计算机加入了域,则   Domain   Admins   组的成员也能执行此过程。    
  如果希望一次关闭多台计算机,可针对每台计算机使用脚本来调用   shutdown,或者可使用   shutdown   /i   显示远程关机对话框。    
  一旦指定了主要和次要原因代码,您必须首先为计划使用某种特定原因的每个计算机定义那些原因代码。如果目标计算机上没有定义原因代码,关闭事件跟踪程序将无法记录正确的原因文本。    
  切记使用   p:   参数指出关机是计划关机。省略   p:   表示关机是非计划关机。如果在非计划关机的原因代码后键入   p:,命令不会执行关机。相反,如果省略   p:   并键入计划关机的原因代码,命令不会执行关机。    
  示例  
  要强制关机原因为“应用程序:维护(计划中)”且注释为“重新配置   myapp.exe”的应用程序关闭并在   1   分钟延迟后重新启动本地计算机,请键入:  
   
  shutdown   /r   /t   60   /c   "Reconfiguring   myapp.exe"   /f   /d   p:4:1  
   
  要使用相同的参数重新启动远程计算机   \\ServerName,请键入:  
   
  shutdown   /r   /m   \\servername   /t   60   /c   "Reconfiguring   myapp.exe"   /f   /d   p:4:1