如何使用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 页面”并且标题不在我们的列表中,则终止程序”
我想杀死多个进程,但也想保留一些特定的进程。 实际上我有两个列表框,其中一个是我要终止的进程列表。另一个有我想保留的列表。
例如,我想关闭 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 页面”并且标题不在我们的列表中,则终止程序”