C# 关闭程序的主进程及其子进程

private static void Application_ApplicationExit(object sender, EventArgs e)
{
    KillProcessAndChildren(Thread.CurrentThread.ManagedThreadId);
    AppLog.Info("Exit Application");
    System.Environment.Exit(0);
}
/// <summary>
/// 结束进程和相关的子进程
/// </summary>
/// <param name="pid">需要结束的进程ID</param>
public 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);
        Console.WriteLine(pid);
        proc.Kill();
    }
    catch (ArgumentException)
    {
        /* process already exited */
    }
}

猜你喜欢

转载自www.cnblogs.com/pilgrim/p/12985374.html