如何使用c#杀死除特定进程之外的所有进程

How to kill all processes except the specific ones using c#

我想杀死多个进程,但也想保留一些特定的进程。 实际上我有两个列表框,其中一个是我要终止的进程列表。另一个有我想保留的列表。

例如,我想关闭 Google Chrome 并保持计算器打开。 但是这段代码的问题是,它关闭了所有进程,甚至是 winform 本身。

private void BtnStop_Click(object sender, EventArgs e)
{
 Process[] processes = Process.GetProcesses();
  foreach (Process p in processes)
   {
    if (!String.IsNullOrEmpty(p.MainWindowTitle))
    {
//ChBlockApp is the name of the list box that i want to kill
      ChBlockApp.Items.Add(p.MainWindowTitle);
                  
      try 
          {
    // ListAllowed is the name of listbox which i want to keep
 if (p.MainWindowTitle != "Avid-Main Page" | p.MainWindowTitle != ListAllowed.items.toString())
     {
    
      p.Kill();
      }
}
catch (Exception KillExc)
                            
 {
MessageBox.Show("Unable to Close the Applicaiton: " + KillExc, "Warning", MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
}
}

我已尝试使用支票来保持此语句中的 visual studio 打开。

if (p.MainWindowTitle != "Avid-Main Page")
                            {}

但是也没用。

This Link 有一些提示,但我有多个程序要保留。

这一行你的逻辑是错误的:

if (p.MainWindowTitle != "Avid-Main Page" |
    p.MainWindowTitle != ListAllowed.items.toString())

应该是:

if (p.MainWindowTitle != "Avid-Main Page" &&
    !ListAllowed.Items.OfType<string>().Any(x => x == p.MainWindowTitle))

您必须遍历列表中的项目。 Linq 通过实现 Any 使我们的工作变得简单。它将遍历您的项目并检查是否有满足谓词的项目。

此外,如果您使用 | 而不是 ||,则您使用的是按位或。你可能不想那样做。通常在这些情况下,如果第一个为假,则您不需要验证另一个案例,它应该在那个时候失败。

在这种情况下,我将其更改为 &&,因为这样更容易理解:

“如果标题不等于“Avid-Main 页面”并且标题不在我们的列表中,则终止程序”