我使用它来运行外部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还是有更好的方法?
答案 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块,你必须列出这里可能出现的其他问题(即什么会导致异常)以及你如何计划处理它。