如何终止除当前进程以外的所有具有当前进程名称的进程

How to terminate every process with the current process name except for the current process


我试图终止与我的进程同名的每个进程而不终止我的进程。 这可能有点令人困惑,也许这段代码可以帮助您理解我的意思:

private static void KillExistingProcesses()
    {
        Process[] p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
        foreach (var pro in p)
        {
            if (...) // if pro != Process.GetCurrentProcess()
            pro.Kill();
        }
    }

我试过这样做:

            if (!pro.Equals(Process.GetCurrentProcess()) 
            && pro != Process.GetCurrentProcess())

但我还是终止了自己的进程。
你们能帮我吗?我只需要为当前进程终止与我的进程 expet 同名的每个进程。
谢谢:)

您正在比较 Process 个没有定义有意义的相等关系的对象。

比较进程 ID。

您可以估计自己的 Process-ID,然后在循环中将其与元素进行比较:

    private static void KillExistingProcesses()
    {
        Process myProc = Process.GetCurrentProcess();
        ;
        Process[] p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
        foreach (var pro in p)
        {
            if (pro.Id != myProc.Id)
            {
                pro.Kill();
            }
        }
    }

您可以使用 Linq 过滤掉具有相同 Id

的进程
Process current = Process.GetCurrentProcess();
var processes = Process.GetProcessesByName(current.ProcessName)
                       .Where(p => p.Id != current.Id);
foreach(var process in processes)
{
    process.Kill(); 
}