programmatisch töten einen Prozess in vista/windows 7 in C#
Möchte ich töte einen Prozess programmgesteuert in vista/windows 7 (ich bin mir nicht sicher, ob es erhebliche Probleme bei der Umsetzung der UAC zwischen den beiden einen Unterschied zu machen).
Recht jetzt mein code sieht wie folgt aus:
if(killProcess){
System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
//Before starting the new process make sure no other MyProcessName is running.
foreach (System.Diagnostics.Process p in process)
{
p.Kill();
}
myProcess = System.Diagnostics.Process.Start(psi);
}
Habe ich zu tun, weil ich brauche zu machen sicher, dass, wenn der Benutzer das Programm stürzt ab oder beendet sich schlagartig, dieser sekundäre Vorgang wird gestartet, wenn die Anwendung neu gestartet wird, oder wenn der Nutzer will, um die Parameter zu ändern, der für diese sekundären Prozess.
Funktioniert der code einwandfrei in XP aber nicht in Windows 7 (und ich nehme an, in Vista) mit einem "Zugriff verweigert" - Nachricht. Von dem, was der allmächtige Google hat mir gesagt, ich brauche, um mein töten-Programm als administrator, dieses problem zu umgehen, aber das ist einfach nur schwach Soße. Die andere mögliche Antwort ist die Verwendung linkdemand-Anweisung, aber ich verstehe nicht, auf der msdn-Seite für linkdemand-Anweisung wie es sich auf Prozesse.
Konnte ich verschieben Sie den code in einen thread, aber das hat eine ganze Reihe von anderen Schwierigkeiten, die es zu ihm, dass ich wirklich nicht wollen, zu entdecken.
- Kill() scheint zu funktionieren gut für mich, sowohl für die Prozesse erstellt von explorer und der gleichen app. Mit Vista hier im eingeschränkten Benutzerrechten.
- Vielleicht ist es nur ein windows 7 Fehler? Kannst du deinen code in eine Antwort? Denn das ist nur verwirrend für mich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig, dass es ist, weil Sie nicht über administrative Rechte. Sie können dieses Problem durch die Installation eines service unter dem lokalen system-Benutzer und ausführen eines benutzerdefinierten Befehl gegen, wie gebraucht.
In Ihrem windows-form Anwendung:
In Ihren Dienst:
Füge ich den code für Simon Buchan ' s Vorschlag. Es macht Sinn und sollte auch funktionieren, vorausgesetzt, Ihr windows-Formular wird eingeleitet in den ersten Platz.
Hier ist, wo Sie erstellen den Prozess. Beachten Sie die variable myProc. Das ist Ihr Griff auf Sie:
Später, nur töten Sie mit: