C# 如何忽略Process.Start();系统找不到指定的文件";?
我正在使用此命令运行外部exe进程: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
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将安装在用户安装的任何位置,但我认为我有办法检测或指定位置。