2016-01-22 42 views
-1

我想知道是否有其他替代方法捕獲C#中的過程輸出。 我有下面的代碼替代讀取過程輸出

Process __process = new Process(); 
__process.StartInfo.Verb = "runas"; 
__process.StartInfo.FileName = "some file path here"; 
__process.StartInfo.UseShellExecute = true; 
__process.Start(); 
__process.WaitForExit(300000); 

爲什麼UseShellExecute設置爲true,這裏是因爲這是必需的動詞「運行方式」以管理員身份運行的原因。結果,我無法重定向程序的標準輸出。 如果我不能使用StandardOutput,我可以捕獲Process輸出的其他方法是什麼?我想讓程序寫入一個文件,然後從那個文件中讀取,但這看起來效率不高。

+0

雖然我傾向於爭取在效率我的代碼......這個過程是否需要經常運行?輸出是否會非常大,需要相當長的時間才能閱讀?如果不是的話,那麼我會堅持使用文件I/O,如果你可以的話 – Russ

回答

0

如果您可以編寫實際的程序,您將開始使用可能是最佳/最有效解決方案的管道。可能有一種方法可以讓進程輸出由其他命令/程序傳送。

Pipe Operations in the .Net Framework

您可以創建一個名爲或anonymous pipe,並通過它的名字/ ID /句柄程序作爲參數。程序然後可以連接到管道的另一端,並將數據流傳回給調用它的應用程序。

編輯我假設這是在Windows環境中所有正在運行的,我不知道,如果在過程中使用的管道開始UseShellExecute = true作品..

+0

是的,這是一個Windows環境 – IsaacBok

+0

我不會推薦管道作爲第一選擇來溝通不同的帳戶(注意OP需要「runas」)妥善處理安全措施以使其正常工作(特別是沒有合理的樣本)。如果可能的話,將數據保存到文件中將會更方便/更安全。 –

+0

@AlexeiLevenkov同意,保存到文件肯定會變得更容易。由於OP已經考慮使用文件並且無法捕獲標準輸出,我只提出這個建議。我有點急於給出一個替代方案 – Russ