Start eines Auto-It-Scripts durch einen Windows-Dienst

  • Hallo,

    ich bin gerade dabei, mich in Auto-It einzuarbeiten und damit auch neu hier im Forum. Ich bin schon ziemlich beeindruckt, was mit Auto-It so alles möglich ist.

    Nun wollte ich es nutzen, um eine Web-Anmwendung durch Nagios überwachen zu lassen. Hierfür habe ich ein Script geschrieben, das den IE öffnet, auf das Aufpoppen der Login-Maske wartet, sich anmeldet, ein paar Sachen prüft und sich dann wieder an der Anwendung abmeldet. Das Script läuft (egal ob kompiliert oder nicht kompiliert) manuell gestartet prächtig, allerdings gelingt es mir nicht, es in Nagios einzubinden.

    Das Script habe ich für die Nagios-Nutzung kompiliert, es liegt also als exe vor. Um es in nagios einzubinden nutze ich den NS-Client. Dieser läuft als Dienst im System-Kontext. Er darf mit dem Desktop interagieren.

    Mein Script beginnt so:

    [autoit]


    #include <ie.au3>

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("log.txt", 2)
    FileWrite($file, "IE INcluded" & @CRLF)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    $oIE=_IECreate("http:/meine-anwendung/",1,0,1,1)
    if @error > 0 Then
    ConsoleWriteError("Critical - Fehler beim Öffnen der ersten Startseite von der Anwendung")
    exit(2)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("log.txt", 1)
    FileWrite($file, "Initiale Startseite geöffnet" & @CRLF)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Prüfung, ob auf der ersten Seite auch der erwartete Text steht
    $text = _IEBodyReadHTML($oIE)
    $ergebnis=StringRegExp($text, '.*Zur Anmeldung.*')

    [/autoit][autoit][/autoit][autoit]

    ....

    [/autoit][autoit][/autoit][autoit][/autoit]


    Dieses Script rufe ich mit einem anderen Script auf, um es im Kontext eines bestimmten Nutzers laufen zu lassen (das habe ich als mögliche Lösiung in einem Nagios-Forum gefunden (http://www.nagios-portal.org), es muß sicher nochmal ordentlich geschrieben werden:

    [autoit][/autoit][autoit][/autoit][autoit]

    $ergebnis= RunAs("benutzername", "", "passwort", 1, "<Pfad>meinscript.exe", "<Pfad zum Script-Verzeichnis>", @SW_MAXIMIZE )
    Sleep(100000)
    ConsoleWriteError("OK - Anwendung wurde gestartet")
    exit(0)

    [/autoit][autoit][/autoit][autoit][/autoit]


    Wenn ich mir das durch das erste Script erzeugte Log ansehe sehe ich, daß er bis "IE INcluded" kommt, das Öffnen des Internet-Explorers scheint nicht zu klappen, die zweite Meldung kommt nicht. Auf dem Bildschirm tut sich auch nichts. Im Taskmanager kann ich sehen, daß es einen Prozess gibt, der wie mein Script heißt, der aber nie beendet wird.

    Alles passiert auf einem Windows Server 2003 und im IE 8.

    Nun meine Fragen:
    - Wie bekomme ich es hin, daß der IE gestartet wird, wenn ich das kompilierte Script aus dem Dienst heraus aufrufe?.
    - Falls dies vielleicht gar nicht mein Problem ist: Habe ich dem Aufbau einen Fehler oder mache ich da prinzipiell was falsch?

    Vielen Dank für Eure Hilfe!

    Miwu

    3 Mal editiert, zuletzt von miwu (1. März 2011 um 12:33) aus folgendem Grund: Schreibweise Auto-It korrigiert.

  • Ich hätte einen Vorschlag was du versuchen könntest.
    Anstatt dem 2. Skript nimmst du psexec um das eigentliche Skript im Benutzerkontext auszuführen.
    Zusätzlich gibst du psexec den Parameter "-i 0" mit, das bewirkt das das Programm auf der Konsole 0 (dem Desktop)
    ausgeführt wird. ob das in Verbindung mit Diensten klappt weiß ich leider nciht, wäre aber einen Versuch wert.

  • @Bitboy: Danke für den Tip, ich probiere es aus und melde mich dann wieder.
    @DFPWare:Eigentlich wußte ich das, irgendwie tippten meine Finger aber immer was anderes :) Ich habe meinen ersten Post korrigiert.