2009-02-20 54 views
8

這有點痛苦,因爲我現在沒有代碼在我面前,但我會嘗試解釋。爲什麼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。

回答

9

有一個obscure post on the MSDN forums似乎表明XCOPY本身可能存在毛病 - 如果您重定向XCOPY的STDOUT,則還必須重定向STDIN。

注:我標誌着這個社會的維基,所以有人誰知道紅寶石可以寫一些示例代碼重定向STDIN系統()

+0

這是問題。我只需設置processToRun.StartInfo.RedirectStandardInput = true並且xcopy完美運行。 有趣的是,當我有輸出工作時,無論如何我都會重定向輸入。 – 2009-02-20 07:31:12

相關問題