Windows 서비스 우선순위 변경

Windows 서비스 우선순위 변경

높은 우선 순위로 실행해야 하는 Windows 서비스가 있습니다.
결국 나는 이 스크립트를 사용하여 서비스 시작 후 우선 순위를 수정하고 싶습니다.

Const HIGH = 256

strComputer = "."
strProcess = "BntCapi2.exe"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & strProcess & "'")

For Each objProcess in colProcesses
    objProcess.SetPriority(HIGH)
Next

그런데 현재는 작업관리자를 사용해도 우선순위를 변경할 수 없습니다. 작업 관리자에서 "액세스 거부" 오류가 발생했지만 관리자로 로그온했으며 서비스의 사용자 계정도 관리자로 변경했습니다.

우선순위를 변경하려고 하면 여전히 "액세스 거부" 메시지가 나타납니다. 그렇게 하려면 어떤 권한이 필요한지 아시나요?

답변1

이 블로그에서 이 작업을 수행하는 방법을 찾았습니다.http://akshayjain.org/blog/2008/08/hack-unable-to-change-priority-in-task-manager/

이 명령을 실행하면

ntsd -c qd taskmgr.exe

작업 관리자는 시스템 권한으로 시작하며 프로세스 우선 순위를 변경할 수 있습니다. 이는 내 wsh 스크립트도 이 작업을 수행할 수 있음을 의미합니다. 배치파일을 만들었어요

@ECHO OFF
ntsd -c qd cscript.exe set_service_priority.vbs

이제 내가 원하는 대로 프로세스 우선순위가 수정되었습니다.

처음에는 서비스가 시스템 계정으로 실행되었기 때문에 프로세스 우선순위를 변경할 수 없었습니다. 이상한 점은 서비스 사용자를 administrator(그게 나야;)로 변경한 후에도 "액세스 거부" 메시지가 표시된다는 것입니다. 하지만 이 트릭은 마치 매력처럼 작용합니다.

답변2

스크립트 상단에 다음을 추가해야 할 수도 있습니다.

Set objLoc = createobject("wbemscripting.swbemlocator")
objLoc.Security_.privileges.addasstring "sedebugprivilege", true 

하지만.. 128 이상의 것은 사용하고 싶지 않습니다.. (256 = 실시간)

전체 목록은 여기:http://msdn.microsoft.com/en-us/library/aa393587.aspx

답변3

http://setiathome.berkeley.edu/forum_thread.php?id=69381

name="notepad.exe"인 wmic 프로세스 CALL setpriority 32768

유휴: 64 정상 미만: 16384 정상: 32 정상 초과: 32768 높은 우선순위: 128 실시간: 256

관련 정보