Fim vbscript processo Win32
Pergunta
Eu tenho o seguinte código para terminar um processo, mas eu ainda receber um código de erro 2 (acesso negado).
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
Solução
É perfeitamente legítimo para obter "acesso negado" para acabar com um programa. Se é um serviço (que eu estou supondo mssearch.exe é), então é provável que seja executado como o usuário "SYSTEM", que tem privilégios maiores do que até mesmo a conta de administrador.
Você não pode fazer logon como a conta SYSTEM, mas você provavelmente poderia escrever um serviço para gerenciar outros serviços ...
Outras dicas
Como um usuário não-privilegiado, você só pode processos que você próprio fim. Em um ambiente multiusuário isso pode morder-lhe no tornozelo, porque WMI voltaria processos de mesmo nome de outros usuários, bem como, a menos que você escrever uma consulta WQL mais específico.
Se o seu processo é um serviço, e suas corridas script em uma conta privilegiada, você ainda pode precisar de tomar "a rota regular" para pará-lo, por exemplo, usando WScript.Shell
para net stop
chamada ou sc.exe
, ou, mais elegante, usando a classe Win32_Service
:
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
Se você olhar para esta página: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx você veria que o código de erro 2 é o acesso negado ao invés de arquivo não encontrado