1

我在该行的 try-catch 中放置了一个断点using。另一个在result.wasSuccessful排队。

当我这样做时,它会catch说它返回一个错误。

但是,当该using行没有断点时,不会捕获任何错误。

为什么会这样?

这是错误

+       $exception  {"Cannot process request because the process (12400) has exited."}  System.Exception {System.InvalidOperationException}

try
{
   using (Process exeProcess = Process.Start(psi))
   {
      exeProcess.PriorityClass = ProcessPriorityClass.High;
      var outString = new StringBuilder(100);
      exeProcess.OutputDataReceived += (s, e) => outString.AppendLine(e.Data);
      exeProcess.BeginOutputReadLine();

      var errString = exeProcess.StandardError.ReadToEnd();

      if (!string.IsNullOrEmpty(errString))
      {
         result.WasSuccessful = false;
         result.ErrorMessage = errString;
      }
   }
}
catch (Exception ex)
{
   result.WasSuccessful = false;
   result.ErrorMessage = ex.ToString();
}
4

1 回答 1

0

当您到达 using 处的断点时,该进程已经启动、执行和退出,使 Process 对象无效并导致错误。事实上,你有一个竞争条件,即使没有断点也可能导致问题发生。您应该在设置所有必要的属性后推迟启动该过程。此外,您应该取消 using 语句。以下示例提供了一个关于如何读取进程的标准输出和标准错误流的优秀示例:ProcessStartInfo.RedirectStandardOutput 属性

于 2013-10-26T02:13:56.380 回答