[VBS] Programm mit niedriger priorität starten

White

Well-known member
ID: 123940
L
20 April 2006
910
42
Ja ich möchte ein programm mithilfe vom Windows scripting host starten (das kann ich). Allerdings hat das Programm die dumme angewohnheit das es seine Priorität immer wieder auf normal stellt. Ich brauche also eine möglichkeit das alle paar Sekunden gescheckt wird ob das Programm mti niedriger Priorität läuft wenn ja dann es runter setzen.

Leider habe ich von vbs nicht so sehr viel anhung.

Soweit bin ich
Code:
Set ws = CreateObject("WScript.Shell")
ws.Run """hallo.txt""", 4, FALSE

und was ich von ner seite kopiert habe ist das hier
Code:
set wmi = GetObject("winmgmts:") 
set system = wmi.instancesOf("win32_process") 
for each process in system 
  if lcase(process.name)="wscript.exe" then 
    process.Terminate (0) 
  end if 
next
das killt den prozzess wscript.exe.
daraus müsste man ja was entwickeln können. nur irgendwie bin ich zu doof um Doku für vbs zu finden:).
 
sicher, dass windows es erlaubt mit programmen die prozesspriorität zu ändern?
weil man müsste ja nur mal nen rechenintensiven prozess auf echtzeit schalten und du kannst den rechner net mehr nutzen.
 
sicher, dass windows es erlaubt mit programmen die prozesspriorität zu ändern?
weil man müsste ja nur mal nen rechenintensiven prozess auf echtzeit schalten und du kannst den rechner net mehr nutzen.


ne das geht ja wie tyrell auch gesagt hat. mann kan ja alternative proccessexplorer nehmen und mit denen ebenfalls die priorität einstellen.

Allerdings brauch ichs halt automatiesiert in vbs.
edit: die rechte habe ich ja (ich starte ja auch das programm)
 
neija ich dachte mir das Betriebssystemschicht von Windows solche Sachen unterbindet. Aber ich nehme alles zurück, zu weit gedacht.
Ne, das lässt sich auch von Programmen aus steuern. Der Taskmanager ist ja auch nur ein Programm ;)

Es kommt darauf an, mit welchen Rechten man ein Programm ausführt.
Wenn ich ein normaler User bin, kann ich nur meine eigenen Prozesse ändern (wenn ich dazu das Recht habe - lässt sich natürlich auch noch weiter einschränken).
Wenn ich Admin bin, kann ich alle Prozesse ändern (bis auf Systemprozesse). Wenn ich System bin, kann ich auch Systemprozesse ändern.
 
ice-breaker schrieb:
neija ich dachte mir das Betriebssystemschicht von Windows solche Sachen unterbindet.

du denkst in sachen windows an sicherheit?
*kicher*

sorry 4 off topic aber das musste einfach raus :p

BTT: eventuell mit dem "pseudo" DOS befehl "start"?

start /HIGH <name des programms>

bsp: start /HIGH calc.exe
Startet den Windows Taschenrechner in hoher Prio

bzw. start /LOW calc.exe
Startet den Windows Taschenrechner in niedriger Prio

nur so ein gedanke.
 
Zuletzt bearbeitet:
du denkst in sachen windows an sicherheit?
*kicher*

sorry 4 off topic aber das musste einfach raus :p

BTT: eventuell mit dem "pseudo" DOS befehl "start"?

start /HIGH <name des programms>

bsp: start /HIGH calc.exe
Startet den Windows Taschenrechner in hoher Prio

bzw. start /LOW calc.exe
Startet den Windows Taschenrechner in niedriger Prio

nur so ein gedanke.

das nützt mir leider nichts weil das programm sich teilweise selbst auf normale priorität zurückstuft.
 
das nützt mir leider nichts weil das programm sich teilweise selbst auf normale priorität zurückstuft.

devil-smiley-058.gif
hmm, ist mir noch nicht aufgefallen... werd das mal beobachten... danke für den hinweis. dachte immer das wenigstens das fehlerfrei läuft.

btw. @ice-breaker genau das meinte ich ja... ändern von prioritätsklassen bis windows sich selbst nicht mehr ausführen kann, schreiben in geschützte systemspeicherbereiche ... und sone scherze... und für alles keine fehlerbehandlung... aber anders kennt mans ja nicht von windoof.

@white sorry ... der name bleibt einfach besser im gedächtnis hängen
devil-smiley-076.gif
... irgendwie voll verpeilt, hatte es aber bereits geändert
devil-smiley-066.gif
 
btw. @ice-breaker genau das meinte ich ja... ändern von prioritätsklassen bis windows sich selbst nicht mehr ausführen kann, schreiben in geschützte systemspeicherbereiche ... und sone scherze... und für alles keine fehlerbehandlung... aber anders kennt mans ja nicht von windoof.

ändern von Prioritätsklassen bis nichts mehr geht ist nach prioritätsgesteuertem Round-Robin Algorithmus erlaubt :!:
Geschützte Systembereiche sollten nicht beschreibbar sein (Ram, denn Festplatte ist das ja egal)
 
Huhu,

du bist mit WMI schon auf dem richtigen Weg =). Wenn du den Prozess gefunden hast ist der Rest ganz einfach. Mit folgendem Beispiel müsstest du die Prozesspriorität hochsetzen können:

PHP:
Const IDLE = 64
Const BELOW_NORMAL = 16384
Const NORMAL = 32
Const ABOVE_NORMAL = 32768
Const HIGH = 128
Const REALTIME = 256
Const SEC = 1  

process.SetPriority ABOVE_NORMAL

Ansonsten ist bei sowas die MSDN ganz hilfreich =). Kann ich dir nur empfehlen, wenn du öfter was mit Scripting Sprachen etc. zu tun hast.
https://msdn.microsoft.com/library/..._method_in_class_win32_process.asp?frame=true

Ciao,

Karsten
 
devil-smiley-058.gif
hmm, ist mir noch nicht aufgefallen... werd das mal beobachten... danke für den hinweis. dachte immer das wenigstens das fehlerfrei läuft.
naja da ja jedes programm die prioritäten verändern kann kann es sich nunmal auch selbst hochschrauben.

Huhu,

du bist mit WMI schon auf dem richtigen Weg =). Wenn du den Prozess gefunden hast ist der Rest ganz einfach. Mit folgendem Beispiel müsstest du die Prozesspriorität hochsetzen können:

PHP:
Const IDLE = 64
Const BELOW_NORMAL = 16384
Const NORMAL = 32
Const ABOVE_NORMAL = 32768
Const HIGH = 128
Const REALTIME = 256
Const SEC = 1  

process.SetPriority ABOVE_NORMAL

Ansonsten ist bei sowas die MSDN ganz hilfreich =). Kann ich dir nur empfehlen, wenn du öfter was mit Scripting Sprachen etc. zu tun hast.
https://msdn.microsoft.com/library/..._method_in_class_win32_process.asp?frame=true

Ciao,

Karsten
danke cryptkeeper :) habs mir jetzt so zusammengeschrieben
Code:
Set ws = Wscript.CreateObject("Wscript.Shell") 
Const IDLE = 64
Const BELOW_NORMAL = 16384
Const NORMAL = 32
Const ABOVE_NORMAL = 32768
Const HIGH = 128
Const REALTIME = 256
Const SEC = 1  
strComputer = "."
x=0
do while x < 500
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'vmware-vmx.exe'")
For Each objProcess in colProcesses
    objProcess.SetPriority(BELOW_NORMAL) 
Next
wscript.sleep 10000
loop
 
Na gerne doch =).
Hättest du den Prozess selbst gestartet hätte ich dir empfohlen über die ProcessID zu gehen. Aber ich seh schon, dass es um nen fremden Prozess geht.

Für diejenigen, die es brauche können (habs gerad ma runtergetippt - ist also ungetestet :eek:D).
PHP:
Option Explicit
Dim WshShell
Dim oExec
Dim processID
Dim wmi
Dim system
Dim query
Dim procs
Dim proc

Const IDLE = 64 
Const BELOW_NORMAL = 16384 
Const NORMAL = 32 
Const ABOVE_NORMAL = 32768 
Const HIGH = 128 
Const REALTIME = 256 
Const SEC = 1   

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("calc")
processID = oExec.ProcessID
query = "SELECT * FROM win32_process WHERE processID=" & processID

Do While oExec.Status = 0
     set wmi = GetObject("winmgmts:")
     set procs = wmi.ExecQuery(query)
     for each proc in procs
          if not proc is nothing then
               if proc.Priority <> BELOW_NORMAL then
                    proc.SetPriority BELOW_NORMAL
               end if
          end if
     next
     WScript.Sleep 100
Loop
 
@cryptkeeper ich habe davor auch noch die zeilen die die vmware starten. nur ich wage zu bezweifeln das deine lösung bei vmware klappt. da das mehrere prozzesse startet.
 

Ist ja nicht so, als hätte ich den Link zu den entscheidenden Informationen nicht schon ganz am Anfang gepostet ;)