2016-12-23 59 views
-2

我用它來運行一個外部的exe進程:如何忽略Process.Start()「系統找不到指定的文件」?

using (Process p = new Process()) 
{ 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.FileName = "program.exe"; 
    p.StartInfo.Arguments = "example"; 
    p.Start(); 
    p.WaitForExit(); 
    string pResult = p.StandardOutput.ReadToEnd(); 
    p.Close(); 
} 

它工作正常,但如果Program.exe文件被移動或丟失,在p.Start整個應用程序崩潰();.

即使program.exe丟失,解決崩潰的最佳方法是什麼? 我想讓主應用程序保持運行,無論program.exe是否啓動。

我應該使用try/catch還是有更好的方法?

+1

'File.Exists'? –

+6

'File.Exists' *和* try/catch' – DavidG

+0

忘記'File.Exists'。只使用'try/catch':https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/ –

回答

3

與任何例外情況一樣,請使用try/catch塊來避免崩潰。

這就是說,因爲你知道這個問題的根源是缺少文件,只需做一個if檢查與File.Exists

if (File.Exists(path)) 
{ 
    using (Process p = new Process)... 
} 

大概不會是一個壞主意,使用try/catch反正到拿起任何其他例外。

+0

謝謝,我會試試這個。 program.exe將在用戶安裝的任何位置進行,但我認爲我有辦法檢測或指定位置。 –

0

這已被散列出了不少在@ BradleyDotNet的(正確)的答案和評論,但只是把我的兩分錢的價值在這裏,我認爲你應該使用這個File.Exists(path)。正如其他人所指出的那樣,通過使用異常和異常處理來代替流程控制(通過if陳述),通常是一個糟糕的主意(尤其是在.NET中)。

我想在這裏指出另外一條指南:只捕捉你知道如何處理的異常。您知道如何處理文件不存在的情況 - 只要繼續前進就好像什麼都沒發生。在我看來,除了檢查文件是否存在之外,爲了證明有一個try/catch塊,你必須列出這裏還有什麼可能會出錯的地方(即什麼事情會導致異常)以及你的計劃來處理它。

相關問題