如何將由Process.Start()
開始的進程的標準輸出/錯誤捕獲到string
?如何捕獲過程的標準輸出/錯誤?
4
A
回答
0
通過redirecting it並讀取流。
-1
示例代碼如下:
ProcessStartInfo psi = new ProcessStartInfo();
psi.CreateNoWindow = false;
psi.UseShellExecute = false;
psi.FileName = "C:\\my.exe";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
using (Process exeProcess = Process.Start(psi))
{
exeProcess.WaitForExit();
var exitCode = exeProcess.ExitCode;
var output = exeProcess.StandardOutput.ReadToEnd();
var error = exeProcess.StandardError.ReadToEnd();
if (output.Length > 0)
{
// you have some output
}
if(error.Length > 0)
{
// you have some error details
}
}
+1
您需要將UseShellExecute設置爲true才能遵守Verb,並且必須將其設置爲'false'才能重定向標準輸出。你不能這樣做。 我敢肯定,Windows也不允許你跨管理/非管理安全邊界重定向標準輸入/輸出/錯誤。你必須找到一種不同的方式來獲得以管理員身份運行的程序的輸出 - 參考:http://stackoverflow.com/a/8690661 – Kiquenet 2014-08-28 06:35:03
+5
-1。正如MSDN文檔所述:「如果父進程調用p.StandardOutput.ReadToEnd,然後是p.StandardError.ReadToEnd並且子進程寫入足夠的文本以填充其錯誤流,則會導致死鎖條件」。你的代碼確實如此。 – tstone2077 2014-09-04 20:01:21
1
相關問題
- 1. 通過啓動過程捕獲標準輸出和錯誤
- 2. 捕獲標準錯誤和標準輸出的好方法
- 3. 如何捕獲Windows服務的標準錯誤輸出?
- 4. bash腳本不捕獲標準輸出,只是標準錯誤
- 5. 如何捕獲clojure的標準輸出?
- 6. 進程替換捕獲標準錯誤
- 7. 產卵紅寶石的過程,捕捉標準輸出,標準錯誤,獲得存在狀態
- 8. Linux的標準輸入,標準輸出,標準錯誤
- 9. 獲取派生進程的標準輸出/標準錯誤在子進程
- 10. SharpPcap - 從標準輸出捕獲
- 11. Process.Start捕獲標準輸出字符
- 12. 在log4j/log4net中捕獲標準輸出
- 13. CreateProcess並捕獲標準輸出
- 14. 如何如果標準輸出沒有活動/標準錯誤
- 15. 蟒蛇:運行一個進程,超時和捕獲標準輸出,標準錯誤和退出狀態
- 16. 「捕獲」過程輸出
- 17. 如何從標準輸出和標準錯誤
- 18. 的Python:捕獲從subprocess.call的輸出與標準輸出
- 19. 如何從我的命令行捕獲標準輸出?
- 20. 如何捕獲將被髮送到標準輸出的數據?
- 21. 寫入輸出流3(標準輸出或標準錯誤)
- 22. 保存標準輸出,標準錯誤和標準輸出+標準錯誤同步
- 23. 捕獲未寫入標準輸出stderr的控制檯輸出?
- 24. 同時讀取子進程標準輸出和標準錯誤
- 25. 如何獲得oracle存儲過程標準輸出在c#
- 26. 捕獲python程序的標準輸出,因爲它發生
- 27. 無法使用Boost.Process捕獲進程的標準輸出
- 28. Python函數捕獲子進程標準輸出和標準錯誤日誌文件
- 29. 如何在SLIME中捕獲代理的標準輸出/日誌輸出?
- 30. 包括標準輸入輸出錯誤
-1:鏈接文章遇到了一個死鎖問題(至少在編寫本文時): 正如MSDN文檔所述:「死鎖條件結果如果父節點ocess調用p.StandardOutput.ReadToEnd後跟p.StandardError.ReadToEnd並且子進程寫入足夠的文本以填充其錯誤流「。 – tstone2077 2014-09-04 20:03:07