C#调用CMD执行命令并获得返回结果
CMD是Windows下传统的命令行工具,在做.net开发的时候,我们可能会需要调用CMD执行一些命令,并且取得执行结果。
思路
利用.net的Process
运行cmd,并重定向标准I/O流
,将命令输入执行,随后读出
注:如果你需要调用某个程序就没必要借助cmd了,可以直接用
Process
运行
注意
- 需要禁用
UseShellExecute
- 最好设置
CreateNoWindow
,不然cmd会显示在用户界面 - 命令结尾要加上
&exit
,否则会因为输出流没有关闭导致程序假死 - 由于用户系统安装目录不确定,不应该写死cmd.exe的路径
代码
using System; using System.Diagnostics; namespace CMDHelper { public class Cmd { public static void Main(string[] args) { RunCmdCommand("ping 127.0.0.1", out string res); Console.WriteLine(res); Console.ReadKey(); } private static string CmdPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.System) + "\\cmd.exe"; public static void RunCmdCommand(string command, out string output) { using (Process process = new Process()) { command = command.Trim().TrimEnd('&') + "&exit"; process.StartInfo.FileName = CmdPath; process.StartInfo.CreateNoWindow = true;// 隐藏窗口运行 process.StartInfo.RedirectStandardError = true;// 重定向错误流 process.StartInfo.RedirectStandardInput = true;// 重定向输入流 process.StartInfo.RedirectStandardOutput = true;// 重定向输出流 process.StartInfo.UseShellExecute = false; process.Start(); process.StandardInput.WriteLine(command);// 写入Cmd命令 process.StandardInput.AutoFlush = true; output = process.StandardOutput.ReadToEnd();//读取结果 process.WaitForExit(); process.Close(); } } } }