C# process.kill()方法不使用';我不能在Windows7上工作

C# process.kill()方法不使用';我不能在Windows7上工作,c#,list,windows-7,process,C#,List,Windows 7,Process,我想从列表中删除一个进程。因此,我首先列出进程,然后使用process.kill()。但它不起作用。下面是代码,我不知道我做错了什么或我必须做什么。(我有Windows7)。你能帮忙吗 private void btnProcess_Click(object sender, EventArgs e) { UpdateProcessList(); } private void btnRemove_Click(object s

我想从列表中删除一个进程。因此,我首先列出进程,然后使用
process.kill()
。但它不起作用。下面是代码,我不知道我做错了什么或我必须做什么。(我有Windows7)。你能帮忙吗

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;
        }

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

跟随下面的帖子


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

跟随下面的帖子


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


否则Process.Kill()将失败。

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

            foreach (Process p in Process.GetProcesses())
            {
                string strName = listBox1.SelectedItem.ToString();

                if (p.ProcessName == strName)
                {
                    p.Kill();
                }
                listBox1.Items.Remove(strName);
            }
否则,Process.Kill()将失败

            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();
        }
您的代码中有一个逻辑错误。即使进程名称不匹配,也可以调用Remove()方法。只有当所选项目是GetProcesses()返回的第一个项目时,此代码才能工作,这种可能性很低。更常见的结果是,在第一次通过循环时,您将从列表中删除该项,结果什么也没有杀死。使用调试器很容易看到

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

一个完全更好的方法是:

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

你有权限杀死那个进程吗?我是这台计算机上的管理员,并以管理员权限运行它…你想杀死哪个进程?你的代码可以杀死Notepad.exe的一个实例吗?什么叫“不工作”?你至少应该告诉我们出了什么问题(抛出异常…等等)。确保你真的是一名管理员。在Windows 7和Vista上,如果启用了用户访问控制,则管理帐户实际上不是管理员。因此,您需要在管理员帐户下运行或关闭UAC。您有权限终止该进程吗?我是这台计算机上的管理员,并以管理员权限运行它…您试图终止哪个进程?你的代码可以杀死Notepad.exe的一个实例吗?什么叫“不工作”?你至少应该告诉我们出了什么问题(抛出异常…等等)。确保你真的是一名管理员。在Windows 7和Vista上,如果启用了用户访问控制,则管理帐户实际上不是管理员。所以,您需要在管理员帐户下运行,或者关闭UAC。我已经看到了,但它会引发错误,无法修复问题,或者可能不太了解它。如果你能告诉我如何在我的项目上使用它…在运行你的exe时,你能确保它是以管理员权限运行的吗?如果我没有管理员权限,它应该会引发一个错误,不是吗?我见过它,但它会引发错误,无法修复问题,或者可能不太理解它。如果你能告诉我如何在我的项目上使用它…在运行你的exe时,你能确保它是以管理员权限运行的吗?如果我没有管理员权限,它应该会引发一个错误,不是吗?是的,你是对的,谢谢,但遗憾的是它没有解决问题。我不得不说,如果这个答案对你没有帮助,你将毫无帮助。是的,你是对的,谢谢你的回答,但遗憾的是它没有解决问题。我不得不说,如果这个答案对你没有帮助,你将毫无帮助。