Programm (Prozess) überwachen und ggf. neu starten mit Verzögerung

  • Hallo an alle,
    ich benutze AutoIt erst seit ein paar Tagen, und das ohne Programmierkenntnisse.
    Ich habe auch bereits 2 Probleme mit der Software gelöst. Nun habe ich aber eine Nuss, die ich alleine nicht geknackt bekomme.
    Ich habe auf einem Rechner eine Videoüberwachungssoftware laufen.
    An desem Rechner hängt eine USV. Jetzt habe ich mit einem Script veranlasst, dass die Videosoftware beendet wird, wenn der Strom länger als eine bestimmte Zeit weg ist, und der Rechner über Batterie läuft. Erst ein paar Minuten später wird der PC von der USV abgeschaltet.
    Nun kann es aber sein, dass die Videosoftware abgeschaltet ist, und der Strom wieder da ist, bevor die USV den PC runter fährt.
    Für diese Grauzone brauche ich ein neues Script.
    Dieses Script soll den Prozess überwachen, und ggf. neu starten, wenn der PC doch nicht runter gefahren wird.
    Folgenede Bedingungen gelten:
    Prozess wird überwacht.
    1)
    Ist der Prozess aktiv, ist alles okay.
    - keine Meldung
    - keine Aktion
    2)
    Ist der Prozess beendet, muss eine gewisse Zeit gewartet werden (z.B. 2 Min.)
    Jetzt kann es sein, dass der Rechner bereits runter gefahren ist. Dann ist der Fall eh erledigt.
    Sollte nach der Zeit der Rechner aber noch laufen (weil der Strom zwischenzeitlich wieder da ist und der Rechner an bleibt)
    Dann ist die Software aber beendet und muss neu gestartet werden.
    Ich habe es erfolglos mit folgendem Code versucht:
    sleep(50000)
    If ProcessExists("Starter.exe") Then
    MsgBox(0, "Multieye", "Multieye läuft.")
    Else
    Run( "C:\Programme\artec technologies AG\MULTIEYE-HYBRID\Starter.exe")
    EndIf

    Nachteil, ich weiß nicht, wie man es programmiert, wenn er nach erfolgreicher Prüfung nichts machen soll.
    Außerdem weiß ich nicht, wie man vor dem Start eine 2. verzögerte Prüfung einfügt.
    Kann mir da jemand helfen?
    Für Interesse und Mühen danke ich schon mal.
    Gruß
    Stephan

    Einmal editiert, zuletzt von Quade (4. Februar 2010 um 13:07)

  • [autoit]

    While 1
    While ProcessExists("Starter.exe")
    Sleep(100)
    WEnd
    Sleep(1000*60*2)
    Run( "C:\Programme\artec technologies AG\MULTIEYE-HYBRID\Starter.exe")
    Do
    Sleep(100)
    Until ProcessExists("Starter.exe")
    WEnd

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

    Einmal editiert, zuletzt von Cartan12 (4. Februar 2010 um 11:36)

  • Hallo Cartan12,
    erstmal danke für Deine schnelle Antwort mit Lösung.
    Ich gebe zu, ich habe ihn auch nicht ganz verstanden. Aber mein mangeldes Verständnis ändert ja eh nix an der Funktionalität.
    Leider komme ich erst morgen Früh dazu, den Code zu testen. Ich gebe dann aber ein kurzes Feedback.
    Kannst Du mir noch kurz erklären, welche Funktion die beiden 10tel Sekunden Wartezeit haben?
    Ist das der Intervall, in dem der Prozess überprüft wird? Dann könnte ich den nämlich etwas rauf setzen. Z.B. auf 1000 für 1 Sek.
    Gruß und danke nochmal
    Stephan

  • Ok, hier die Erklärung:

    [autoit]

    While 1
    ...
    WEnd

    [/autoit]

    Einfach eine Normale Endlosschleife, da 1 immer Wahr ist

    [autoit]

    While ProcessExists("Starter.exe")
    Sleep(100)
    WEnd

    [/autoit]

    Prüft, ob der Prozess existiert. Du kannst das Sleep auch verändern wenn du möchtest.

    [autoit]

    Sleep(1000*60*2)
    Run( "C:\Programme\artec technologies AG\MULTIEYE-HYBRID\Starter.exe")

    [/autoit]

    Wenn der Prozess nicht mehr existiert wartet das Script 2 minuten und startet dann neu.

    [autoit]

    Do
    Sleep(100)
    Until ProcessExists("Starter.exe")

    [/autoit]

    Wartet bis der Prozess existiert, da der ja ein bisschen zeit braucht zum neustarten. Auch hier kannst du den Sleep-Wert ändern.

    Ich hoffe, das hat dir geholfen

    Mfg Cartan12

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

    Einmal editiert, zuletzt von Cartan12 (4. Februar 2010 um 11:37)

  • Hallo Cartan12,
    das hat mir geholfen. Danke.
    Ich habe das ganze jetzt mal schnell lokal mit einem anderen Prozess versucht.
    Da bekomme ich beim starten der Datei aber eine Fehlermeldung.
    In Line 4
    Error: "Next" statement with no matching "For" statement.
    Ich weiß nicht warum.
    MfG

  • :rofl: :rofl: :rofl:
    Verdammt ^^ Ersetz mal die Next durch WEnd... Mein Fehler (man ist das peinlich)

    EDIT: So habs geändert...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Braucht dir nicht peinlich sein.
    Ich habs ja gar nicht geschafft.
    Es funktioniert aber im Vorabtest.
    Ich sage deshalb nochmal danke.
    Gruß
    Stephan