it-swarm.com.de

Process.Kill () Zugriff verweigert

Wenn ich den folgenden Code ausführen, wird eine Win32Exception für Access Denied ausgelöst. Ich kann keine Lösungen über die Suche finden. Wie kann ich das beheben?

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

In der Regel erhalten Sie diese Fehlermeldung, wenn Sie nicht über die erforderlichen Berechtigungen verfügen. Sie müssen ein Administrator sein und in Windows Vista und höher Ihre App/Ihren Prozess im erhöhten Modus ausführen. Darüber hinaus gibt es bestimmte Prozesse, bei denen Sie selbst als Administrator nicht töten können, einige als kritisch für das System usw. gelten und möglicherweise als system ausgeführt werden müssen töten Sie nicht, wie Antivirenprogramme oder Viren, weil sie nicht wollen, dass Sie ihren Prozess beenden

Eine andere Möglichkeit ist, dass, wenn der Prozess bereits beendet wird, diese Ausnahme auch ausgelöst wird, siehe MSDN

10
Jason

Ich hatte diese Art von Problemen mit einer Delphi-Anwendung. Unter Windows 8.1 Meine Anwendung wurde geschlossen, befand sich jedoch immer noch in den Hintergrundprozessen des Task-Managers. Es ist nicht möglich, sie mit TaskKill zu beenden (Admin-Modus versucht) , "/ F" -Option, von der Befehlszeile aus ...) Schließlich fand ich heraus, dass Windows ein DLL meiner Anwendung als "IgnoreFreeLibrary". Markiert hat Deshalb wurde meine Anwendung nicht geschlossen. Hier ist ein Auszug aus der Registrierung:

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

Ich löschte den Registrierungseintrag und alles war wieder normal.

2
Henry Kerval

Ich hatte dasselbe Problem und habe diese Codes verwendet, um das Problem zu lösen:

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

deaktivieren Sie die Benutzerkontensteuerung unter Windows, um das Problem zu lösen.

0
abd Radwan