web-dev-qa-db-ja.com

Windowsサービスの優先度を変更する

高優先度で実行する必要のある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は「アクセス拒否」エラーをスローしますが、私は管理者としてログオンしており、サービスのユーザーアカウントも管理者に変更しました。

優先度を変更しようとすると、「アクセスが拒否されました」というメッセージが表示されます。それを行うために必要な許可はありますか?

2

私はこのブログでこれを行う方法を見つけました: 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に変更した後でも(それは私です;)、「アクセスが拒否されました」というメッセージが表示されました。しかし、魅力のように機能するこのトリックで。

5

http://setiathome.berkeley.edu/forum_thread.php?id=69381

name = "notepad.exe" CALL setpriority32768のwmicプロセス

アイドル:64通常より下:16384通常:32通常より上:32768高優先度:128リアルタイム:256

1
asdf

スクリプトの先頭に以下を追加する必要がある場合があります。

Set objLoc = createobject("wbemscripting.swbemlocator")
objLoc.Security_.privileges.addasstring "sedebugprivilege", true 

でも..128以上のものは使いたくない..(256 =リアルタイム)

ここに完全なリスト: http://msdn.Microsoft.com/en-us/library/aa393587.aspx

1
Grizly