Application Watchdog selbst gemacht mit WSH
sProcessName = "meineapplikation.exe"
' Hier die Ausführbare Datei der zu überwachenden Applikation angeben
sComputer = "."
Set oWmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
Set oShell = CreateObject("WScript.Shell")
Do
Set colProcessList = oWmi.ExecQuery("Select * from Win32_Process Where Name = '" & sProcessName & "'")
If colProcessList.Count = 0 Then
oShell.Run """C:\pfad\meineapplikation.exe""", 1, False
' Hier den Pfad zur überwachenden Applikation angeben.
' Um die Applikation minimiert zu starten:
' oShell.Run """C:\pfad\meineapplikation.exe""", 7, False
WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("fail.log", 8, true).WriteLine (Date() & " " & Time() & " Task neugestartet")
' Schreibt einen LogFileeintrag wenn der Task neu gestartet wird. (Thx an MISTAX)
End If
WScript.Sleep 5 * 60 * 1000
' Hier kann die Wartezeit bis zur nächsten Prüfung eingestellt werden. Standard: 5 min
Loop
Q: Was macht das Teil?
A: Dieses Script überwacht (wenn gestartet) einen definierten Prozess ob dieser läuft oder nicht.
Wenn der Prozess läuft, geht das Script, oder besser gesagt der Thread, für 5 Minuten (kann unter WScript.Sleep x * 60 * 1000 eingestellt werden. x = Minuten) in den Sleep-Mode.
Wenn nicht, wird der definierte Prozess gestartet, und danach geht der Thread schlafen.
Q: Muss ich hier mit dem Taskplaner etwas einplanen?
A: Nein. Das Script einfach starten (Autostart, Gruppenrichtlinie,... ) und das wars. Es läuft dann ständig im Hintergrund (standardmässig unter WScript.exe) und benötigt daher ständig ca. 1-2 MB Speicher.
Da der Thread jedoch die meiste Zeit im Sleep-Mode verbringt, wird keine wertvolle Prozessorzeit verbraten.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 66044
Url: https://administrator.de/tutorial/application-watchdog-selbst-gemacht-mit-wsh-66044.html
Ausgedruckt am: 22.12.2024 um 18:12 Uhr
17 Kommentare
Neuester Kommentar
Grundsätzlich funktioniert es. Aber:
Wenn ich das Script im Logonscript aufrufe ergeben sich erwartungsgemäß zwei Probleme. Binde ich das Script einfach mit cscript <pfadzumscript> ein geht es danach nicht weiter, da das Logonscript auf das Ende des Processes wartet. Versuche ich es mit start cscript <pfadzumscript> geht's zwar weiter aber es bleibt ein unschönes CMD-Fenster stehen.
Was tun?
Manuel
Wenn ich das Script im Logonscript aufrufe ergeben sich erwartungsgemäß zwei Probleme. Binde ich das Script einfach mit cscript <pfadzumscript> ein geht es danach nicht weiter, da das Logonscript auf das Ende des Processes wartet. Versuche ich es mit start cscript <pfadzumscript> geht's zwar weiter aber es bleibt ein unschönes CMD-Fenster stehen.
Was tun?
Manuel
Das finde ich jetzt aber merkwürdig. Wenn ich beim Aufruf mit start den Interpreter cscript mit angebe, dann bleibt die Box stehen. Lasse ich ihn weg geht's. War nur etwas doof an meinem Rechner, weil ich hier VBS-Dateien standardmäßig mit meinem Editor verknüpft habe also musste ich zum Testen den Interpreter mit angeben. Nachdem ich auf starten mit WSH umgestellt habe funktioniert's. Dann schalte ich das mal scharf in der Domäne
oShell.Run "C:\pfad\meineapplikation.exe", 1, False
Wenn hier steht "C:\Programme\Audacity\audacity.exe" ist es kein Problem;
wenn hier aber steht: "C:\Programme\Internet Explorer\iexplore.exe"
findet er den Pfad nicht. Als absoluter VBS-Laie tippe ich auf das Leerzeichen; hat jmd. einen Tip, wie es trotzdem funktioniert?
Danke!
Danke vielmals, es klappt. Ich habe noch eine Zeile in den watchdog eingefügt, damit er mir eine Log schreibt, wenn er das Programm neustarten muss; vermutlich für euch überhaupt kein Problem, aber vielleicht schaun hier ja noch mehr so Laien vorbei, wie ich.
Einzufügen nach Zeile 14.
WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("fail.log", 8, true).WriteLine (Date() & " " & Time() & " Task neugestartet")
Einzufügen nach Zeile 14.
Hallo Kosh,
super Anleitung, genau was ich gesucht habe! (habe auch das Problem mit dem dauernd ausversehen beendeten Outlook)
Jedoch bekomme ich bei der Ausführung des Scripts eine Fehlermeldung das die Anwendung nicht gefunden werden konnte. (Zele 13 Zeichen 6) Ich bin mir jedoch sicher, das der Pfad zur Outlook exe richtig angegeben ist.
Hier der entsprechende Code-Abschnitt:
Weiß jemand rat?
Gruß Nicolas
super Anleitung, genau was ich gesucht habe! (habe auch das Problem mit dem dauernd ausversehen beendeten Outlook)
Jedoch bekomme ich bei der Ausführung des Scripts eine Fehlermeldung das die Anwendung nicht gefunden werden konnte. (Zele 13 Zeichen 6) Ich bin mir jedoch sicher, das der Pfad zur Outlook exe richtig angegeben ist.
Hier der entsprechende Code-Abschnitt:
If colProcessList.Count = 0 Then
oShell.Run "C:\Programme\Microsoft Office\OFFICE11\OUTLOOK.exe", 1, False
' Hier den Pfad zur überwachenden Applikation angeben
Weiß jemand rat?
Gruß Nicolas
Danke, wer lesen kann ist halt doch klar im Vorteil!
Eine Frage habe ich aber noch, ist es möglich die Anwendungen über das Script mit Parametern wie z.B. "minimiert" zu starten?
Habe nämlich das dumpfe Gefühl das wir wieder so Helden dabei haben, die das aufpoppende Outlook mit dem Kreuz beenden, anstatt es ins Tray zu minimieren.
Gruß Nic
Eine Frage habe ich aber noch, ist es möglich die Anwendungen über das Script mit Parametern wie z.B. "minimiert" zu starten?
Habe nämlich das dumpfe Gefühl das wir wieder so Helden dabei haben, die das aufpoppende Outlook mit dem Kreuz beenden, anstatt es ins Tray zu minimieren.
Gruß Nic