在进程退出/关闭/终止后关闭第三方SDK

时间:2016-01-27 10:28:43

标签: c# visual-studio-2010 process

我编写了一个C#应用程序,它使用System.Diagnostics.Process类创建一个进程,使用

var process = Process.Start(startInfo);

ServiceInvoker调用该进程。 该服务在其持续时间的cource中调用第三方DLL。

等待一段时间后,我使用

终止进程
process.Kill();

即使在DLL执行后杀死进程也不会停止。

Kill 不会调用进程的OnExit事件。 那么如何在这种情况下停止DLL执行。

这方面的任何帮助都很明显。

1 个答案:

答案 0 :(得分:0)

也许你需要杀死这个过程及其子女?

    /// <summary>
    /// Kill a process, and all of its children, grandchildren, etc.
    /// </summary>
    /// <param name="pid">Process ID.</param>
    private static void KillProcessAndChildren(int pid)
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher
          ("Select * From Win32_Process Where ParentProcessID=" + pid);
        ManagementObjectCollection moc = searcher.Get();
        foreach (ManagementObject mo in moc)
        {
            KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
        }
        try
        {
            Process proc = Process.GetProcessById(pid);
            proc.Kill();
        }
        catch (ArgumentException)
        {
            // Process already exited.
        }
    }