HELLP。在我的'管道'中,我有3个命令应该按顺序执行,每个请求必须等到上一个命令结束。现在我已经完成了第一个请求,但第二个和第三个请求跳过... 你能否建议如何改变这种'管道'?
string strCmdText = s1;
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
var process = new Process { StartInfo = startInfo };
process.Start();
process.StandardInput.WriteLine(strCmdText);
process.WaitForExit();
string strCmdText1 = s2;
process.StandardInput.WriteLine(strCmdText1);
process.WaitForExit();
string strCmdText2 = s3;
process.StandardInput.WriteLine(strCmdText2);
process.StandardInput.WriteLine("exit");
谢谢。
答案 0 :(得分:0)
让我们查看您的代码:
您启动cmd.exe
的实例:
var process = new Process { StartInfo = startInfo };
process.Start();
您可以将命令写入其标准输入:
process.StandardInput.WriteLine(strCmdText);
然后等待cmd.exe
退出:
process.WaitForExit();
现在,您将另一个命令写入其标准输入:
string strCmdText1 = s2;
process.StandardInput.WriteLine(strCmdText1);
等待,什么? cmd.exe
已退出上一步,因此您无法再发送命令到首先。
然后你等待进程退出,但很久以前它已经死了:
process.WaitForExit();
并重复相同的非工作代码:
string strCmdText2 = s3;
process.StandardInput.WriteLine(strCmdText2);
process.StandardInput.WriteLine("exit");
你应该更好地了解现在的问题。执行第一个命令后,cmd.exe
似乎退出。
你可以尝试一些事情:
完全摆脱cmd.exe
。除非您执行某个批处理脚本,否则可以直接调用预期的可执行文件(如python.exe
)。
为3个命令启动3个不同的cmd.exe
实例。
尝试将一些参数传递给cmd.exe
,例如/Q
。
首先尝试第一种方法,它是最干净的方法。