我在using
行的try-catch中放了一个断点。另一个在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();
}
答案 0 :(得分:0)
当您点击使用时的断点时,该进程已经启动,执行并退出,使Process对象无效并导致错误。事实上,你有一个竞争条件,即使没有断点也可能导致问题发生。 在设置所有必要属性后,您应该推迟启动该过程。此外,您应该取消使用using语句。 以下示例提供了有关如何读取进程的标准输出和标准错误流的一个很好的示例:ProcessStartInfo.RedirectStandardOutput Property