我有一个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
但是目前我无法改变优先级,即使使用任务pipe理器也是如此。 taskmananger抛出一个“拒绝访问”的错误,但我以pipe理员身份login,我也将服务的用户帐户更改为pipe理员。
尝试更改优先级时,仍会收到“拒绝访问”消息。 任何想法我需要做什么许可?
我在这个博客中find了一个这样做的方法: http : //akshayjain.org/blog/2008/08/hack-unable-to-change-priority-in-task-manager/
如果我运行这个命令
ntsd -c qd taskmgr.exe
taskmanager以系统权限开始,我可以改变进程的优先级。 这意味着我的wsh脚本也可以做到这一点。 我创build了一个batch file
@ECHO OFF ntsd -c qd cscript.exe set_service_priority.vbs
现在进程优先级得到了修改,就像我想要的那样。
最初我无法更改进程优先级,因为服务在系统帐户下运行。 奇怪的是,即使将服务用户更改为administrator (即我),我得到了“访问被拒绝”的消息。 但是,这个技巧就像一个魅力。
您可能需要将以下内容添加到脚本的顶部:
Set objLoc = createobject("wbemscripting.swbemlocator") objLoc.Security_.privileges.addasstring "sedebugprivilege", true
虽然..我不想使用128以上的任何东西..(256 =实时)
完整列表在这里: http : //msdn.microsoft.com/en-us/library/aa393587.aspx
http://setiathome.berkeley.edu/forum_thread.php?id=69381
wmic进程其中name =“notepad.exe”CALL setpriority 32768
空闲:64低于正常:16384正常:32高于正常:32768高优先级:128实时:256