我一直在调用一个小块,调用外部可执行文件(在我的情况下是ffmpeg) 然后我写了一个测试并在调试模式下使用了测试运行器,现在如果我停止调试(终止)它仍然运行ffmpeg。我试图杀死终结者和IDisposable的过程 - 它仍然运行。我怎样才能确保这个过程永远不会像这样,如果调用者死亡或失败或被任何方式阻止,ffmpeg可执行文件将被保证被终止。当应用程序死亡时杀死外部进程
我跑的过程中像往常一样(没有什么花哨)
var processInfo = new ProcessStartInfo(ffmpegPath)
{
UseShellExecute = false,
Arguments = arguments,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
using (var ffmpegProc = new Process())
{
ffmpegProc.EnableRaisingEvents = true;
ffmpegProc.StartInfo = processInfo;
ffmpegProc.Start();
ffmpegProc.WaitForExit();
}
虽然我看起来不是一个非常简单的解决方案。我会尝试使用jobobjectwrapper.codeplex.com,虽然该项目看起来有点旧,但仍然让我看看我是否可以重用它 – Agzam 2013-03-04 17:22:13
@Agzam我同意你的意见。我不知道PID解决方案是否适合您的情况 – giammin 2013-03-04 17:23:45
@Agzam您是否尝试了Process.Exited Event? http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx – giammin 2013-03-04 17:36:30