Fin du processus Win32 VBScript
Question
J'ai le code suivant pour mettre fin à un processus, mais je reçois toujours un code d'erreur 2 (accès refusé).
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
La solution
Il est tout à fait légitime d'obtenir un "accès refusé". pour terminer un programme. Si c'est un service (ce que je suppose que mssearch.exe est), alors il s'exécute probablement en tant que "SYSTÈME". utilisateur, qui a des privilèges plus élevés que même le compte administrateur.
Vous ne pouvez pas vous connecter en tant que compte SYSTEM, mais vous pourriez probablement écrire un service pour gérer d'autres services ...
Autres conseils
En tant qu'utilisateur non privilégié, vous pouvez uniquement mettre fin aux processus que vous possédez. Dans un environnement multi-utilisateur, cela peut vous mordre à la cheville, car WMI renverrait également des processus portant le même nom d’autres utilisateurs, sauf si vous écrivez une requête WQL plus spécifique.
Si votre processus est un service et que votre script s'exécute sous un compte privilégié, vous devrez peut-être prendre "l'itinéraire habituel". pour l'arrêter, par exemple en utilisant WScript.Shell
pour appeler net stop
ou sc.exe
, ou plus élégamment, en utilisant la touche Win32_Service
classe:
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
Si vous consultez cette page: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx vous verrez que le code d'erreur 2 est un accès refusé au lieu d'un fichier introuvable