Prozess überwachen bei False ein Batch ausführen

  • Hallo zusammen,

    Ich habe folgendes Problem ich sollte ein bestimmten Prozess dauerhaft Überwachen solange er ausgeführt wird und nach beenden ein Batch ausführen, ich habe zwar Suche und Google usw. verwendet und das ein oder andere versucht aber es will nicht funktionieren, ich stehe etwas auf dem Schlauch und mach da schon länger rum,

    aber hier mal der Teil wo rum es geht bzw. ist nur ein kleiner Auszug vom ganzen Skript

    eventuell finden sich noch andere Fehler oder des gleichen bin eher Bastler als Profi bei Autoit :)

    Spoiler anzeigen

    Genauer gesagt geht es um diesen Teil

    Spoiler anzeigen
    AutoIt
                    Sleep(3000)
                    While (1)
                        If Not ProcessExists("InteliMonitor.exe") Then
                            Run(@ScriptDir & "\bat files\Teststadt\Disconnect.bat")
                        Else
                            Sleep(10)
                        EndIf
                    WEnd


    Mfg

    Alex

    Einmal editiert, zuletzt von bytesinner (15. Oktober 2020 um 08:05)

  • aber hier mal der Teil wo rum es geht bzw. ist nur ein kleiner Auszug vom ganzen Skript

    Ein ungenügend kleiner Auszug ;).

    - Was steht z.B. in der Connect.bat , $datei2 und $datei

    - Verschiedene Variablen werden zwar verwendet, aber ohne das man ihren Wert kennt, wie z.B. :

    $datei2 = ($ort1 & $ini2) , $suchen , $suchen2 , $suchen3 usw.

    AutoIt
                    ExitLoop
                    Sleep(3000)
                    While (1)
                        If Not ProcessExists("InteliMonitor.exe") Then
                            Run(@ScriptDir & "\bat files\Teststadt\Disconnect.bat")
                        Else
                            Sleep(10)
                        EndIf
                    WEnd

    Mit ExitLoop wird die Schleife verlassen, ohne jemals den Bereich :

    While (1)

    If Not ProcessExists("InteliMonitor.exe") Then

    Run(@ScriptDir & "\bat files\Teststadt\Disconnect.bat")

    ...

    zu durchlaufen.

    Nebenbei : Aussagekräftigere Variablennamen wären hinsichtlich Lesbarkeit von Vorteil ;).

    Beschreibe bitte mal mit kurzen Sätzen, wie der Prozess ablaufen soll.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo,

    Das ganze Skript ist ein GUI wo ich verschiedene Verbindungen aufbauen kann sei es direkt oder VPN mit dem entsprechenden Software Tools, nach dem die Verbindung aufgebaut ist wird eine weiters Tool was benötigt wird Gestartet was die besageten Verbindungen braucht, an die Stelle wo ich hänge soll die Verbindung automatisch beendet werden wann das 2 Tool Beendet wird.

    die Case $Button2 sind nur für die GUI (Button´s) für die Ausführung, aber ich denke das ist so weit klar.

    Die Connect.bat oder Disconnect.bat sind nur zum Verbindung Aufbau (Cisco AnyConnect Secure Mobility Client) über Command Line.

    Hier mal Connect.bat

    echo

    C:

    cd "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client" & .\vpncli -s < test.dat

    $datei und $datei2 wird benötigt da ich an zwei verschiedene Stellen eine INI File anpassen muss bevor das Tool2 Gestartet wird da eine Bestimmter Software Start zum sicheren Aufbau der Verbinding nötig ist dass das Skript Funktioniert.

    ort1 wird benötigt das es zwei verschiedenen Versionen des Skripts gibt eine mal für Daten die Lokal auf dem PC sind und eine die Daten Über Lan verwendet.

    $suchen, $suchen2, $suchen3 ist für die INI´s, die Variablen werden verwendet zum Suchen bestimmten Inhalte von Zeilen und diese anzupassen.

    Habe den Code Angepasst vom Ganzen Skript, da IP Adressen drin sind wo nicht für Jeden Bestimmt sind, hätte man bestimmt auch besser lösen können, aber wie ich schon geschrieben habe bin ich ehre Bastler und ich hänge an dem GUI schon sehr Lange und erweitere es nach und nach wie es Zeitlich geht.

    Skript.au3

    So ich hoffe das es nicht zulange ist für eine kurze Erklärung :)


    MFG

    Alex

  • So wollte nur nochmal nach hacken, ob Jemand eine Lösung hat, bin beruflich nicht mehr dazu gekommen weiterzumachen und komme auch nicht weiter, manchmal stellt sich mein Kopf quer :S und da das Thema schon ein Weilchen offen ist kann man ja noch mal nach hacken, ohne frech zu wirken 8o .... oder nicht? :|

  • bytesinner 22. Juni 2021 um 10:38

    Hat das Label [ offen ] hinzugefügt.
    • Offizieller Beitrag

    ich sollte ein bestimmten Prozess dauerhaft Überwachen solange er ausgeführt wird und nach beenden ein Batch ausführen

    Ich würde einfach den Aufruf für diesen Prozess covern in einem RunWait. Dann kannst du den Aufruf der Folgeoperationen direkt skripten, da diese erst ausgeführt werden, wenn der mit RunWait gestartete Prozess beendet ist.

  • Danke für die Info, nur stehe ich etwas auf den schlau (vermutlich so einfach das ich es nicht blicke), ich füge mal mein Scrip teil hinzu eventuell mal an zeigen wo und wie

    zur Verdeutlichung Teststadt2 angewählt --> Connect.bat wird ausgeführt (VPN Protokoll) --> danach kommen ini File Anpassungen ($ort1,2 $datei2 usw.) --> Jetzt der Prozess wo überwacht werden soll (InteliMonitor)--> Zuganges Daten Eingabe im InteliMonitor--> wenn InteliMonitor beendet wird (Fenster geschlossen) soll Disconnect.bat ausgeführt werden.


    So ich hoffe ich verlage nicht zuviel aber das Thema nervt mich schon etwas das ich es nicht hin bekomme.

    Mfg

    • Offizieller Beitrag

    OK, im Detail hatte ich dein Skript noch nicht angeschaut. Deshalb mal meine Ansicht von dem was es tut:

    - #23 Start einer Endlosschleife

    - ff. Start "InteliMonitor.exe" (warum wird die zurückgelieferte PID nicht aufgefangen?)

    - Fenster aktivieren, maximieren (warum wird Fensterhandle nicht aufgefangen?)

    - Pixelsearch um festzustellen ob es geklappt hat?!! - Völlig sinnfrei, denn: wenn PID und Fensterhandle da sind, war die Aktion erfolgreich, zur Sicherheit könnte man das Fenster noch OnTop setzen.

    - ClipPut ---> na da wäre doch erstmal zu prüfen, ob das Eingabefeld überhaupt den Fokus hat (Ausnahme, ist das erste Control und hat automatisch den Fokus)

    - mehrere Send-Operationen zum Ausfüllen, letztes ENTER startet vermutlich

    - #42 aber was soll das ExitLoop hier? - Richtig: Es sagt dir, das alles, was vorher ablief ÜBERHAUPT NICHT in eine Schleife gehört, ist doch ein stinknormaler Programmablauf OHNE Wiederholungen!

    - Daraus resultiert, dass du nun NIEMALS auf die Schleife zur Prozessüberwachung gelangen kannst, du gehst ja vorher aus dem Ablauf raus!

    Also:

    Die äußere Schleife muss weg! (somit auch das ExitLoop in Zeile 42 und das folgende Sleep

    Ich habe mal den entsprechenden Teil geändert:


    EDIT:

    Hast du überhaupt mal probiert mit dem AutoIt Window Info Tool die Controls abzufragen. Dann könntest du evtl. Send ersetzen durch die Control - Befehle.

  • Erstmal Danke für die Aufklärung meiner Fehler :thumbup: , ja Ich merke das ich wohl einige gemacht habe X/ , die ich vermutlich nach und nach eingebaut wurden das ich das Scrip nach und nach verändert habe, auch durch versuchen wenn’s läuft dann Don't Touch,

    das mit den ExitLoop logisch,

    Funktion hab ich mal teilweise getestet und soweit ok,

    Mit Control bin ich dran aber komm mit den ersten Befehl in die nur teilweise zum Erfolg, wenn ich z.B ControlSend($hWnd, "", "[CLASS:TEdit; INSTANCE:1]", "Wartung  Teststadt") verwende Funktioniert es erst mal aber nur solange im Anmelde Bildschirm vom Hauptraum nur das eine Edit Fenster existiert, ansonsten wird es zu Instance:2, deswegen ClipPut und ja wird immer als erstes angewählt.

    Mfg

    • Offizieller Beitrag

    Mit Control bin ich dran aber komm mit den ersten Befehl in die nur teilweise zum Erfolg, wenn ich z.B ControlSend($hWnd, "", "[CLASS:TEdit; INSTANCE:1]", "Wartung Teststadt") verwende Funktioniert es erst mal aber nur solange im Anmelde Bildschirm vom Hauptraum nur das eine Edit Fenster existiert, ansonsten wird es zu Instance:2,

    Bei Edits solltest du auch mit ControlSetText arbeiten können, aber egal, wenns funktioniert.

    Es kann ein weiteres Edit auftauchen? Was ist der Auslöser? Das könnte man aber überwachen, Ctrl sind auch Fenster und lassen sich mit der WinAPI EnumChild Funktion in ihrem Fenster identifizieren.

  • Wegen den Edit hab ich mal 2 Bilder drangehängt, werde noch mal mit AutoIt Window Info Tool auf die Suche gehen mal sehen was ich so finde,

    unter dem Reiter Connection kann ich verschiedene Verbindungen wählen (diese werden in der InI Anpassung vorgewählt) und die Airgate Funktion kommt auch vor und das sorgt für die Instance Änderung, ich könnte zwar für jede Verbindung wo im Script hergestellt wird die Instance anpassen, aber das ist meiner Meinung nicht sicher das es immer funktioniert, zumindest müsste ich es Testen.


    Spoiler anzeigen

    EDIT: Wie vermutete gibt es Probleme mit den Instance, mal geht es mal nicht das je nach Verbindung die zuletzt verwendet wurde, ändert sich die Instance von 1 bis 3, warum keine Ahnung.

    Einmal editiert, zuletzt von bytesinner (25. Juni 2021 um 10:18) aus folgendem Grund: Nachtrag

    • Offizieller Beitrag

    : Wie vermutete gibt es Probleme mit den Instance, mal geht es mal nicht das je nach Verbindung die zuletzt verwendet wurde, ändert sich die Instance von 1 bis 3, warum keine Ahnung.

    Dann hast du sicher andere Elemente im Fenster (Registerkarte), die du abfragen kannst. Dann in Abhängigkeit davon ändert sich ja die Instance.