Завершить процесс Win32 VBScript - PullRequest
1 голос
/ 22 октября 2008

У меня есть следующий код для завершения процесса, но я все еще получаю код ошибки 2 (доступ запрещен).

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

Ответы [ 3 ]

2 голосов
/ 22 октября 2008

Вполне законно получить «отказ в доступе» для завершения программы. Если это служба (я предполагаю, что это mssearch.exe), то она, вероятно, работает как пользователь "SYSTEM", у которого более высокие привилегии, чем даже у учетной записи администратора.

Вы не можете войти в систему как учетная запись SYSTEM, но, возможно, вы могли бы написать службу для управления другими службами ...

0 голосов
/ 22 октября 2008

Если вы посмотрите на эту страницу: http://msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx, вы увидите, что код ошибки 2 запрещен, а файл не найден

0 голосов
/ 22 октября 2008

Как непривилегированный пользователь, вы можете завершать только свои процессы. В многопользовательской среде это может укусить вас за лодыжку, поскольку WMI будет возвращать процессы с одинаковыми именами и от других пользователей, если вы не напишите более конкретный WQL-запрос.

Если ваш процесс является службой и ваш сценарий выполняется под привилегированной учетной записью, вам все равно может потребоваться «обычный маршрут», чтобы остановить его, например, используя WScript.Shell для вызова net stop или sc.exe или, более элегантно, используя класс 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
...