Domanda

Ho il seguente codice per terminare un processo, ma ricevo ancora un codice di errore 2 (Accesso negato).

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
È stato utile?

Soluzione

È abbastanza legittimo ottenere " accesso negato " per terminare un programma. Se si tratta di un servizio (che suppongo sia mssearch.exe), probabilmente è in esecuzione come " SYSTEM " utente, che ha privilegi più elevati rispetto persino all'account Administrator.

Non puoi accedere come account SYSTEM, ma probabilmente potresti scrivere un servizio per gestire altri servizi ...

Altri suggerimenti

Come utente non privilegiato, puoi terminare solo i processi che possiedi. In un ambiente multiutente questo può morderti alla caviglia, perché WMI restituirebbe processi ugualmente denominati anche da altri utenti, a meno che tu non scriva una query WQL più specifica.

Se il processo è un servizio e lo script viene eseguito con un account privilegiato, potrebbe essere necessario prendere " il percorso normale " per interromperlo, ad esempio utilizzando WScript.Shell per chiamare net stop o sc.exe o, più elegantemente, utilizzando 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 guardi questa pagina: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx vedresti che al codice di errore 2 viene negato l'accesso invece del file non trovato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top