
我有一個需要以高優先權運行的 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
wmic 進程,其中 name="notepad.exe" CALL setpriority 32768
空閒:64 低於正常值:16384 正常:32 高於正常值:32768 高優先:128 即時:256