2011-08-27 43 views
0

我試圖調用進程(控制檯應用程序):過程中使用下面的代碼不工作

 ProcessStartInfo pi = new ProcessStartInfo(); 
     pi.UseShellExecute = false; 
     pi.RedirectStandardOutput = true; 
     pi.CreateNoWindow = true; 
     pi.FileName = @"C:\fakepath\go.exe"; 
     pi.Arguments = "FOO BAA"; 
     Process p = Process.Start(pi); 
     StreamReader streamReader = p.StandardOutput; 
     char[] buf = new char[256]; 
     string line = string.Empty; 
     int count; 
     while ((count = streamReader.Read(buf, 0, 256)) > 0) 
     { 
      line += new String(buf, 0, count); 
     } 

它適用於只有一些情況。 該文件不起作用的大小爲1.30 mb, 我不知道這是否是它無法正常工作的原因。 line返回一個空字符串。 我希望這很清楚。 有人能指出我的錯誤嗎?提前致謝。

+0

失敗的形式是什麼? –

+0

對於這種情況,返回一個空字符串。 我使用PHP的exec()函數(調用相同的進程)進行了測試,工作正常。 –

+1

不知道C#並且這不是問題,但是在包含BAA的行中似乎存在不平衡的''' –

回答

2

一對夫婦的想法:StreamReader的的

  1. 各種閱讀*方法需要你,以確保它們運行之前的程序已經完成,否則可能因時間問題得不到輸出。如果您想使用此路線,您可能需要查看Process.WaitForExit()函數。另外,除非你有特定的緩衝區分配的原因(對接IMO中的痛苦),我只是在循環中使用readline(),或者因爲進程已經退出,所以ReadToEnd()獲得整個輸出。既不要求你必須做字符數組,這會打開你的數學錯誤與緩衝區大小。

  2. 如果你想要去的異步和轉儲輸出爲你跑,你將要使用BeginOutputReadLine()函數(參見MSDN)

  3. 別忘了錯誤的處理方式不同,所以如果任何你的應用程序寫入STDERR的原因,你都會想使用相應的錯誤輸出函數來讀取輸出。

相關問題