高優先度で実行する必要のあるWindowsサービスがあります。
1日の終わりに、このスクリプトを使用して、サービスの起動後に優先度を変更したいと思います。
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
しかし、現在、タスクマネージャーを使用しても、優先度を変更することはできません。 taskmanangerは「アクセス拒否」エラーをスローしますが、私は管理者としてログオンしており、サービスのユーザーアカウントも管理者に変更しました。
優先度を変更しようとすると、「アクセスが拒否されました」というメッセージが表示されます。それを行うために必要な許可はありますか?
私はこのブログでこれを行う方法を見つけました: 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
に変更した後でも(それは私です;)、「アクセスが拒否されました」というメッセージが表示されました。しかし、魅力のように機能するこのトリックで。
http://setiathome.berkeley.edu/forum_thread.php?id=69381
name = "notepad.exe" CALL setpriority32768のwmicプロセス
アイドル:64通常より下:16384通常:32通常より上:32768高優先度:128リアルタイム:256
スクリプトの先頭に以下を追加する必要がある場合があります。
Set objLoc = createobject("wbemscripting.swbemlocator")
objLoc.Security_.privileges.addasstring "sedebugprivilege", true
でも..128以上のものは使いたくない..(256 =リアルタイム)
ここに完全なリスト: http://msdn.Microsoft.com/en-us/library/aa393587.aspx