0

我有以下代码。

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 时卡住了。如果这有什么不同,它会从控制台应用程序中运行。

4

2 回答 2

1

您必须通过关闭流来明确完成对标准输入的写入。请参阅Microsoft 的示例

总之:

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

编辑:在 Visual Studio 中测试。

顺便说一句,你想使用WriteLine()而不是Write().

于 2013-01-31T10:10:30.230 回答
0

使用WriteLine而不是Write写入带有最终换行符的字符串。(你可能也需要打电话Flush(),但我不确定)。Close正如另一个答案所说,它不会对流造成伤害。

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

于 2013-01-31T10:17:50.297 回答