Fin del proceso win32 vbscript
Pregunta
Tengo el siguiente código para finalizar un proceso, pero aún recibo un código de error 2 (Acceso denegado).
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
Solución
Es bastante legítimo obtener " acceso denegado " para terminar un programa. Si se trata de un servicio (que supongo que es mssearch.exe), es probable que se esté ejecutando como el " SISTEMA " usuario, que tiene privilegios más altos que incluso la cuenta de administrador.
No puede iniciar sesión como la cuenta del SISTEMA, pero probablemente podría escribir un servicio para administrar otros servicios ...
Otros consejos
Como usuario sin privilegios, solo puede finalizar los procesos que posee. En un entorno multiusuario, esto puede morderle en el tobillo, porque WMI también devolverá procesos con nombres iguales de otros usuarios, a menos que escriba una consulta WQL más específica.
Si su proceso es un servicio y su secuencia de comandos se ejecuta en una cuenta privilegiada, es posible que aún deba tomar " la ruta regular " para detenerlo, por ejemplo, usando WScript.Shell
para llamar a net stop
o sc.exe
, o, más elegantemente, usando el Win32_Service
class:
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 mira en esta página: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx verá que el código de error 2 es el acceso denegado en lugar del archivo no encontrado