2014-09-19 60 views
1

如何檢查過程是否在c#代碼中成功執行。以下是我用來檢查的代碼。這足以檢查p.ExitCode = 0是否成功執行。如果是這樣,那麼如何得到錯誤的描述,如果我得到任何錯誤(即)退出碼<> 0如何獲取錯誤代碼及其過程描述

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c " + command); 
    psi.RedirectStandardOutput = false; 
    psi.RedirectStandardError = false; 
    psi.UseShellExecute = true; 
    psi.CreateNoWindow = true; 
    psi.WindowStyle = ProcessWindowStyle.Hidden; 
    Process p = new Process(); 
    p.StartInfo = psi; 
    p.Start(); 
    p.WaitForExit(); 
    MessageBox.Show("Error Code:" + p.ExitCode); 
+0

http://stackoverflow.com/questions/5005874/how-to-get-the-error-message-with-c-sharp – Marwie 2014-09-19 06:50:04

回答

1

的進程退出代碼的含義是通過流程定義。進程可能失敗,並且仍然返回一個零錯誤代碼。一個進程可能會成功並返回一個非零的錯誤代碼。顯然,這兩種可能性違背了慣例。

因此,爲了解釋錯誤代碼,您需要查閱正在執行的過程的文檔。通常這些文檔是不存在的,有時最便捷的方法是讀取標準輸出和/或標準錯誤流並解析該文本以找到錯誤消息。

對於什麼是值得的,你的代碼似乎是不必要的複雜,你不應該在這裏設置UseShellExecutetrue。這樣的代碼會顯得更乾淨:

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c " + command); 
psi.UseShellExecute = false; 
psi.CreateNoWindow = true; 
Process process = Process.Start(psi); 
process.WaitForExit(); 
+0

我需要運行SFTP命令在命令行中。下面的鏈接告訴0表示成功執行。 http://winscp.net/eng/docs/sftp_codes#codes_list。 – user3859666 2014-09-19 07:10:16

+0

這些是協議響應代碼而不是過程錯誤代碼。你會更好地使用sftp庫而不是外部進程 – 2014-09-19 07:14:52

+0

你可以給我任何參考網站來了解SFTP庫嗎? – user3859666 2014-09-19 07:20:18

0

psi.StandardError.ReadtoEnd()應該讓你的錯誤代碼字符串。

一個catch是psi.UseShellExecute =假希望這有助於

相關問題