11335
18.12.2005, aktualisiert am 16.01.2007
44411
30
0
Windows-Dienste: Priorität ändern?
Hallo!
Ich suche nun schon seit zwei Tagen alles moegliche ab, doch es scheint, dass entweder ich den Wald vor lauter Baeumen nicht sehe oder dass mein Problem - schlicht - unloesbar ist.
Meine Frage ist sehr simpel:
Wie kann man die Prioritaet eines "Dienstes" (Service) aendern?
Ich kann eure Antworten kaum erwarten!
Danke & schoene Gruesse,
Finger
Ich suche nun schon seit zwei Tagen alles moegliche ab, doch es scheint, dass entweder ich den Wald vor lauter Baeumen nicht sehe oder dass mein Problem - schlicht - unloesbar ist.
Meine Frage ist sehr simpel:
Wie kann man die Prioritaet eines "Dienstes" (Service) aendern?
Ich kann eure Antworten kaum erwarten!
Danke & schoene Gruesse,
Finger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 21854
Url: https://administrator.de/contentid/21854
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
30 Kommentare
Neuester Kommentar
Moin,
mit CTRG+SHIFT+ESC den Taskmanager aufrufen, Rechtsklick auf den Dienst, Priorität einstellen.
Gruß, Rene
mit CTRG+SHIFT+ESC den Taskmanager aufrufen, Rechtsklick auf den Dienst, Priorität einstellen.
Gruß, Rene
Servus,
falls du die Priorität dauerhaft (also auch nach Neustart) ändern willst, dann wird's ein wenig schwieriger, weil manche Dienste beim Start ihre Priorität selbst einstellen.
Da kenne ich für's DOS jetzt keinen Befehl. Es gibt aber im .net Framework eine Priority-Klasse, mit deren Hilfe man sich einen Parser schreiben kann.
Falls es schwierigkeiten mit Zugriffsrechten gibt, muss man unter:
Start -> Einstellungen -> Systemsteuerung
Hier die Verwaltung aufrufen.
Dadrin dann Dienste aufrufen
Unter Eigenschaften im Karteireiter Anmelden einen entsprechendes Konto angeben.
Ich weiß, das ist jetzt keine Lösung, aber zumendest ein Ansatz.
Gruzß
Dogbert
falls du die Priorität dauerhaft (also auch nach Neustart) ändern willst, dann wird's ein wenig schwieriger, weil manche Dienste beim Start ihre Priorität selbst einstellen.
Da kenne ich für's DOS jetzt keinen Befehl. Es gibt aber im .net Framework eine Priority-Klasse, mit deren Hilfe man sich einen Parser schreiben kann.
Falls es schwierigkeiten mit Zugriffsrechten gibt, muss man unter:
Start -> Einstellungen -> Systemsteuerung
Hier die Verwaltung aufrufen.
Dadrin dann Dienste aufrufen
Unter Eigenschaften im Karteireiter Anmelden einen entsprechendes Konto angeben.
Ich weiß, das ist jetzt keine Lösung, aber zumendest ein Ansatz.
Gruzß
Dogbert
Nochmals Servus,
wenn's um die Zugriffsrechte geht, kann evtl. ein Startskript helfen.
1. Den Dienst in der Verwaltung nicht automatisch starten lassen
2. Über ein Skript, das beim PC-Start ausgeführt wird den Dienst starten ('net start ...')
3. Wenn's unter einem gewissen Account laufen soll, 'runas' verwenden.
Runas hat jedoch den Nachteil, das User und Passwort mit im Skript stehen müssen, falls man diese nicht jedesmal eingeben will. In diesem Fall gibt's noch ein Tool, das skripte verschlüsselt ausführen kann. Mir ist leider der Name entfallen -> googeln, oder man schreibt ein kleines Progrämmchen, in dem diese Sachen hinterlegt sind.
Procviewer kannte ich bisher nicht, ist aber open source (zumindest das, das ich gefunden habe)
http://sourceforge.net/projects/procviewer
und kann somit leicht auf die eigenen Bedürfnisse angepasst werden. Da hat sich ja die Lösung von selbst ergeben.
Der Code ist als Plattformunabhängig gekennzeichnet (falls er sich nicht compilieren lässt, lieber mal zu cygwin schielen)
Gruß
Dogbert
wenn's um die Zugriffsrechte geht, kann evtl. ein Startskript helfen.
1. Den Dienst in der Verwaltung nicht automatisch starten lassen
2. Über ein Skript, das beim PC-Start ausgeführt wird den Dienst starten ('net start ...')
3. Wenn's unter einem gewissen Account laufen soll, 'runas' verwenden.
Runas hat jedoch den Nachteil, das User und Passwort mit im Skript stehen müssen, falls man diese nicht jedesmal eingeben will. In diesem Fall gibt's noch ein Tool, das skripte verschlüsselt ausführen kann. Mir ist leider der Name entfallen -> googeln, oder man schreibt ein kleines Progrämmchen, in dem diese Sachen hinterlegt sind.
Procviewer kannte ich bisher nicht, ist aber open source (zumindest das, das ich gefunden habe)
http://sourceforge.net/projects/procviewer
und kann somit leicht auf die eigenen Bedürfnisse angepasst werden. Da hat sich ja die Lösung von selbst ergeben.
Der Code ist als Plattformunabhängig gekennzeichnet (falls er sich nicht compilieren lässt, lieber mal zu cygwin schielen)
Gruß
Dogbert
So, hab's mal da upgeloadet, wo der erste erfolgreiche Google-Link war.
Schau mal ob es das ist, was dir vorschwebte.
Process: Prozessname (ohne .exe)
Für die Parameterauswahl, einfach mal ohne alles aufrufen, im Hexeditor nachschaun oder mir glauben.
Usage: Setpriority process Priority
Values for Priority: r=realtime, h=high, a=above normal, n=Normal, b=below norma, i=idle
Wäre dann für Rückmeldung dankbar. (Hab grad 2 Schreibfehler in der Usage entdeckt, die dürften aber nicht ins Gewicht fallen).
Gruß
Dogbert
Schau mal ob es das ist, was dir vorschwebte.
Process: Prozessname (ohne .exe)
Für die Parameterauswahl, einfach mal ohne alles aufrufen, im Hexeditor nachschaun oder mir glauben.
Usage: Setpriority process Priority
Values for Priority: r=realtime, h=high, a=above normal, n=Normal, b=below norma, i=idle
Wäre dann für Rückmeldung dankbar. (Hab grad 2 Schreibfehler in der Usage entdeckt, die dürften aber nicht ins Gewicht fallen).
Gruß
Dogbert
Moin,
die Fehlermeldung ist höchst seltsam. Es dürfte doch höchstens irgendeine Ausgabe in der Kommandozeile stehen.
Hast du das Programm über Kommandozeile gestartet?
Ich hab das Dingens im VB.net geschrieben. Hast du .net Framework drauf? Getestet mit WinXP und Win2k ab .net Framework 1.1.
Ich kann dir die paar Zeilen Quellcode reinposten, falls du's selber compilieren kannst.
Gruß
Dogbert
die Fehlermeldung ist höchst seltsam. Es dürfte doch höchstens irgendeine Ausgabe in der Kommandozeile stehen.
Hast du das Programm über Kommandozeile gestartet?
Ich hab das Dingens im VB.net geschrieben. Hast du .net Framework drauf? Getestet mit WinXP und Win2k ab .net Framework 1.1.
Ich kann dir die paar Zeilen Quellcode reinposten, falls du's selber compilieren kannst.
Gruß
Dogbert
Hi!
@Dogbert
Kannst Du Dein Proggie nochmal irgendwo hochladen? Das wäre nett von Dir. Wenn ich richtig verstanden habe lässt sich damit die Priorität eines Dienstes doch dauerhaft ändern, oder? Also behält der Dienst auch nach einem Neustart seine neue Priorität?
@Dogbert
Kannst Du Dein Proggie nochmal irgendwo hochladen? Das wäre nett von Dir. Wenn ich richtig verstanden habe lässt sich damit die Priorität eines Dienstes doch dauerhaft ändern, oder? Also behält der Dienst auch nach einem Neustart seine neue Priorität?
Servus TimL,
holla, nach fast einem Jahr schaut wieder mal wer vorbei ...
Vorweg:
Manche Dienste könnten mit bestimmter Prio gestartet werden, wäre bestimmt eine elegante Lösung aber da bin ich in den Tiefen der Registry leider nicht fündig geworden. Andere Dienste stellen sich die Prio beim Start selbst ein - um den dann mit anderer Priorität zu starten müsste man ihn patchen. Das wird hier nicht gemacht (wäre auch nicht legal).
Mein Progrämmchen ist diesbezüglich ein Workaround, d.h. es nimmt sich den laufenden Prozess und stellt dessen Priorität entprechend um - das gilt für jede angegebene .exe, nicht nur für Dienste.
Wenn dies auch einen Windows-Neustart überleben soll musst du aber ein Skript für den Systemstart erstellen - geht mit der mmc.
Gruß
Dogbert
holla, nach fast einem Jahr schaut wieder mal wer vorbei ...
Vorweg:
Manche Dienste könnten mit bestimmter Prio gestartet werden, wäre bestimmt eine elegante Lösung aber da bin ich in den Tiefen der Registry leider nicht fündig geworden. Andere Dienste stellen sich die Prio beim Start selbst ein - um den dann mit anderer Priorität zu starten müsste man ihn patchen. Das wird hier nicht gemacht (wäre auch nicht legal).
Mein Progrämmchen ist diesbezüglich ein Workaround, d.h. es nimmt sich den laufenden Prozess und stellt dessen Priorität entprechend um - das gilt für jede angegebene .exe, nicht nur für Dienste.
Wenn dies auch einen Windows-Neustart überleben soll musst du aber ein Skript für den Systemstart erstellen - geht mit der mmc.
Gruß
Dogbert
Hab kurz mal Nachgeschaut, im Schnelldurchgang geht's folgendermassen:
Start -> ausführen -> mmc <RETURN>
Im mmc-Fenster: Datei -> Snap-In hinzufügen/entfernen
Gruppenrichtlinienobjekt-Editor auswählen -> Hinzufügen -> Fertigstellen -> Schließen -> OK
Im neuen Objekt -> Computerkonfiguration -> Windows-Einstellungen -> Skripts ... anklicken.
Doppelklick auf start, dann die batchdatei auswählen, die beim systemdstart ausgeführt werden soll.
Bei diesem Vorgang wird die Datei nach
kopiert.
Alle in diesem Ordner befindlichen (ausführbare) Dateien werden dann beim Systemstart ausgeführt.
Im allgemeinen ist's aber immer gut ein wenig an der Oberfläche zu kratzen - evtl. gibts auch hier im Forum irgendwo ein Tutorial.
Gruß & viel Erfolg
Dogbert
Start -> ausführen -> mmc <RETURN>
Im mmc-Fenster: Datei -> Snap-In hinzufügen/entfernen
Gruppenrichtlinienobjekt-Editor auswählen -> Hinzufügen -> Fertigstellen -> Schließen -> OK
Im neuen Objekt -> Computerkonfiguration -> Windows-Einstellungen -> Skripts ... anklicken.
Doppelklick auf start, dann die batchdatei auswählen, die beim systemdstart ausgeführt werden soll.
Bei diesem Vorgang wird die Datei nach
C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Startup
Alle in diesem Ordner befindlichen (ausführbare) Dateien werden dann beim Systemstart ausgeführt.
Im allgemeinen ist's aber immer gut ein wenig an der Oberfläche zu kratzen - evtl. gibts auch hier im Forum irgendwo ein Tutorial.
Gruß & viel Erfolg
Dogbert
Keine Ursache.
Der zweite Teil der Frage ist schon ein wenig kniffliger.
Mit Try & Error kann man in die Batch vorn 'Pause n' einbauen - iss aber nicht schön.
Falls ich am WE Zeit hab, kann ich die Funktion erweitern, damit man noch einen Parameter für Timeout angegeben werden kann.
Heut' bin ich aber schon ein wenig Bettreif und dann bis Samstag Nachmittag unterwegs. Update kommt also hoffentlich so um Sonntag.
Gut's Nächtle
Dogbert
Der zweite Teil der Frage ist schon ein wenig kniffliger.
Mit Try & Error kann man in die Batch vorn 'Pause n' einbauen - iss aber nicht schön.
Falls ich am WE Zeit hab, kann ich die Funktion erweitern, damit man noch einen Parameter für Timeout angegeben werden kann.
Heut' bin ich aber schon ein wenig Bettreif und dann bis Samstag Nachmittag unterwegs. Update kommt also hoffentlich so um Sonntag.
Gut's Nächtle
Dogbert
Hi,
ich habe beim Durchforsten des Netzes ein vbs-Script gefunden was die Priorität auch ändern kann. Habe schon einige Kleinigkeiten geändert, aber auch hier fehlt mir noch was. Hier mal beispielhaft am Prozess notepad.exe.
1. Wenn notepad schon vor dem Prozess läuft, dann wird die Priorität nach dem starten der .vbs datei nicht hochgesetzt. Ich benötige hier zuerst eine Abfrage, ob der Prozess notepad.exe schon läuft oder nicht, und dementsprechend soll entweder wie es das script jetzt schon tut beim start des notepads die priorität ändern, oder dann halt mit der zusatzfunktion bei schon gestartetem notepad die priorität sofort ändern, ohne erst auf das starten von notepad zu warten.
2. Genau so muss das script irgendwie gesagt bekommen, daß es selber schon läuft. Denn wenn man es hintereinander 3x startet (doppelklickt), dann bekommt man auch 3x die meldung dass die priorität hochgestzt wurde!
ich habe beim Durchforsten des Netzes ein vbs-Script gefunden was die Priorität auch ändern kann. Habe schon einige Kleinigkeiten geändert, aber auch hier fehlt mir noch was. Hier mal beispielhaft am Prozess notepad.exe.
1. Wenn notepad schon vor dem Prozess läuft, dann wird die Priorität nach dem starten der .vbs datei nicht hochgesetzt. Ich benötige hier zuerst eine Abfrage, ob der Prozess notepad.exe schon läuft oder nicht, und dementsprechend soll entweder wie es das script jetzt schon tut beim start des notepads die priorität ändern, oder dann halt mit der zusatzfunktion bei schon gestartetem notepad die priorität sofort ändern, ohne erst auf das starten von notepad zu warten.
2. Genau so muss das script irgendwie gesagt bekommen, daß es selber schon läuft. Denn wenn man es hintereinander 3x startet (doppelklickt), dann bekommt man auch 3x die meldung dass die priorität hochgestzt wurde!
' Prio.vbs
Const IDLE = 64, BELOW_NORMAL = 16384, NORMAL = 32
Const ABOVE_NORMAL = 32768, HIGH = 128 ', REALTIME = 256
Const SEC = 1 ' Reaktionszeit in Sekunden nach Erzeugung der Instanz
strX = "notepad.exe"
strCompi = "."
Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strCompi & "\root\cimv2")
wmi.ExecNotificationQueryAsync SINK, _
"SELECT * FROM __InstanceCreationEvent WITHIN " & SEC & _
" WHERE TargetInstance ISA 'Win32_Process'" & _
" AND TargetInstance.Name = '" & strX & "'"
Do
WScript.Sleep 10000
Loop
Sub SINK_OnObjectReady(wmiEvt, wmiAsyCont)
wmiEvt.TargetInstance.SetPriority(HIGH)
WScript.Echo "Priorität von " & wmiEvt.TargetInstance.Name & _
" wurde auf HOCH gesetzt."
End Sub
Servus TimL,
ich weiss jetzt nicht genau was du vorhast, aber das Script hat meiner Meinung nach ein paar Eigenschaften, die am Thema vorbeigehn.
- wie schon erkannt funktioniert es nicht, wenn der Prozess schon läuft - das könnte aber evtl. mit einem Aufruf der SINK-Sub vor der Create-Überwachung behandelt werden.
- Es beendet sich nicht nach getaner Arbeit, was eigentlich bei einem normalen Dienst (der nur einmal gestartet wird) wünschenswert wäre.
Im Scripting hab ich leider nur rudimentäre Kenntnisse, so dass ich auch nicht sagen kann was passiert wenn's ein Systemprozess ist -> die Zugriffsrechteproblematik war auch Teil des ursprünglichen Problems.
Ich werd' auf jeden Fall mal das Progrämmchen ergänzen und heute Abned hochladen. Es bleibt dann dir überlassen was für deinen Fall das bessere ist. Hoffe es ergibt sich dann so oder so eine brauchbare Lösung.
Gruß
Dogbert
ich weiss jetzt nicht genau was du vorhast, aber das Script hat meiner Meinung nach ein paar Eigenschaften, die am Thema vorbeigehn.
- wie schon erkannt funktioniert es nicht, wenn der Prozess schon läuft - das könnte aber evtl. mit einem Aufruf der SINK-Sub vor der Create-Überwachung behandelt werden.
- Es beendet sich nicht nach getaner Arbeit, was eigentlich bei einem normalen Dienst (der nur einmal gestartet wird) wünschenswert wäre.
Im Scripting hab ich leider nur rudimentäre Kenntnisse, so dass ich auch nicht sagen kann was passiert wenn's ein Systemprozess ist -> die Zugriffsrechteproblematik war auch Teil des ursprünglichen Problems.
Ich werd' auf jeden Fall mal das Progrämmchen ergänzen und heute Abned hochladen. Es bleibt dann dir überlassen was für deinen Fall das bessere ist. Hoffe es ergibt sich dann so oder so eine brauchbare Lösung.
Gruß
Dogbert
Hallo Dogbert,
also erst noch einmal vielen Dank daß Du überhaupt Lust hast mir zu helfen. Ich beschreibe mal kurz was ich genau vorhabe. Ich lasse 3 exe-Dateien unter Windows als Dienst laufen(keine Systemprozesse). Und die sollen halt immer mit der Priorität "high" laufen. Der Rechner ist ein Server und bootet automatisch jede Woche einmal neu. Nach dem Neustart möchte ich halt, daß die drei Prozesse sobald sie gestartet werden wieder sofort auf "high" gesetzt werden. Am besten halt mit einer Überprüfung ob die Prozesse schon laufen oder nicht.
Es kommt öfter vor, daß ich zwischendurch die drei Prozesse mal stoppen muss, deshalb wäre es natürlich "einfacher", wenn das Programm einen Restart der Prozesse selbst erkennen würde und die Priorität dann wieder verändert.
Grüße,
Tim
also erst noch einmal vielen Dank daß Du überhaupt Lust hast mir zu helfen. Ich beschreibe mal kurz was ich genau vorhabe. Ich lasse 3 exe-Dateien unter Windows als Dienst laufen(keine Systemprozesse). Und die sollen halt immer mit der Priorität "high" laufen. Der Rechner ist ein Server und bootet automatisch jede Woche einmal neu. Nach dem Neustart möchte ich halt, daß die drei Prozesse sobald sie gestartet werden wieder sofort auf "high" gesetzt werden. Am besten halt mit einer Überprüfung ob die Prozesse schon laufen oder nicht.
Es kommt öfter vor, daß ich zwischendurch die drei Prozesse mal stoppen muss, deshalb wäre es natürlich "einfacher", wenn das Programm einen Restart der Prozesse selbst erkennen würde und die Priorität dann wieder verändert.
Grüße,
Tim
Hi,
ich habe mal das Internet durchforstet und trotz null Programmierkenntnissen das Script soweit geändert, daß es am Anfang schon die Priorität auf hoch setzt wenn der Prozess schon läuft. Ich weiß zwar nicht ob das Script 100%ig richtig ist, aber es funktioniert erstmal soweit.
Wofür ist eigentlich das
WScript.Sleep 10000
nötig?
Wenn meine 3 Prozesse notepad1.exe, notepad2.exe und notepad3. exe heißen würden, kann man das nicht irgendwie mit einer Wildcard bei strX = "notepad.exe" lösen, sodaß alle 3 Prozesse vom Script behandelt werden?
ich habe mal das Internet durchforstet und trotz null Programmierkenntnissen das Script soweit geändert, daß es am Anfang schon die Priorität auf hoch setzt wenn der Prozess schon läuft. Ich weiß zwar nicht ob das Script 100%ig richtig ist, aber es funktioniert erstmal soweit.
Wofür ist eigentlich das
WScript.Sleep 10000
nötig?
Wenn meine 3 Prozesse notepad1.exe, notepad2.exe und notepad3. exe heißen würden, kann man das nicht irgendwie mit einer Wildcard bei strX = "notepad.exe" lösen, sodaß alle 3 Prozesse vom Script behandelt werden?
' Priority.vbs
Const IDLE = 64, BELOW_NORMAL = 16384, NORMAL = 32
Const ABOVE_NORMAL = 32768, HIGH = 128 ', REALTIME = 256
Const SEC = 1 ' Reaktionszeit in Sekunden nach Erzeugung der Instanz
strX = "notepad.exe"
strComputer = "."
Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set colProcesses = wmi.ExecQuery _
("Select * from Win32_Process Where Name = '" & strX & "'")
For Each objProcess in colProcesses
objProcess.SetPriority(HIGH)
Next
wmi.ExecNotificationQueryAsync SINK, _
"SELECT * FROM __InstanceCreationEvent WITHIN " & SEC & _
" WHERE TargetInstance ISA 'Win32_Process'" & _
" AND TargetInstance.Name = '" & strX & "'"
Do
WScript.Sleep 10000
Loop
Sub SINK_OnObjectReady(wmiEvt, wmiAsyCont)
wmiEvt.TargetInstance.SetPriority(HIGH)
End Sub
Servus Tim,
meine scriptingkenntnisse sind auch nur rudimentär - intuitiv würde ich sagen da wird 10000ms gewartet - aber auf was? Da iss ja sonst nix drinn.
Bin jetzt mal vorläufig fertig mit meinem Projekt. Hab da mal alles einfliessen lassen was du mir als Input gegeben hast (mehrere Prozesse zu überwachen; kein doppelter Aufruf ohne mosern möglich; Überwachungszeit von 1s bis unendlich; optionale Logausgabe für Fehler und aktivität). Leider ließ sich das Ganze nicht mehr als reine Konsolenanwendung implementieren, da ich keinen Weg gefunden hab, aus dem Aufruf rauszupringen nachdem der eigentliche Überwachungprozess gestartet wurde - ist inner batch nicht wirklich von Vorteil. Der Aufruf erfolgt aber nach wie vor über Kommandozeile, nur im Fehlerfall poppt halt eine Messagebox auf, weil ja der Bezug zur Konsole verlorengeht.
Heraus kam dann das:
War mal wieder erfrischend eine kleine und überschaubare Applikation zu schreiben. Es ist aber auch ein wenig enttäuschend wie verschwenderisch die .net Umgebung mit Arbeitsspeicher umgeht.
Wenn meine großen Apps mal so um die 100MB brauchen versteh' ich das ja noch aber so ein kleines Ding mit nicht mal 200 Zeilen will knapp 20MB Arbeitsspeicher? Hätte vielleicht doch bei ANSI C bleiben sollen
Gruß
Dogbert
meine scriptingkenntnisse sind auch nur rudimentär - intuitiv würde ich sagen da wird 10000ms gewartet - aber auf was? Da iss ja sonst nix drinn.
Bin jetzt mal vorläufig fertig mit meinem Projekt. Hab da mal alles einfliessen lassen was du mir als Input gegeben hast (mehrere Prozesse zu überwachen; kein doppelter Aufruf ohne mosern möglich; Überwachungszeit von 1s bis unendlich; optionale Logausgabe für Fehler und aktivität). Leider ließ sich das Ganze nicht mehr als reine Konsolenanwendung implementieren, da ich keinen Weg gefunden hab, aus dem Aufruf rauszupringen nachdem der eigentliche Überwachungprozess gestartet wurde - ist inner batch nicht wirklich von Vorteil. Der Aufruf erfolgt aber nach wie vor über Kommandozeile, nur im Fehlerfall poppt halt eine Messagebox auf, weil ja der Bezug zur Konsole verlorengeht.
Heraus kam dann das:
Usage: Setpriority [[p=<process>] ... ] q=<Priority> [t=<timeout>] [f:<filename>]
<Priority>: r=realtime, h=high, a=above normal, n=Normal, b=below normal, i=idle
<timeout>: number of seconds for serching the processes (<0: infinite)
<process>: name of the process (with or without extension)
Example: Setpriority.exe q=process1 q=process2.exe q=i t=0 f=c:\errors.log
War mal wieder erfrischend eine kleine und überschaubare Applikation zu schreiben. Es ist aber auch ein wenig enttäuschend wie verschwenderisch die .net Umgebung mit Arbeitsspeicher umgeht.
Wenn meine großen Apps mal so um die 100MB brauchen versteh' ich das ja noch aber so ein kleines Ding mit nicht mal 200 Zeilen will knapp 20MB Arbeitsspeicher? Hätte vielleicht doch bei ANSI C bleiben sollen
Gruß
Dogbert
Hallo Dogbert,
toll das Du das Programmieren so erfrischend findest! Für mich sind das Böhmische Dörfer... Auf jeden Fall kann Dein Programm jedenfalls jetzt genau das was ich brauche!
Ab und zu kommt es vor, daß die folgende Fehlermeldung nach dem restart des überwachten Prozesses kommt und Setpriority wird beendet:
Das ist bei manchen Prozessen bei jedem restart der Fall, bei notepad recht selten. Woran kann das liegen? Vielleicht muss man nach dem Start des Prozesses noch ne Sekunde warten bevor dein Programm die Priorität verändert? Ist nur eine Vermutung, da man diese Zeit in dem Script einstellen konnte.
toll das Du das Programmieren so erfrischend findest! Für mich sind das Böhmische Dörfer... Auf jeden Fall kann Dein Programm jedenfalls jetzt genau das was ich brauche!
Ab und zu kommt es vor, daß die folgende Fehlermeldung nach dem restart des überwachten Prozesses kommt und Setpriority wird beendet:
08.11.2006 11:33:53 notepad was set to High
08.11.2006 11:33:56 notepad was set to High
08.11.2006 11:34:03 notepad was set to High
08.11.2006 11:34:13 notepad was set to High
08.11.2006 11:34:36 notepad was set to High
08.11.2006 11:34:38 Cannot process request because the process (264) has exited. ( Dogbert.Setpriority.SetPriority in SetPriority.dll)
Das ist bei manchen Prozessen bei jedem restart der Fall, bei notepad recht selten. Woran kann das liegen? Vielleicht muss man nach dem Start des Prozesses noch ne Sekunde warten bevor dein Programm die Priorität verändert? Ist nur eine Vermutung, da man diese Zeit in dem Script einstellen konnte.
Servus Tim,
hab's gefunden. Der Fehler ergab sich aus dem Ablauf: Ich hole mir die aktuelle Liste aller laufenden Prozesse und vergleiche sie dann mit allen angegebenen. Um den Prozessor nicht zu belasten ist ein kleiner Timeout drin. Wird während dieser Prozedur eine der zu überwachenden Anwendungen beendet kommt die Exception bei Zugriff auf den Prozess in diesem Punkt nicht mehr aktuellen Liste.
Fehler wird jetzt behandelt (also ignoriert).
Hoffe du nimmst es mir nicht krumm, dass ich nicht alle Sonderfälle durchexerziert habe und du sozusagen am Debugprozess teilnehmen darfst - Ist aber meiner Meinung nach bei Freeware nicht unfair. In diesem Fall ist ein Logfile halt Gold wert
Falls nochmal was ist, meld' dich einfach.
Gruß
Dogbert
hab's gefunden. Der Fehler ergab sich aus dem Ablauf: Ich hole mir die aktuelle Liste aller laufenden Prozesse und vergleiche sie dann mit allen angegebenen. Um den Prozessor nicht zu belasten ist ein kleiner Timeout drin. Wird während dieser Prozedur eine der zu überwachenden Anwendungen beendet kommt die Exception bei Zugriff auf den Prozess in diesem Punkt nicht mehr aktuellen Liste.
Fehler wird jetzt behandelt (also ignoriert).
Hoffe du nimmst es mir nicht krumm, dass ich nicht alle Sonderfälle durchexerziert habe und du sozusagen am Debugprozess teilnehmen darfst - Ist aber meiner Meinung nach bei Freeware nicht unfair. In diesem Fall ist ein Logfile halt Gold wert
Falls nochmal was ist, meld' dich einfach.
Gruß
Dogbert
Hi Dogbert,
das Programm funktioniert jetzt einwandfrei! Vielen Dank!!!
Wieso sollte ich Dir das krumm nehmen? Ich wollte ja was und Du hast Dich erbarmt das zu proggen, also bin ich froh dass Du meine Hartnäckigkeit ertragen hast!
Ein klitzekleiner Schönheitsfehler ist mir noch aufgefallen:
Deine Erklärung
Example:
muss heißen
Example:
Da hast Du zweimal das p mit dem q verwechselt, sowohl im Programm (zu sehen beim Ausführen ohne Parameter) als auch in deinem obigen Posting!
Also vielen Dank nochmal! Hast mir sehr geholfen!
Tim
das Programm funktioniert jetzt einwandfrei! Vielen Dank!!!
Wieso sollte ich Dir das krumm nehmen? Ich wollte ja was und Du hast Dich erbarmt das zu proggen, also bin ich froh dass Du meine Hartnäckigkeit ertragen hast!
Ein klitzekleiner Schönheitsfehler ist mir noch aufgefallen:
Deine Erklärung
Example:
Setpriority.exe q=process1 q=process2.exe q=i t=0 f=c:\errors.log
muss heißen
Example:
Setpriority.exe p=process1 p=process2.exe q=i t=0 f=c:\errors.log
Da hast Du zweimal das p mit dem q verwechselt, sowohl im Programm (zu sehen beim Ausführen ohne Parameter) als auch in deinem obigen Posting!
Also vielen Dank nochmal! Hast mir sehr geholfen!
Tim
So Hallo!
Nachdem ich jetzt zum wiederholten male festgestellt habe wie Toll diese Seite ist ;) habe ich mich endlich angemeldet.
Ich sitze leider hier in der FH und ich glaube hier ist kein .net-gedöns installiert. Die letzte SetPriority.exe bringt bei mir die Fehlermeldung "Die Anwendung konnte nicht initialisiert werden"
Die Datei hieß nach dem Download Setpriority.227 ich hab sie dann in SetPriority.227.exe umbenannt ist das richtig? wo kommt die 227 her?
Grüße
Sorry für die blöden Fragen - aber Dank für die Hilfe, im Vorraus
Sebastian Braun
Nachdem ich jetzt zum wiederholten male festgestellt habe wie Toll diese Seite ist ;) habe ich mich endlich angemeldet.
Ich sitze leider hier in der FH und ich glaube hier ist kein .net-gedöns installiert. Die letzte SetPriority.exe bringt bei mir die Fehlermeldung "Die Anwendung konnte nicht initialisiert werden"
Die Datei hieß nach dem Download Setpriority.227 ich hab sie dann in SetPriority.227.exe umbenannt ist das richtig? wo kommt die 227 her?
Grüße
Sorry für die blöden Fragen - aber Dank für die Hilfe, im Vorraus
Sebastian Braun
Servus Semabra,
hm, weiss auch nicht warum die Endung verändert wird, liegt anscheinend an diesem Webspace-Provider. Hab grad mal testweise runtergeladen (bei mir war's dann .196) und in .exe umgetauft, konnte aber ohne weiteres starten.
Ich bin mir nicht mehr ganz sicher ob ich eine Namensprüfung mache. Schmeiss mal die .227 aus dem Dateinamen raus und probiers nochmal. Wenn's dann nicht geht, liegt's wirklich am .net.
Ob's installiert ist kann man unter Start->Einstellungen->Systemsteuerung->Software nachschaun.
Gruß
Dogbert
hm, weiss auch nicht warum die Endung verändert wird, liegt anscheinend an diesem Webspace-Provider. Hab grad mal testweise runtergeladen (bei mir war's dann .196) und in .exe umgetauft, konnte aber ohne weiteres starten.
Ich bin mir nicht mehr ganz sicher ob ich eine Namensprüfung mache. Schmeiss mal die .227 aus dem Dateinamen raus und probiers nochmal. Wenn's dann nicht geht, liegt's wirklich am .net.
Ob's installiert ist kann man unter Start->Einstellungen->Systemsteuerung->Software nachschaun.
Gruß
Dogbert
Auf dem FH-PC find ich sowas schonmal nicht...
Ich habs aber noch mit mein vServer probiert, der will aber auch nicht .. aber der will auch grad das Framework updaten und schlägt auch immer fehl .. als der hat mit dem .net-gedöns wohl generell n Problem z.Zt. Hab ja noch 6 ander Windows-Systeme ;)
Ich werd morgen+ daran noch versuchen rumzubasteln, vielen Dank erstmal.
Ich habs aber noch mit mein vServer probiert, der will aber auch nicht .. aber der will auch grad das Framework updaten und schlägt auch immer fehl .. als der hat mit dem .net-gedöns wohl generell n Problem z.Zt. Hab ja noch 6 ander Windows-Systeme ;)
Ich werd morgen+ daran noch versuchen rumzubasteln, vielen Dank erstmal.
Zitat von @Dogbert:
Servus Tim,
hab's gefunden. Der Fehler ergab sich aus dem Ablauf: Ich hole mir die aktuelle Liste aller laufenden Prozesse und vergleiche sie
dann mit allen angegebenen. Um den Prozessor nicht zu belasten ist ein kleiner Timeout drin. Wird während dieser Prozedur
eine der zu überwachenden Anwendungen beendet kommt die Exception bei Zugriff auf den Prozess in diesem Punkt nicht mehr
aktuellen Liste.
Fehler wird jetzt behandelt (also ignoriert).
Hoffe du nimmst es mir nicht krumm, dass ich nicht alle Sonderfälle durchexerziert habe und du sozusagen am Debugprozess
teilnehmen darfst - Ist aber meiner Meinung nach bei Freeware nicht unfair. In diesem Fall ist ein Logfile halt Gold wert
Falls nochmal was ist, meld' dich einfach.
Gruß
Dogbert
Servus Tim,
hab's gefunden. Der Fehler ergab sich aus dem Ablauf: Ich hole mir die aktuelle Liste aller laufenden Prozesse und vergleiche sie
dann mit allen angegebenen. Um den Prozessor nicht zu belasten ist ein kleiner Timeout drin. Wird während dieser Prozedur
eine der zu überwachenden Anwendungen beendet kommt die Exception bei Zugriff auf den Prozess in diesem Punkt nicht mehr
aktuellen Liste.
Fehler wird jetzt behandelt (also ignoriert).
Hoffe du nimmst es mir nicht krumm, dass ich nicht alle Sonderfälle durchexerziert habe und du sozusagen am Debugprozess
teilnehmen darfst - Ist aber meiner Meinung nach bei Freeware nicht unfair. In diesem Fall ist ein Logfile halt Gold wert
Falls nochmal was ist, meld' dich einfach.
Gruß
Dogbert
hi
kannst du das programm nochmal wo raufladen? habe auch probleme mit win7 und den prioritäten die automatisch vergeben werden
danke
gruss