【背景】
用VS写一个C#窗体程序,第一步需要用CMD启动一个外部服务并发送信息给该服务器,涉及两步命令,第一步是启动服务,第二步是发送信息。
【分析】
要点:
- 如何指定启动CMD的路径在服务exe所在路径下;
- 如何用C#执行CMD命令;
- 如何执行多条CMD命令;
【实现】
- 通过设置WorkingDirectory参数可以指定运行CMD的起始路径为指定路径,方便找到服务exe
- 通过ProcessStartInfo调用CMD
- 通过&&连接多行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");}}