SelfUpdate - ein Update fuer das eigene Programm

    • Offizieller Beitrag

    Bis vor Kurzem hatte ich mich mit dem Thema "Update über's Internet", für meine eigenen Programme, noch gar nicht beschäftigt.

    Ich hatte sie als ZIP-Archiv hier veröffentlicht und man musste für eine neue Version halt das ZIP-Archiv entpacken bzw. die alte Version damit überschreiben.

    Bei meiner "Digitaluhr v4" habe ich nun erstmals eine Update-Funktion eingebaut: Es gibt einen Button, der beim ersten anklicken auf meiner Homepage nachsieht, ob es eine neue Version gibt und falls ja, wird nach nochmaligen draufklicken das Update durchgeführt.

    Dabei war es natürlich enorm hilfreich, dass sich alle benötigten Ressourcen (Grafiken, Sounds, Fonts, etc.) mit in der Exe-Datei befinden (BASE64-codiert), denn so muss ich nur diese eine Exe-Datei updaten/austauschen.

    Problem beim updaten, ist die Tatsache, dass das Programm ja gerade ausgeführt wird. Man kann also nicht einfach so die Exe-Datei austauschen.

    Es gibt aber einige Beispiele im Netz, wie man mit Hilfe eines temporären Batchscripts, diesen Austausch vornehmen kann.

    Nachdem ich mir das alles zusammengesucht habe, dachte ich mir, ich fasse die benötigten Schritte mal zusammen, um es euch einfacher zu machen, falls ihr sowas auch vorhabt.

    Einleitung zu Ende, hier geht's richtig los:

    Wichtigste Vorraussetzung ist der Homepage-Speicherplatz (Webhosting). Ich weiß nicht, ob es etwas Brauchbares kostenlos gibt. Ich denke aber, dass man für eine eigene Domain wohl bezahlen muss. Auf jeden Fall braucht ihr halt Speicherplatz und die Möglichkeit dort Dateien hochzuladen (FTP).

    Und es sollte möglich sein, die Dateien von dort per HTTP oder HTTPS wieder herunterzuladen. Für dieses Beispiel-Programm stelle ich die erforderlichen Dateien auf meinem Webspace zur Verfügung. Das Testprogramm funktioniert also!

    Was muss auf den Server hochgeladen werden:

    1. Die neue Version von eurem Programm ("selfupdate_test.exe")

    2. Eine Textdatei (ANSI) mit der neuen Versionsnummer ("selfupdate_test_version.txt")

    3. Eine Binärdatei mit der SHA1-Checksumme des neuen Programms ("selfupdate_test_hash.bin").


    Zu Erstens ist das einfach das folgende Script als kompilierte Exe:

    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=selfupdate_test.exe
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    MsgBox(0, 'Selfupdate Test', 'Update erfolgreich!' & @CRLF & 'Neue Version v1.1')

    Zu Zweitens erstellt man mit dem Editor eine Text-Datei und schreibt da nur die neue Versionsnummer rein z.B.: "1.1.0.0" (ohne die Anführungszeichen und ohne Zeilenumbruch).

    Zu Drittens könnt ihr dieses kleine Script verwenden, um eine Binärdatei mit der SHA1-Checksumme zu erzeugen:

    Das Update-Script:

    Das eigentliche Update übernehmen dann die zwei Funktionen (ausführlich kommentiert) aus diesem Script. Das restliche Drumherum stellt eine kleine GUI dar, womit ich euer Programm andeuten will:

    Die Scripte findet ihr auch als Anhang (zum runterladen)!

  • Hallo Oscar

    Wichtigste Vorraussetzung ist der Homepage-Speicherplatz (Webhosting). Ich weiß nicht, ob es etwas Brauchbares kostenlos gibt.

    Im Grunde kann man das auch problemlos mit jedem Cloudspeicher wie Dropbox (mit Freigabelinks) ganz einfach nachstellen.

    Ich habe etwas Bauchschmerzen wegen der temporären Batch-Datei. Ich wollte mal ein Programm mit einer "Deinstallation" ausstatten und habe das "SelfDelete"-Skript benutzt. Das gab nur Ärger mit Antivirenprogrammen. Daher tendiere ich dazu bei einem Programm mit Updatefunktion mit dem Programm direkt eine Update.exe bereitzustellen und habe damit gute Erfahrungen gemacht. (Ist aber vllt. nur Voodoo).

    Grüße autoiter

    • Offizieller Beitrag

    Daher tendiere ich dazu bei einem Programm mit Updatefunktion mit dem Programm direkt eine Update.exe bereitzustellen und habe damit gute Erfahrungen gemacht. (Ist aber vllt. nur Voodoo).

    Das halte ich in der Tat für Voodoo!

    Ob nun Batch oder Exe ist vom Bedrohungspotential völlig egal. Mit beiden kannst Du Malware erstellen.

    Die Heuristiken der AV-Programme schlagen auch meist schon an, wenn Du irgendwas aus dem Netz nachlädst (meine Erfahrung).

  • Ja, ich muss das mal ablegen. Ich denke das liegt an meiner archaischen, christlichen Erziehung. Den Glauben habe ich zwar abgelegt, weil ich mich zu schlau dafür halte. Aber ich ersetze Wissen dennoch ständig mit Aberglauben. :D

    Danke fürs Teilen. :thumbup:

    Grüße autoiter

  • Hehe, das wird mit den meisten AutoIt-Programmen schwer zu schaffen sein. Wäre aber mal eine Challange :D

    (Bei Dropbox kann es dir auch passieren, dass nach einiger Zeit dein Programm für die Freigabe gesperrt wird, weil vermeintlich ein Virus erkannt wurde. Man muss sich dann mit allen AV-Herstellern verständigen damit DB das wieder freischaltet - was schwer wird.. War also nicht als echte Verteilungsalternative gedacht sondern als Anmerkung, dass man das Skript auch einfacher testen kann, als sich Webspace mit FTP-Zugang zu besorgen. ;) ).

    Grüße autoiter

  • Hehe, das wird mit den meisten AutoIt-Programmen schwer zu schaffen sein. Wäre aber mal eine Challange

    Glaub mir, das geht schneller als du glaubst. Soweit ich das weiß ist es nicht transparent, wie viel man linken und downloaden darf bevor das gesperrt wird.

    Ein Freund von mir wollte eine Datei verlinken und bereits beim 1. (oder was es 2.? ich weiß es nicht mehr, vielleicht hatte er sie noch an andere geschickt) mal war sie gesperrt.

  • Nachdem ich mir das alles zusammengesucht habe, dachte ich mir, ich fasse die benötigten Schritte mal zusammen, um es euch einfacher zu machen, falls ihr sowas auch vorhabt.

    Richtig klasse, dass Du Dir die Mühe machst, die Skripte super verständlich zu kommentieren und bereitzustellen. Herzlichen Dank dafür.

  • Hallo,

    ich beschäftige mich erst kurze Zeit mit Autoit und bin begeistert, was man damit alles umsetzen kann.

    Dein Script ist klasse und ich verwende es gern.

    Eine Frage hätte ich dazu, auch wenn das Thema schon etwas älter ist.

    Könnte man die Update Funktion auch automatisch, bei Programmstart, ausführen lassen, ohne den Button klicken zu müssen?

  • Richtig klasse, dass Du Dir die Mühe machst, die Skripte super verständlich zu kommentieren und bereitzustellen. Herzlichen Dank dafür.

    Da kann ich mich nur anschließen ! Das :rock: !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hier mal der datei austausch ohne eine .bat datei. Alles bleibt im ram und der ständig kreischende AV bleibt ruhig.

    Started die cmd.exe mit einer reihe von befehlen die nacheinander ausgeführt werden.

    >ping localhost -n 2< bedeutet soviel wie das erstmal 127.0.0.1 2 mal gepingt wird. Ist einfach sowas wie Sleep(2000). Die CMD soll halt 2 sekunden warten. Bis dahin ist die Autoit Exe sicherlich bereits aus.

    >del /F "alte.exe"< bedeutet das die alte datei gelöscht wird. /F dabei Force

    >move "update.exe" "alte.exe"< bedeutet das das update and die stelle der alten datei geschoben wird

    >start "" "alte.exe"< bedeutet das die neue datei jetzt ausgeführt wird

    Ginge bestimmt auch noch weiter zu kürzen und es ginge auch der update.exe noch parameter mitzugeben.