23

当我运行以下代码时,会为 Access Denied 引发 Win32Exception。我无法通过搜索找到任何解决方案。我该如何解决?

foreach (ListViewItem list in showprocesses.SelectedItems)
{
    Process p = System.Diagnostics.Process.GetProcessById(Convert.ToInt32(list.Tag));
    if (p != null)
        p.Kill();
}
4

5 回答 5

14

如果您没有必要的权限,您通常会收到此错误。您必须是管理员,并且在 win vista 及更高版本中,以提升模式运行您的应用程序/进程。此外,有些进程即使以管理员身份也无法杀死,有些被认为是系统关键的,等等,您可能需要以系统身份运行,还有一些甚至系统也无法杀死的进程,例如杀毒软件,或者一个真正的病毒,因为他们不希望你杀死他们的进程

另一种可能性是,如果进程已经终止,它也会抛出该异常,请参阅MSDN

于 2013-08-08T15:14:12.140 回答
4

我在使用 Delphi 应用程序时遇到了这种问题 在 Windows 8.1 下我的应用程序正在关闭,但仍在任务管理器的后台进程中。不可能用 TaskKill 杀死它(尝试管理模式,“/F”选项,从命令行......)最后我发现 Windows 将我的应用程序的 DLL“标记”为“IgnoreFreeLibrary”。这就是为什么我的申请没有关闭的原因。这是注册表的摘录:

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"{MyApplicationPathAndExeName}"="$ IgnoreFreeLibrary<DllWithProblemName.Dll>"

我删除了注册表项,一切恢复正常。

于 2014-04-21T21:07:44.673 回答
2

我有同样的问题并使用这些代码来解决问题:

    [DllImport("user32.dll")]
    public static extern int FindWindow(string ClassName, string WindowName);

    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

    public const int WM_SYSCOMMAND = 0x0112;
    public const int SC_CLOSE = 0xF060;

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        int HWND = FindWindow(null, "My Window");//window title

        SendMessage(HWND, WM_SYSCOMMAND, SC_CLOSE, 0);
    }
于 2017-12-16T15:28:04.553 回答
-1

尝试 { pyProcess.Kill(); } catch (异常错误) { Console.WriteLine(error.ToString()); }

无需管理员访问权限。但这仅适用于某些过程。

于 2020-04-28T16:28:21.420 回答
-3

在 Windows 上禁用 UAC 解决了这个问题。

于 2018-12-18T20:59:29.730 回答