我一直在調用一個小塊,調用外部可執行文件(在我的情況下是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