Ändern der Windows-Dienstpriorität

Ändern der Windows-Dienstpriorität

Ich habe einen Windows-Dienst, der mit hoher Priorität ausgeführt werden muss.
Letztendlich möchte ich dieses Skript verwenden, um die Priorität nach dem Start des Dienstes zu ändern:

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

Aber derzeit kann ich die Priorität nicht ändern, auch nicht mit dem Taskmanager. Der Taskmanager gibt einen „Zugriff verweigert“-Fehler aus, aber ich bin als Administrator angemeldet und habe das Benutzerkonto des Dienstes auch auf Administrator geändert.

Beim Versuch, die Priorität zu ändern, erhalte ich immer noch die Meldung „Zugriff verweigert“. Irgendwelche Ideen, welche Berechtigung ich dafür benötige?

Antwort1

Ich habe in diesem Blog eine Möglichkeit gefunden, dies zu tun:http://akshayjain.org/blog/2008/08/hack-unable-to-change-priority-in-task-manager/

Wenn ich diesen Befehl ausführe

ntsd -c qd taskmgr.exe

der Taskmanager startet mit Systemprivilegien und ich kann die Prozesspriorität ändern. Das bedeutet, dass mein WSH-Skript dies auch kann. Ich habe eine Batchdatei erstellt

@ECHO OFF
ntsd -c qd cscript.exe set_service_priority.vbs

und jetzt wird die Prozesspriorität wie gewünscht geändert.

Anfangs konnte ich die Prozesspriorität nicht ändern, da der Dienst unter dem Systemkonto lief. Das Seltsame ist, dass administratorich sogar nach der Änderung des Dienstbenutzers (das bin ich ;) die Meldung „Zugriff verweigert“ erhielt. Aber mit diesem Trick funktioniert das wie am Schnürchen.

Antwort2

Möglicherweise müssen Sie oben in Ihrem Skript Folgendes hinzufügen:

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

Obwohl ... ich würde nichts über 128 verwenden wollen ... (256 = Echtzeit)

Vollständige Liste hier:http://msdn.microsoft.com/en-us/library/aa393587.aspx

Antwort3

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

wmic-Prozess, wobei Name = "notepad.exe" CALL setpriority 32768

Leerlauf: 64 Unter Normal: 16384 Normal: 32 Über Normal: 32768 Hohe Priorität: 128 Echtzeit: 256

verwandte Informationen