我生成了一個在可見控制檯窗口中運行的子進程(這是一個運行MSBuild的批處理文件),並且我希望生成由進程顯示在可見控制檯窗口中,並捕獲該輸出以便我可以在代碼中處理它。我讀過其他一些問題和MSDN文檔處理ProcessStartInfo.RedirectStandardOutput之類的,我可以捕捉從重定向數據流輸出,並在代碼處理它只是罰款:捕獲標準輸出並仍將其顯示在控制檯窗口中
Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();
的問題是,輸出不顯示在子進程的控制檯窗口中;當進程運行時,我只是在屏幕上看到一個空白的控制檯窗口,當它完成時消失。
我想我可以隱藏實際的子進程窗口,並顯示第二個窗口,我只是簡單地將輸出寫入,因爲它被捕獲,但這似乎是更多的工作比必要的。有沒有辦法讓輸出顯示在控制檯窗口中,並在完成後仍然捕獲它進行處理?
哇 - 我從來沒有見過OutputDataReceived。整齊! – 2009-04-24 17:05:19
這似乎回答了我是否可以將輸出顯示在子進程擁有的控制檯窗口中,並同時將其重定向到父進程。 我的下一個問題是,是否有可能不重定向輸出,並且在進程退出時從控制檯捕獲所有內容? 或者,如果不是,手動創建控制檯窗口的最佳方式是什麼,以便在進程執行時使用OutputDataReceived'來將重定向的輸出寫入它? – mjl5007 2009-04-24 17:35:25
看看http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx。它有一個例子(你可能想關閉所有語言,但C#) – 2009-04-24 17:47:03