cmd.exe进程永远不会完成

时间:2013-01-31 10:07:08

标签: c# .net console

我有以下代码。

ProcessStartInfo si = new ProcessStartInfo("cmd.exe");
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
si.UseShellExecute = false;
si.WindowStyle = ProcessWindowStyle.Hidden;
si.CreateNoWindow = true;
Process p = Process.Start(si);
p.StandardInput.Write("ipconfig");
p.StandardInput.Write("exit");
string consoleOutput = p.StandardOutput.ReadToEnd();
string dir="here";

执行到达“string consoleOutput”但从未到达“string dir”,即代码在读取StandardOutput时卡住了。如果这有任何不同,它将从控制台应用程序中运行。

2 个答案:

答案 0 :(得分:1)

您必须通过关闭流显式完成对标准输入的写入。请参阅Microsoft's example

总结:

        p.StandardInput.Write("exit");
        p.StandardInput.Close(); // <-- You need this
        string consoleOutput = p.StandardOutput.ReadToEnd();

编辑:在Visual Studio中测试。

顺便说一下,您希望使用WriteLine()代替Write()

答案 1 :(得分:0)

使用WriteLine代替Write来编写带有最终换行符的字符串。 (您可能还必须致电Flush(),但我不确定)。正如另一个答案所说,它不会对Close流造成伤害。

是的,您不需要cmd.exe,您可以直接启动ipconfig(正如@Petesh在评论中所建议的那样)。