Process.Kill()访问被拒绝

时间:2013-08-08 15:05:38

标签: c# .net process kill

当我运行以下代码时,将拒绝访问拒绝的Win32Exception。我无法通过搜索找到任何解决方案。我该如何解决这个问题?

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

5 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

try {pyProcess.Kill(); } catch(Exception error){Console.WriteLine(error.ToString()); }

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

答案 4 :(得分:-1)

在Windows上禁用UAC可解决此问题。