【C#】如何在窗体程序中调用多行CMD命令

【背景】

用VS写一个C#窗体程序,第一步需要用CMD启动一个外部服务并发送信息给该服务器,涉及两步命令,第一步是启动服务,第二步是发送信息。

【分析】

要点:

  1. 如何指定启动CMD的路径在服务exe所在路径下;
  2. 如何用C#执行CMD命令;
  3. 如何执行多条CMD命令;

【实现】

  1. 通过设置WorkingDirectory参数可以指定运行CMD的起始路径为指定路径,方便找到服务exe
  2. 通过ProcessStartInfo调用CMD
  3. 通过&&连接多行CMD命令

【示例代码】

假设我在程序的当前目录下放了一个piping-server.exe服务。用如下代码可以启动此服务并传递消息。

    private void RunCmdCommand()
        {
            try
            {
                // 获取当前目录
                string currentDirectory = Directory.GetCurrentDirectory();

                // 创建一个新的Process启动信息
                ProcessStartInfo processStartInfo = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    Arguments = "/c piping-server && echo 'hello, world'|curl -T- http://127.0.0.1:8080/hello", // 这里写上你想要执行的CMD命令
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    WorkingDirectory = currentDirectory
                };

                // 启动进程
                using (Process process = Process.Start(processStartInfo))
                {
                    // 读取输出
                    using (System.IO.StreamReader reader = process.StandardOutput)
                    {
                        string result = reader.ReadToEnd();
                        MessageBox.Show(result, "CMD Output");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }