![更改 Windows 服务优先级](https://linux22.com/image/524172/%E6%9B%B4%E6%94%B9%20Windows%20%E6%9C%8D%E5%8A%A1%E4%BC%98%E5%85%88%E7%BA%A7.png)
我有一个需要以高优先级运行的 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