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

C# 如何忽略Process.Start();系统找不到指定的文件";?,c#,wpf,visual-studio,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

我正在使用此命令运行外部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();
}
它工作正常,但如果程序.exe被移动或丢失,整个应用程序将在p.Start()上崩溃

即使program.exe丢失,解决崩溃的最佳方法是什么? 我希望主应用程序保持运行,无论program.exe是否启动


我应该使用try/catch还是有更好的方法?

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

也就是说,既然您知道问题的根源是缺少文件,只需使用
文件检查
是否存在

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

使用
try/catch
来发现任何其他异常可能不是一个坏主意。

这在@BradleyDotNet(正确)的答案和评论中已经讨论了很多,但是为了在这里投入我的两分钱,我认为你应该只使用
File.Exists(path)
。正如其他人所指出的,使用异常和异常处理来代替使用
if
语句控制流通常是个坏主意(特别是在.NET中)


我想在此指出的另一条准则是:只捕获您知道如何处理的异常。您知道如何处理文件不存在的情况—只要继续,就好像什么都没发生一样。在我看来,除了检查文件是否存在之外,为了证明有一个try/catch块是合理的,您必须在这里列出可能出现错误的地方(即,哪些情况会导致异常)以及您计划如何处理它。

File.Exists
File.Exists
和一个
try/catch
忘记
File.Exists
。仅使用
try/catch
:@JesseC.Slicer异常非常昂贵,并且会中断执行流程,如果存在一种常见情况,即文件不是您认为我绝对会使用的
file.Exsists
(以及一个try/catch以防万一)@BradleyDotNET不将其用于流-在特殊情况下使用它们。如果文件经常丢失,也许应该考虑一种完全不同的方法。program.exe将安装在用户安装的任何位置,但我认为我有办法检测或指定位置。