Ende win32 Prozess Vbscript
Frage
Ich habe den folgenden Code bekam einen Prozess zu beenden, aber ich habe noch einen Fehlercode 2 (Zugriff verweigert) erhalten.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'MSSEARCH.exe'")
For each objProcess in colProcessList
wscript.echo objProcess.processid
intrc = objProcess.Terminate()
if intrc = 0 then wscript.echo "succesfully killed process" else wscript.echo "Could not kill process. Error code: " & intrc End if
Lösung
Es ist durchaus legitim zu bekommen „Zugriff verweigert“ für ein Programm zu beenden. Wenn es einen Service (was ich vermute mssearch.exe ist), dann wird es wahrscheinlich als Benutzer „SYSTEM“ ausgeführt wird, die Privilegien höher als auch dem Administrator-Konto hat.
Sie können nicht als SYSTEM-Konto anmelden, aber Sie könnten wahrscheinlich einen Dienst zur Verwaltung von anderen Diensten schreiben ...
Andere Tipps
Als nicht-privilegierten Benutzer können Sie nur Prozesse beenden Sie besitzen. In einer Mehrbenutzerumgebung dies können Sie in dem Knöchel beißen, weil WMI als auch gleichnamigen Prozesse von anderen Benutzern zurückkehren würde, es sei denn, Sie präziser WQL-Abfrage schreiben.
Wenn Ihr Prozess ist ein Service, und Ihr Skript läuft unter einem privilegierten Konto, können Sie immer noch nehmen müssen „um den regulären Weg“ zu stoppen, zum Beispiel mit WScript.Shell
net stop
oder sc.exe
zu nennen, oder, elegant, mit die Win32_Service
Klasse:
Set Services = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE Name = '" & ServiceName & "'")
For Each Service In Services
Service.StopService()
WSCript.Sleep 2000 ' wait for the service to terminate '
Next
Wenn Sie auf dieser Seite aussehen: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx Sie diesen Fehlercode 2 ist der Zugriff verweigert statt Datei nicht gefunden sehen würde