我在这里有一个接受跑步者计划,看起来像这样:
public Result Run(CommandParser parser) { var result = new Result(); var watch = new Stopwatch(); watch.Start(); try { _testConsole.Start(); parser.ForEachInput(input => { _testConsole.StandardInput.WriteLine(input); return _testConsole.TotalProcessorTime.TotalSeconds < parser.TimeLimit; }); if (TimeLimitExceeded(parser.TimeLimit)) { watch.Stop(); _testConsole.Kill(); ReportThatTestTimedOut(result); } else { result.Status = GetProgramOutput() == parser.Expected ? ResultStatus.Passed : ResultStatus.Failed; watch.Stop(); } } catch (Exception) { result.Status = ResultStatus.Exception; } result.Elapsed = watch.Elapsed; return result; }
_testConsole是一个Process适配器,它将常规的.net进程包装成更可行的东西.但是我很难从启动过程中捕获任何异常(即catch语句在这里毫无意义)我正在使用类似的东西:
_process = new Process { StartInfo = { FileName = pathToProcess, UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = true, Arguments = arguments } };
建立过程.有任何想法吗?
异常不会从一个进程流向另一个进程.您可以做的最好的事情是监视进程的退出代码 - 通常,退出代码0表示成功,任何其他退出代码表示错误.
当然,对于你正在推出的流程来说,情况是否是另一回事.