process.kill()方法在Windows 7上不起作用

时间:2012-03-06 09:33:37

标签: c# list windows-7 process

我想从列表中删除一个进程。因此,我首先列出流程,然后使用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;
        }

3 个答案:

答案 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)

这是因为您没有管理员权限。

按照以下帖子

programmatically kill a process in vista/windows 7 in C#

答案 2 :(得分:0)

要杀死进程,您必须在管理帐户下运行。这意味着您是“真正的”管理员或您关闭了用户帐户控制(UAC)。

否则Process.Kill()将失败。