更改 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

wmic 进程,其中 name="notepad.exe" CALL setpriority 32768

空闲:64 低于正常:16384 正常:32 高于正常:32768 高优先级:128 实时:256

相关内容