【背景】
用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");
}
}