這有點痛苦,因爲我現在沒有代碼在我面前,但我會嘗試解釋。爲什麼C#ProcessStartInfoRedirectStandardOutput會導致xcopy進程失敗
我有一個簡單的C#應用程序,它啓動了一個Ruby腳本(它做了一些其他的事情,因此它會生成一個批處理文件並執行它)。
我現在用的是C#進程對象,我設置以下 redirectstandardoutput =真 redirectstandarderror =真 UseShellExecute =假 CreateNoWindow =真(向後邏輯的可愛位有!)
然後創建兩個線程併爲錯誤和輸出流輪詢ReadLine(),在我調用WaitForExit()之前等待它們完成。
現在,無論我做什麼我Ruby腳本無法調用系統(「XCOPY ...」)命令時,我將輸出重定向(沒有錯誤產生,它只是不復制)。它也不會複製我要求它複製的其他文件。
如果我將兩個流都指向一個線程,其中之一隻重定向其中一個線程並調用ReadToEnd(),則會發生這種情況。
只有當我將redirectstandardoutput和redirectstandarderror設置爲false時,它才能正常工作。
我在這裏完全損失。我想可能是輸出流被填滿了,但我無法想象爲什麼如果我打電話給ReadLine(我需要讀取線路,以便我可以解析每一行,並只向最終用戶提供相關內容)。我也想過,從線程化的C#進程調用dos命令可能會導致問題。
有沒有人有任何想法可能會發生在這裏?我應該說我在VS.net 2005上,我認爲它是.Net Framework 2.0。
這是問題。我只需設置processToRun.StartInfo.RedirectStandardInput = true並且xcopy完美運行。 有趣的是,當我有輸出工作時,無論如何我都會重定向輸入。 – 2009-02-20 07:31:12