我在这里有一个接受跑步者计划,看起来像这样:
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 :(得分:14)
异常不会从一个进程流向另一个进程。您可以做的最好的事情是监视进程的退出代码 - 通常,退出代码为0表示成功,而任何其他退出代码表示错误。
当然,对于你正在推出的流程来说,情况是否是另一回事。