我想从列表中删除一个进程。因此,我首先列出流程,然后使用process.kill()
。但它不起作用。下面是代码,我不知道我做错了什么或我必须做什么。 (我有Windows 7)。你能帮忙吗?
private void btnProcess_Click(object sender, EventArgs e)
{
UpdateProcessList();
}
private void btnRemove_Click(object sender, EventArgs e)
{
try
{
foreach (Process p in Process.GetProcesses())
{
string strName = listBox1.SelectedItem.ToString();
if (p.ProcessName == strName)
{
p.Kill();
}
listBox1.Items.Remove(strName);
}
UpdateProcessList();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void UpdateProcessList()
{
listBox1.Items.Clear();
foreach (Process p in Process.GetProcesses())
{
listBox1.Items.Add(p.ProcessName);
}
listBox1.Sorted = true;
}
答案 0 :(得分:4)
foreach (Process p in Process.GetProcesses())
{
string strName = listBox1.SelectedItem.ToString();
if (p.ProcessName == strName)
{
p.Kill();
}
listBox1.Items.Remove(strName);
}
您的代码中存在逻辑错误。即使进程名称不匹配,也可以调用Remove()方法。此代码仅在所选项目是GetProcesses()返回的第一个项目时才有效,该概率非常低。更常见的结果是,您将在第一次通过循环时从列表中删除该项,最终不会删除任何内容。使用调试器很容易看到。
一个简单的解决方法是在if()语句块中移动Remove()调用。
更好的方法是:
foreach (var p in Process.GetProcessesByName(listBox1.SelectedItem.ToString()) {
p.Kill();
}
答案 1 :(得分:0)
答案 2 :(得分:0)
要杀死进程,您必须在管理帐户下运行。这意味着您是“真正的”管理员或您关闭了用户帐户控制(UAC)。
否则Process.Kill()将失败。