ここで私の論理が正しいことを確認したいと思います。プロセスを数秒間実行したいのですがtimeout
、それが長く実行されている場合は、すぐに強制終了する必要があります。
フラグはcompleted
、プロセスが意図したとおりに完了したかどうかを確実に示す必要があります。
process.HasExited
また、へのチェックが正しいかどうか、私は確信が持てません。process.WaitForExit()
false を返し、Kill()
成功した場合、process.HasExited
常にtrue になりますか? それは私の推測ですが、確認したかったのです。また、ログ記録以外に、Kill() が失敗した場合に何かできることがあるとしたら?
using (process = new Process())
{
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler(OnOutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(OnErrorDataReceived);
process.Exited += new EventHandler(OnExited);
process.StartInfo = startInfo;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
if (!process.WaitForExit(timeout))
{
try
{
process.Kill();
}
catch (Exception e)
{
LogError(e, MethodBase.GetCurrentMethod());
}
finally
{
this.completed = false;
}
}
else
{
if (process.HasExited)
{
this.code = process.ExitCode;
this.completed = true;
}
else
{
this.completed = false;
}
}
}