2012-05-09 98 views
1

我有以下代碼的Process.Start - 無法輸出發送到日誌文件

var parameters = 
    string.Format("TestSuiteDefinitions.dll /include:{0} /out:{1} /err:{2} /xml:{3}", String.Join(",", args), OutputLog, ErrorLog, ResultLog); 

var p = Process.Start(GetAssemblyDirectory() + @"\NUnit\nunit-console.exe", parameters); 

,讓我從我的應用程序啓動一個單獨的進程啓動與我需要的輸出NUnit的控制檯。問題是實際的NUnit輸出是唯一寫入日誌的東西。如果由於某些其他原因導致進程失敗,那麼您在命令提示符級別從nunit-console.exe中看到的命令輸出將丟失。

我曾嘗試加入

> CommandOutput.txt 

| CommandOutput.txt 

在的Process.Start參數字符串的結束,但它拋出一個錯誤,那麼這樣不喜歡這一點。

任何人都可以建議如何做到這一點?而且我無法使用Process的標準輸出流,因爲調用進程需要在其他進程啓動後立即關閉,因此無法保持開放式讀取和寫入流。

+0

p失敗或完成時的值是多少? –

回答

3

Process.Start不啓動一個shell,而只是產生一個進程。所以重定向和管道無法工作並不奇怪。您可以將ProcessStartInfo實例傳遞給Process.Start,您可以在其中設置RedirectStandardOutput並將它自己從p.StandardOutput寫入文件。

+0

唯一的問題是,我的調用項目需要保持打開狀態,直到其他進程退出並結束。我需要調用項目在產生新進程後關閉,並讓新進程負責將其標準輸出引導到某處。那可能嗎? – NZJames

+0

如果進程無法自行寫入文件輸出,那麼您將始終需要另一個進程來讀取其輸出並將其寫入文件。不管這是你自己還是'cmd'是另一回事。 – Joey

相關問題