在没有CMD.EXE的情况下运行批处理命令

本文关键字:情况下 运行 批处理 命令 EXE CMD | 更新日期: 2023-09-27 18:30:04

我正试图在C#应用程序中运行批处理命令。通常,我会通过以下代码来完成这项工作:

string command = "shutdown -s -t 120";
Process process = new Process();    
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.WindowStyle = ProcessWindowStyle.Hidden;   
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = ("/c" + command); 
process.StartInfo = startInfo;   
process.Start();

然而,我正在为一个不允许CMD.EXE的网络构建上述应用程序。我可以通过制作一个带有"Command.COM"字符串的*.bat文件来访问命令提示符,然后我必须手动键入命令。上面的代码不允许我将字符串命令传递到批处理文件,只能传递到*.exe文件。有办法解决这个问题吗?

在没有CMD.EXE的情况下运行批处理命令

答案是完全绕过cmd,这里不需要它,shutdown本身就是一个进程,所以直接运行它:

Process.Start("shutdown","/s /t 120");

Shutdown不是一个批处理命令,而是一个系统可执行文件。您可以将其称为cmd:

C:'Windows>dir /s shutdown.exe
 Volume in drive C has no label.
 Volume Serial Number is 008A-AC5B
 Directory of C:'Windows'System32
30-10-2015  08:17            37.376 shutdown.exe
               1 File(s)         37.376 bytes
 Directory of C:'Windows'SysWOW64
30-10-2015  08:18            33.792 shutdown.exe
               1 File(s)         33.792 bytes

因此,您可以将当前代码替换为:

Process process = new Process();    
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.WindowStyle = ProcessWindowStyle.Hidden;   
startInfo.FileName = "shutdown.exe"; 
startInfo.Arguments = ("-s -t 120"); 
process.StartInfo = startInfo;   
process.Start();