2013-07-31 2 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); 
     } 

Try улов версия не будет ошибкой, если файл не найден? Как пойти с другим исключением, как InvalidOperationException Win32Exception ObjectDisposedException

Цель просто продолжать с кодом, если это не в состоянии ...

Спасибо большое!

+5

Почему бы просто не использовать 'File.Exists (« exeFilePath »)'? – Sayse

+3

«Попробовать версию catch не получится, если файл не найден?» - Он должен сделать, если вы поймаете все исключения ... –

+0

@ Sayse @ JonSkeetso я должен использовать первый вариант с File.Exists, и я должен быть в порядке? Мой код не будет распространять? Я не против, если te exe выполнил исключение исключений ... –

ответ

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")); 

Final редактировать

Когда исключение ловится, программа переходит в блок поймать, чтобы позволить вам действовать соответствующим образом, большинство программ, как правило, включают в себя некоторые вид ошибки регистрации в этом, чтобы эта ошибка/ошибка могла быть исправлена, если это возможно. Возможно, стоит упомянуть то, что вы просто включаете сообщение, чтобы сообщить пользователю что-то неожиданное.

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

Некоторые люди рекомендуют не делать этого, потому что файл может быть удален между моментом проверки, если он существует, и время, которое вы действительно прочитали. –

+2

И этот сценарий для исключений. Но проверка на File.Exists уменьшает вероятность попадания в исключение, и это всегда хорошая практика. – Steve

+0

@JonathanAllen - У вас есть источники для этого факта? Я чувствую, что нить не работает здесь, а время до проверки и использования здесь очень незначительное. – Sayse

Смежные вопросы