我希望使用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
如果失败,目标只是继续使用代码......
非常感谢!
答案 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");
}