Hilfe für einen Autoupdate algorithmus.



  • Hallo,

    ich habe ein Programm und würde dies gerne mit einer Autoupdate Funktion versehen.
    Momentan besteht es aus einer exe Datei. Evtl werde ich aber das Herzstück
    (eine Klasse) in eine DLL Datei packen.

    Ich hab mir jetzt schonmal ein paar gedanken gemacht, wie ich sowas realisiern
    könnte. Aber bevor ich jetzt ganz in die falsche richtung gehe, frag ich lieber.

    Zur verfügung steht mir ein FTP Server. Also mein Webspace verfügt außerdem noch
    über eine MySQL Datenbank. Ich hatte mal eine E-Mail an den Support geschrieben
    und die meinten, ich könnte sie auch über ODBC ansprechen. Allerdings bin
    ich da überhaupt nicht fitt, deswegen wäre es gut, wenn es eine saubere
    lösung nur über FTP gäb.

    Ich kann bisher:
    - Dateien vom FTP Server downloaden (über winapi, hab mir da ne klasse geschrieben)
    - Dateien auf der Festplatte hin und her schieben (teils winapi).
    - Dateiattribute auslesen (ebenfalls winapi 🙂 )
    - Programme ausführen (via ShellExecute(...) )

    Wie würdet ihr da am besten vorgehen?

    Evtl die aktuelle versionsnummer in einer binär oder txt datei auf dem Ftp Speichern.

    Und dann beim Create Ereigness meines Programms so ewtwas schreiben:

    wenn (Programmname = Update.exe)
    {
       Kopiere "Update.exe" nach "Projekt1.exe"
    }
    sonst
    {
       wenn(Update.exe im Ordner)
       {
          lösche Update.exe
       }
    }
    
    downloade Version.txt
    öffne Version.txt
    Prüfe Versionsnummer aus der txt zu deiner Versionsnummer (<-z.B. Versinosnummer wäre dann durch define VERSIONSNUMMER gesetzt)
    wenn (Versionsnummer aus txt größer)
    {
       Downloade die Datei, die in der Version.txt steht
       Schiebe die in den Programm ordner
       Nenne die Datei Update.exe
       ShowMessage("Programm muss wegen update neugestartet werden")
       Führe Update.exe aus und schließe sofort Projekt1.exe
    }
    

    Ich find das ist ein bißchen gewurschtelt oder? also ich muss das zeug ja so hin
    und her kopieren, weil man ja ein Programm das läuft nicht ersetzten kann.
    Mir is gerade eingefallen, dass es evtl sogar noch besser wäre das ganze über
    einen http download zu machen. Weil das Passwort für den FTP server ja im
    quellcode stehen muss. (allerdings hab ich das mit http downloads noch nie
    programmiert).

    Würd mich über ein paar vorschläge / diskussion freuen.

    danke fürs lesen.

    Gruß,
    d0x.



  • Find ich jetzt nicht, dass das "gewurschtelt"(Bayer?^^) ist und wirklich anders geht's auch nicht.
    Für wieviele Plätze soll dein Programm denn ausgelegt sein? Also wieviele Leute sollen das mal bekommen?
    Für einen einzelnen Platz würde es ausreichen wenn du die Update.exe nach dem erfolgreichen Download vom FTP löscht. Dann kannst du dir den Abgleich mit der Versionsnummer sparen.
    Für eine Mehrplatzlösung ist so ein Abgleich mit der Versionsnummer(beispielsweise über Version.txt) natürlich unerlässlich.
    Da bist du schon auf dem richtigen Weg. Allerdings würde ich einen kleinen externen Updatedienst schreiben den du startest wenn du feststellst, dass eine neue Version verfügbar ist.
    Dann kannst du nämlich dein Hauptprogramm beenden und dem Updatedienst so ermöglichen, dass er die alte exe löscht und durch die neue ersetzt.

    [EDIT]
    Hab grad erst das mit dem http-Download gelesen :p
    Dafür kannst du z.B. die Indy-Komponente IdFTP verwenden


Anmelden zum Antworten