【发布时间】:2016-07-20 21:09:47
【问题描述】:
我正在尝试使用StandardInput.WriteLine(str) 向打开的 cmd.exe 进程发送命令,但是似乎没有发送任何命令。首先,我打开一个带有全局变量 p (Process p) 的进程。
p = new Process()
{
StartInfo = {
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
FileName = @"cmd.exe",
Arguments = "/C" //blank arguments
}
};
p.Start();
p.WaitForExit();
之后,我尝试使用一种简单的方法发送命令,将结果记录在文本框中。
private void runcmd(string command)
{
p.StandardInput.WriteLine(command);
var output = p.StandardOutput.ReadToEnd();
TextBox1.Text = output;
}
现在我正在使用DIR 对其进行测试,但var output 显示为空,导致没有输出。有没有更好的方法向打开的 cmd.exe 进程发送命令?
【问题讨论】:
-
你必须调用
p.StandardOutput.ReadToEnd()之前p.WaitForExit(),否则会出现死锁。见here。你没有提到死锁,但这可能是你的问题。 -
尝试摆脱 p.WaitForExit(),问题依旧。
-
Cmd /c启动然后终止 CMD。
标签: c# cmd process stdout stdin