문제

프로세스를 끝내기위한 다음 코드가 있지만 여전히 오류 코드 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가 액세스 거부되는 것을 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top