【问题标题】:Running batch commands with no CMD.EXE在没有 CMD.EXE 的情况下运行批处理命令
【发布时间】:2016-01-13 13:11:26
【问题描述】:
我正在尝试在 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 文件。有没有办法解决这个问题?
【问题讨论】:
标签:
c#
windows
visual-studio
batch-file
cmd
【解决方案1】:
答案是完全绕过cmd,这里不需要,shutdown本身就是一个进程,直接运行即可:
Process.Start("shutdown","/s /t 120");
【解决方案2】:
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();