2013-07-31 16 views
2

我正在尋找使用Process.Start()來啓動一個可執行文件,但是我想繼續執行程序,不管可執行文件是成功還是失敗,或者Process.Start()本身是否引發異常。C#Process.Start()繼續如果文件未找到?

我有這樣的:

 myProcess.StartInfo.UseShellExecute = false; 
     // You can start any process, HelloWorld is a do-nothing example. 
     myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; 
     myProcess.StartInfo.CreateNoWindow = true; 
     myProcess.Start(); 

我知道你可以加入到嘗試捕捉這一點,如果沒有找到文件

  try 
     { 
      myProcess.StartInfo.UseShellExecute = false; 
      // You can start any process, HelloWorld is a do-nothing example. 
      myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; 
      myProcess.StartInfo.CreateNoWindow = true; 
      myProcess.Start(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 

嘗試捕捉版本將不會失敗?如何去與其他異常喜歡InvalidOperationException異常Win32Exception的ObjectDisposedException

的目標只是繼續與代碼,如果這個失敗...

非常感謝!

+5

爲什麼不直接使用'File.Exists(「exeFilePath」)'? – Sayse

+3

「如果找不到文件,請嘗試抓取版本不會失敗?」 - 它應該這樣做,如果你抓住所有的例外... –

+0

@ Sayse @ JonSkeetso我應該使用File.Exists的第一個選項,我應該罰款?我的代碼不會帶來期待?我不介意如果Te EX執行拋出異常... –

回答

6

捕捉異常應該保留給你預計永遠不會發生但可能發生的事件。相反,你可以嘗試檢查,如果如果你要加倍小心該文件存在第一

var filePath = @"C:\HelloWorld.exe"; 
if(File.Exists(filePath)) 
{ 
    myProcess.StartInfo.UseShellExecute = false; 
    // You can start any process, HelloWorld is a do-nothing example. 
    myProcess.StartInfo.FileName = filePath ; 
    myProcess.StartInfo.CreateNoWindow = true; 
    myProcess.Start(); 
} 

編輯

,你總是可以使用嘗試捕捉,但也趕上了具體的例外。

try 
{ 
//above code 
} 
catch(Win32Exception) 
{ 
} 

EDIT2

var path = new Uri(
    Path.Combine((System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath, 
      "filename.exe")); 

最後編輯

當一個異常被抓住了,你的程序進入catch塊,讓您可以採取相應的行動,大多數程序往往包含一些有種錯誤登錄到這個,所以這個錯誤/錯誤可以糾正,如果可能的話。這可能是值得暫且你只包括一條消息,讓用戶知道意想不到的事情發生

catch(Win32Exception) 
{ 
MessageBox.Show(this, "There was a problem running the exe"); 
} 
+3

有些人建議不要這樣做,因爲可以在檢查文件是否存在以及實際讀取文件的時間之間刪除文件。 –

+2

而這種情況是針對例外的。但是對File.Exists的檢查會降低發生異常的可能性,並且它總是一種很好的做法。 – Steve

+0

@JonathanAllen - 你有這個事實的來源嗎?我覺得線程是不是在這裏的行動,並在這裏檢查和使用的時間是非常小的 – Sayse