Завершить процесс Win32 VBScript
Вопрос
У меня есть следующий код для завершения процесса, но я все еще получаю код ошибки 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
Решение
Это вполне законно, чтобы получить "доступ запрещен" для завершения программы. Если это служба (я предполагаю, что mssearch.exe), то она, вероятно, работает как " SYSTEM " пользователь, который имеет более высокие привилегии, чем даже учетная запись администратора.
Вы не можете войти в систему как учетная запись SYSTEM, но, возможно, вы могли бы написать службу для управления другими службами ...
Другие советы
Как непривилегированный пользователь, вы можете завершать только свои процессы. В многопользовательской среде это может укусить вас за лодыжку, потому что 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
Если вы посмотрите на эту страницу: http: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx вы увидите, что код ошибки 2 запрещен, а не файл не найден