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();
            }
        }
    }
}

Azure99

底层码农,休闲音游玩家,偶尔写写代码

看看这些?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注