문제
프로세스를 끝내기위한 다음 코드가 있지만 여전히 오류 코드 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 IS를 추측하는 경우), 아마도 "시스템"사용자로 실행 중일 것입니다. 이는 아마도 관리자 계정보다 권한이 더 높습니다.
시스템 계정으로 로그온 할 수는 없지만 다른 서비스를 관리하기위한 서비스를 작성할 수 있습니다 ...
다른 팁
비정상적인 사용자는 자신이 소유 한 프로세스 만 종료 할 수 있습니다. 다중 사용자 환경에서는보다 구체적인 WQL 쿼리를 작성하지 않는 한 WMI는 다른 사용자로부터 동일하게 명명 된 프로세스를 반환하기 때문에 발목에 물릴 수 있습니다.
프로세스가 서비스이고 스크립트가 권한있는 계정으로 실행되는 경우, 예를 들어 사용과 같은 "일반 경로"를 사용해야 할 수도 있습니다. 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가 액세스 거부되는 것을 볼 수 있습니다.
제휴하지 않습니다 StackOverflow