Forums Neueste Beiträge
 

Fremdprogramm automatisch beenden

17/12/2008 - 11:01 von WalDo | Report spam
Hallo,

wir benutzen eine Software mit sehr langen Laufzeiten. Lizenzgebühren fallen
zeitabhàngig an, solange die Software gestartet ist, egal, ob damit
interaktiv gearbeitet, im Hintergrund gerechnet wird oder die Software nichts
zu tun hat. Um den Tagesbetrieb nicht zu sehr zu stören, wird diese Software
gerne abends oder zum WE für Berechnungen gestartet.
Ich suche nun eine Lösung, das Programm "geordnet" zu beenden, da es leider
auch das Berechnungsergebnis "vergisst", wenn man das Programm einfach
"abschießt".
Ein Lösungsansatz könnte heißen, die CPU-Zeit oder den RAM-Bedarf zu
beobachten ob sich diese(r) über einen Zeitraum nicht mehr àndert. Dann
könnte über das Senden von Tastaturcodes das Programm aktiviert, das Ergebnis
gespeichert und das Programm heruntergefahren werden.

Nur weiß ich leider nicht, wie das alles geht...

Herzliche Grüße, Walter
 

Lesen sie die antworten

#1 Matthias V.
17/12/2008 - 12:19 | Warnen spam
Hallo Walter!

Ein Lösungsansatz könnte heißen, die CPU-Zeit oder den RAM-Bedarf zu
beobachten ob sich diese(r) über einen Zeitraum nicht mehr àndert. Dann
könnte über das Senden von Tastaturcodes das Programm aktiviert, das
Ergebnis
gespeichert und das Programm heruntergefahren werden.



Grundsàtzlich geht das schon, auch wenn ich es noch nie so gemacht habe.
Vielleicht so in etwa (quick & dirty) als vbs (cscript).

'ANFANG
Prozess = "calc.exe"
PruefSekunden = 6
TerminiereNach = 10



Set objWMIService = GetObject("winmgmts:\\.oot\CIMV2")

Gleichheit=0
KMZ=0
UMZ=0
VS=0
SO=0

Do
WScript.sleep PruefSekunden * 1000

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE
Caption = '" & Prozess & "'",,48)
activ=false
For Each objItem in colItems
activ=true
Wscript.Echo "KernelMode Zeit : " & objItem.KernelModeTime
Wscript.Echo "UserMode Zeit : " & objItem.UserModeTime
Wscript.Echo "Virtuelle Groesse : " & objItem.VirtualSize
Wscript.Echo "Schreiboperationen: " & objItem.WriteOperationCount

If (objItem.KernelModeTime=KMZ) and (objItem.UserModeTime=UMZ) and
(objItem.VirtualSize=VS) and (objItem.WriteOperationCount=SO) then
Gleichheit=Gleichheit + 1
Wscript.echo "Keine Änderung, Anzahl=" & Gleichheit
else
KMZ=objItem.KernelModeTime
UMZ=objItem.UserModeTime
VS=objItem.VirtualSize
SO=objItem.WriteOperationCount
Gleichheit=0
end if

If Gleichheit=TerminiereNach then objItem.terminate() : wscript.echo
"Prozess terminiert!"

Next
if activ=false then wscript.echo "Prozess nicht gefunden!"
wscript.echo ""

Loop
'ENDE

Gruß
Matthias

Ähnliche fragen