2013-08-08 23 views
13

Wenn ich den folgenden Code ausführen, wird eine Win32Exception für Zugriff verweigert ausgelöst. Ich kann keine Lösungen über die Suche finden. Wie behebe ich das?Process.Kill() Zugriff verweigert

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

gut, was Prozess es versucht, zu töten? – Arran

+0

Sie erhalten eine Ausnahme für alle Prozesse, die Sie versuchen, oder für einen bestimmten Prozess? –

+0

@SriramSakthivel Jeder Prozess http://screenshu.com/static/uploads/temporary/a7/1c/gg/1no2yr.jpg – Ezzy

Antwort

8

Sie erhalten diesen Fehler im Allgemeinen, wenn Sie nicht über die erforderlichen Berechtigungen verfügen. Sie müssen Administrator sein und ab win vista Ihre App/Prozesse im erhöhten Modus ausführen. Darüber hinaus gibt es bestimmte Prozesse, die sogar als Admin nicht in der Lage sind zu töten, einige als systemkritisch, etc, und Sie müssen möglicherweise als System ausführen, und dann gibt es solche, die sogar System nicht töten kann, wie Anti-Virus, oder eine tatsächliche Virus, weil sie ihren Prozess nicht wollen töten Sie

eine andere Möglichkeit ist, dass, wenn der Prozess bereits beendet, ist es auch, dass die Ausnahme ausgelöst wird, sehen MSDN

+1

Meine Anwendung wird im Admin-Modus ausgeführt. Und ich versuche, Prozesse wie Spotify usw. zu töten. – Ezzy

+0

hast du versucht, es außerhalb deiner App zu töten? Versuchen Sie, pskill, http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx herunter zu laden, und sehen Sie, ob Sie es mit dieser App töten können, wenn Sie können, dann ist etwas mit Ihrer App nicht in Ordnung (wird nicht ausgeführt im erhöhten Modus? Sie haben den falschen Prozess in "p"?), erinnern Sie sich, die ** cmd Promp im erhöhten Modus ** auszuführen dann rufen Sie pskill von dieser erhöhten Cmd-Eingabeaufforderung – Jason

+0

Ich habe versucht, spotify mit diesem Code zu töten: '//foreach (Prozess proc in Process.GetProcessesByName ("spotify")) // { // proc.Kill(); //} ' Und es hat gut funktioniert. Scheint, wie mein ursprünglicher Code nicht funktioniert. Ich werde mir das dann ansehen müssen. Jetzt kann ich zumindest Admin-Probleme richtig regeln. – Ezzy

2

hatte ich diese Art von Problemen mit einer Delphi-Anwendung Unter Windows 8.1 Meine Anwendung wurde geschlossen, war aber immer noch im Hintergrund Prozesse des Task-Manager. Unmöglich, es mit TaskKill zu töten (versuchte Admin-Modus, "/ F" -Option, von der Befehlszeile ...) Endlich fand ich heraus, dass Windows eine DLL meiner Anwendung als "IgnoreFreeLibrary" markiert. Deshalb schloss meine Bewerbung nicht. Hier ist ein Extrakt 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.

-1

Ich hatte dasselbe Problem und verwenden diesen Codes 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); 
    } 
+0

ist Ihre Antwort zu dieser Frage? –

+0

sicher! p.Kill(); gibt Ihnen eine win32Exception, also müssen Sie user32.dll verwenden, um die Fenster anderer Programme oder Assemblys zu schließen. –