【问题标题】:process.kill() method doesn't work on windows 7process.kill() 方法在 Windows 7 上不起作用
【发布时间】:2012-03-06 09:33:36
【问题描述】:

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

【问题讨论】:

  • 你有权限杀死那个进程吗?
  • 我是这台计算机的管理员,并以管理员权限运行它...
  • 你想杀死什么进程?您的代码是否可以杀死 Notepad.exe 的实例?
  • “不起作用”是什么意思?你至少应该告诉我们出了什么问题(抛出异常......等等)。
  • 确保您真的是管理员。在 Windows 7 和 Vista 上,如果启用了用户访问控制,则管理帐户并不是真正的管理员。因此,您需要在 管理员帐户下运行或关闭 UAC。

标签: c# list windows-7 process


【解决方案1】:
            foreach (Process p in Process.GetProcesses())
            {
                string strName = listBox1.SelectedItem.ToString();

                if (p.ProcessName == strName)
                {
                    p.Kill();
                }
                listBox1.Items.Remove(strName);
            }

您的代码中存在逻辑错误。即使进程名称 匹配,您也调用 Remove() 方法。仅当所选项目是 GetProcesses() 返回的第一个项目时,此代码才有效,这种可能性非常低。更常见的结果是,您将在第一次通过循环时从列表中删除该项目,最终什么也没杀死。使用调试器很容易查看。

一个简单的解决方法是将 Remove() 调用移到 if() 语句块内。

一个更好的方法是:

        foreach (var p in Process.GetProcessesByName(listBox1.SelectedItem.ToString()) {
            p.Kill();
        }

【讨论】:

  • 是的,你说得对,谢谢你,但遗憾的是它并没有解决问题。
  • 我不得不说,如果这个答案对您没有帮助,您将无能为力。
【解决方案2】:

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

关注下面的帖子

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

【讨论】:

  • 我见过它,但它会引发错误并且不能解决问题,或者可能不太了解它。如果你能告诉我如何在我的项目中使用它...
  • 在运行你的 exe 时,你能确保它是以管理员权限运行的吗?
  • 如果我没有管理员权限,它应该会引发错误,不是吗?
【解决方案3】:

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

否则 Process.Kill() 将失败。

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多