kosh
Goto Top

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.

Content-ID: 66044

Url: https://administrator.de/contentid/66044

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

Iwan
Iwan 13.08.2007 um 12:52:51 Uhr
Goto Top
schöne Sache... das Script hätte ich vor gut 3 Monaten gebraucht face-smile
manuel-r
manuel-r 13.08.2007 um 14:24:24 Uhr
Goto Top
Blöde Frage: Läuft das Script auch mit Benutzerrechten? Ich würde damit nämlich dann gerne Outlook offen halten. Wir haben ein paar Spezialisten, die Outlook immer wieder schließen und sich dann wundern, dass sie keine Mails bekommen face-wink

Manuel
Kosh
Kosh 13.08.2007 um 14:26:02 Uhr
Goto Top
wenn es im autostart oder im logon script gestartet wird, dann läuft es unter dem angemeldeten benutzer.
manuel-r
manuel-r 13.08.2007 um 14:56:03 Uhr
Goto Top
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. face-sad
Was tun?

Manuel
Kosh
Kosh 13.08.2007 um 15:05:08 Uhr
Goto Top
wenn dus übers logonscript startest, nutze:

start cscript meinscript.vbs

das cmd fenster das ansonsten stehen bleibt ist eigentlich das anmelde-batch das auf das ende vom script wartet.
manuel-r
manuel-r 13.08.2007 um 15:12:12 Uhr
Goto Top
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 face-wink
Kosh
Kosh 13.08.2007 um 15:14:15 Uhr
Goto Top
mein fehler.

meinte auch call und nicht start. is ja auch schon heimgehzeit face-smile
Oli82
Oli82 20.09.2007 um 19:04:13 Uhr
Goto Top
Hab ein Problem mit dem Script.
Das Script versucht alle 5 Minuten die zu überwachende .exe zu starten, obwohl sie schon läuft.

Kann ich das irgendwie abstellen?
Kosh
Kosh 01.10.2007 um 07:37:43 Uhr
Goto Top
moin.

hast du in der ersten zeile auch den richtigen prozessnamen angegeben?

sProcessName = "meineapplikation.exe"    
MISTAX
MISTAX 25.11.2008 um 13:19:49 Uhr
Goto Top
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!
Kosh
Kosh 25.11.2008 um 13:30:22 Uhr
Goto Top
oShell.Run """C:\pfad mit leerzeichen\meineapplikation.exe""", 1, False  

sollte gehen.
MISTAX
MISTAX 25.11.2008 um 13:40:51 Uhr
Goto Top
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.

WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("fail.log", 8, true).WriteLine (Date() & " " & Time() & " Task neugestartet")  

Einzufügen nach Zeile 14.
Kosh
Kosh 25.11.2008 um 13:44:26 Uhr
Goto Top
Nice, danke. Hab das gleich mal hinzugefügt.
Rehner
Rehner 29.11.2008 um 09:01:52 Uhr
Goto Top
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:
 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
MISTAX
MISTAX 29.11.2008 um 16:54:40 Uhr
Goto Top
Siehe 3-4 Posts drüber, gleiches Problem wie ich; Lösung steht da auch schon ;)
Rehner
Rehner 30.11.2008 um 10:35:22 Uhr
Goto Top
Danke, wer lesen kann ist halt doch klar im Vorteil! face-wink

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
Kosh
Kosh 02.12.2008 um 08:12:39 Uhr
Goto Top
Versuch mal Zeile 13:

oShell.Run "C:\pfad\meineapplikation.exe", 7, False  

EDIT: Danke für das viele Feedback Leute! face-smile
Ich arbeite alle Änderungen und Ideen gleich oben in den Originalcode ein.