C#Process.Start()如果找不到文件则继续?

时间:2013-07-31 21:49:59

标签: c#

我希望使用Process.Start()来启动可执行文件,但我想继续执行程序,无论可执行文件是成功还是失败,或者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 catch

          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

如果失败,目标只是继续使用代码......

非常感谢!

1 个答案:

答案 0 :(得分: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 catch,但要抓住特定的例外情况。

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