如何忽略Process.Start()"系统找不到指定的文件"?

时间:2016-12-23 20:54:04

标签: c# wpf visual-studio

我使用它来运行外部exe进程:

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还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

与任何例外情况一样,使用try/catch块来避免崩溃。

那就是说,既然您知道问题的根源是丢失的文件,那么只需if检查File.Exists

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

使用try/catch 无论如何来获取任何其他例外可能不是一个坏主意。

答案 1 :(得分:0)

在@ BradleyDotNet的(正确的)答案和评论中,这已经被删除了很多,但只是为了在这里抛出我的两分钱,我认为你应该只使用 {{ 1}}为此。正如其他人所指出的那样,使用异常和异常处理代替使用File.Exists(path)语句控制流程通常是一个坏主意(特别是在.NET中)。

我想在此指出另一个指南:只捕捉你知道如何处理的异常。你知道如何处理文件不存在的情况 - 只是继续前进,好像什么也没发生。在我看来,除了检查文件是否存在之外,为了证明有一个try / catch块,你必须列出这里可能出现的其他问题(即什么会导致异常)以及你如何计划处理它。