如何使用当前进程名称终止每个进程,当前进程除外

时间:2015-09-08 17:41:24

标签: c# process kill-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())

但我仍然最终终止了我自己的进程。
你能帮助我吗?我只需要为当前进程终止与进程excpet相同名称的每个进程。
谢谢你:)。

3 个答案:

答案 0 :(得分:4)

您可以估算自己的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();
            }
        }
    }

答案 1 :(得分:4)

您可以使用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(); 
}

答案 2 :(得分:2)

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

比较进程ID。