[英]cmd.exe process never completes
我有以下代碼。
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時卡住了。 如果有任何區別,可以從控制台應用程序中運行它。
您必須通過關閉流來顯式完成對標准輸入的寫入。 請參閱Microsoft的示例 。
綜上所述:
p.StandardInput.Write("exit");
p.StandardInput.Close(); // <-- You need this
string consoleOutput = p.StandardOutput.ReadToEnd();
編輯:在Visual Studio中測試。
順便說一句 ,您想使用WriteLine()
而不是Write()
。
使用WriteLine
而不是Write
來寫一個帶有最后換行符的字符串。 (您可能還必須調用Flush()
,但我不確定)。 另一個答案說, Close
流不會有什么壞處。
是的,您不需要cmd.exe
,可以直接啟動ipconfig
(如@Petesh在評論中所建議)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.