web-dev-qa-db-fra.com

Process.Kill () Accès refusé

Lorsque j'exécute le code suivant, une exception Win32Exception est levée pour Access Denied. Je ne trouve aucune solution via la recherche. Comment puis-je réparer ça?

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

Vous obtiendrez généralement cette erreur si vous ne disposez pas des autorisations nécessaires. Vous devez être un administrateur et sous Win Vista et supérieur, exécutez votre application/processus en mode élevé. De plus, il y a certains processus que même en tant qu'administrateur vous ne pourrez pas tuer, certains jugés critiques pour le système, etc., et vous devrez peut-être exécuter en tant que système, et il y a également ceux que même le système peut ne tuez pas, comme un antivirus ou un virus réel, car ils ne veulent pas que leur processus soit mis à mort

Une autre possibilité est que, si le processus se termine déjà, il lève également cette exception, voir MSDN

10
Jason

J'avais ce genre de problèmes avec une application Delphi Sous Windows 8.1 Mon application se fermait, mais restait dans les processus d'arrière-plan du gestionnaire de tâches. Impossible de le tuer avec TaskKill (mode admin essayé , Option "/ F", à partir de la ligne de commande ...) Enfin, j'ai découvert que Windows "marquait" un DLL de mon application comme "IgnoreFreeLibrary". C’est la raison pour laquelle ma candidature n’a pas été fermée. Voici un extrait du registre:

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

J'ai effacé l'entrée du registre et tout était rentré dans l'ordre.

2
Henry Kerval

J'ai eu le même problème et utilisé ces codes pour résoudre le problème:

    [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

désactiver UAC sur Windows résoudre le problème.

0
abd Radwan