Autoit terminated - trotzdem sauber beenden?

  • Hey Com, :)

    ich habe es mit Tutorials geschafft, Autoit mit einer MySQL Datenbank zu verbinden.
    Alles funktioniert auch wunderbar und ich hatte vor, dass das Script bestimmte Daten
    zum Auswerten meiner Software in die SQL abspeichert. Andere User benutzen also
    quasi meine Applikationen und ich möchte gerne einige Werte (wann startet/beendet
    der User die Datei, welche Funktionen nutzt er um diese Uhrzeit etc..) auslesen, um
    meine Software dementsprechend anzupassen.

    Gleichzeitig soll aber auch sowas wie eine Onlineanzeige intern gemanaged werden. Nutzen
    z.B zehn User meine Software, steht dann auch in der SQL user_online=10. Aber wenn
    man jetzt Autoit über den Taskmgr oder durch eine andere Applikation terminated,
    kann nicht mehr user_online auf -=1 gesetzt werden.

    Gibt es da vielleicht eine Schutzmaßnahme, womit man trotzdem bei dem unerwarteten Beenden
    der Software eine letzte Funktion o.Ä ausführen kann? Ich weiß leider nicht, wie man mit
    "user disconnected" verbunden mit einem SFTP Server, arbeiten kann.

    Auf der anderen Seite kann ja auch mal der PC abstürzen (Stromausfall etc.). Was dann? 8|

    Bisher benutze ich OnAutoItExitRegister, um u.A GDI aus dem Ram beim Beenden zu cleanen.
    Aber diese Funktion bringt leider auch nicht viel. X/


    Habt ihr vielleicht Ideen, was man da machen könnte?

  • Da fallen mir spontan drei Möglichkeiten ein...

    • eine Aufgabe im Taskplaner erstellen
    • einen Dienst im Hintergrund laufen lassen
    • du lässt generell einen zweiten Task im Hintergrund laufen, der auf solche Dinge achtet

    Bei mir läuft ständig ein kleines Tool im Hintergrund, welches quasi als Handlanger für viele andere Tools die Drecksarbeit erledigt und diese auch mit wichtigen Infos versorgt. Wird z. B. FileZilla Client/Server gestartet, lade ich damit dann ein spezielles Tool, dass zuerst einmal ein paar Farben im FZ-Server ändert, da ich da sonst mit meinem dunklen Windows-Theme nicht viel sehen kann. Dann bleibt es im Hintergrund und fängt bestimmte Tasten im FZ-Client ab, mit denen ich dann ein paar nette Features integriert habe - so kann ich damit z. B. direkt aus dem FZ-Client heraus einen markiertes Listview-Item auf Google/iMDB oder MoviePilot suchen. Da sich der FZ-Client leider keine Passphrasen für Schlüsselpaare merkt und ich dann täglich mehrmals bis zu 6 eingeben müsste, lade ich damit den PUTTY-PAGEANT und trage sie dann dort ein. Solche Sachen halt...

  • Ich würde es so machen. Der Client setzt nicht einfach nur einen Counter hoch sondern gibt noch jeweils eine eindeutige id, am einfachsten den Rechnernamen, und einen timestamp an. Diesen Timestamp aktualisiert der Client alle x-Minuten mit adlibregister. Dadurch ist es egal wie das Script beendet wird, sobald der in der DB gespeicherte Timestamp älter als die X-Minuten ist, ist der Client offline.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hey Bitnugger und chip :)

    danke für eure Antworten. Einen zweiten Task im Hintergrund wäre auch nicht verkehrt. :D
    Gestern ist mir im Bett noch genau das selbe wie chip eingefallen. xD

    Also in der DB ist noch eine table mit datetime drin und das autoit script sendet dann alle 2 Minuten
    die letzte Aktivität. Allgemein kann man dann ja eine Select Abfrage erstellen, die alle Einträge, die
    älter als 5 Minuten sind bzw. nicht aktulisiert wurden, als offline zählen.

    Das mit der eindeutigen ID ist auch wichtig... stimmt
    adlibregister muss ich mir auch mal anschauen, klingt besser als ein timerdiff.


    Danke nochmal. <3