Modificarea priorității serviciului Windows (Administrarea sistemului, Windows Server 2003, Serviciu Windows, Wmi, Prioritate De Procesare)

Jürgen Steinblock a intrebat.

Am un serviciu Windows care trebuie să ruleze cu prioritate ridicată.
La sfârșitul zilei, vreau să folosesc acest script pentru a modifica prioritatea după pornirea serviciului:

Const HIGH = 256

strComputer = "."
strProcess = "BntCapi2.exe"

Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootcimv2")
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & strProcess & "'")

For Each objProcess in colProcesses
    objProcess.SetPriority(HIGH)
Next

Dar, în prezent, nu reușesc să modific prioritatea, nici măcar cu taskmangerul. taskmanangerul aruncă o eroare „Acces refuzat”, dar eu sunt logat ca administrator și am schimbat contul de utilizator al serviciului în administrator, de asemenea.

Tot primesc mesajul „acces refuzat” atunci când încerc să schimb prioritatea. Aveți vreo idee despre ce permisiune am nevoie pentru a face acest lucru?

3 răspunsuri
Jürgen Steinblock

Am găsit o modalitate de a face acest lucru în acest blog: http://akshayjain.org/blog/2008/08/hack-unable-to-change-priority-in-task-manager/

Dacă execut această comandă

ntsd -c qd taskmgr.exe

taskmanagerul pornește cu privilegii de sistem și pot schimba prioritatea procesului. Asta înseamnă că și scriptul meu wsh poate face acest lucru. Am creat un fișier batch

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

și acum prioritatea procesului este modificată, așa cum am vrut.

Inițial, nu am putut modifica prioritatea procesului deoarece serviciul rula sub contul de sistem. Lucrul ciudat este că, chiar și după ce am schimbat utilizatorul serviciului în administrator (adică eu 😉 am primit mesajul „acces refuzat”. Dar cu acest truc care funcționează de minune.

Grizly

S-ar putea să trebuiască să adăugați următoarele la începutul scriptului dvs:

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

Deși.. Nu aș vrea să folosesc nimic mai sus de 128… (256 = Realtime)

Lista completă aici: http://msdn.microsoft.com/en-us/library/aa393587.aspx

Comentarii

  • mulțumiri pentru actualizare cu privire la valoarea corectă pentru prioritate ridicată. Mi-am luat exemplul din acest link: blogs.technet.com/b/heyscriptingguy/archive/2005/05/16/… unde este amestecat. –  > Por Jürgen Steinblock.
  • Indicația cu sedebugprivilege părea promițător, dar, din păcate, nu a ajutat cu nimic. Există o permisiune pentru „Change service priority” pe care administratorul nu o are? –  > Por Jürgen Steinblock.
  • Ahh, poate că ar trebui să fie: SeIncreaseBasePriorityPrivilege Întreaga listă aici: msdn.microsoft.com/en-us/library/aa392758%28v=VS.85%29.aspx –  > Por Grizly.
  • Nu a funcționat nici asta 🙁 Cel mai bun lucru pentru mine este să mă concentrez mai întâi pe acordarea dreptului de administrator (din moment ce nu pot seta permisiunea în task manager), aveți vreo idee cum să realizez asta? –  > Por Jürgen Steinblock.
asdf

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

wmic process where name=”notepad.exe” CALL setpriority 32768

Idle: 64Below Normal: 16384Normal: 32Above Normal: 32768High Priority: 128Real Time: 256

Comentarii

  • Acest lucru va face probabil același lucru ca și scriptul de mai sus, dar în acest caz problema mea a fost că am primit o eroare „Acces refuzat” pentru un anumit serviciu, chiar și din taskmanager. Utilizarea ntsd a rezolvat acest lucru. –  > Por Jürgen Steinblock.