Frage zur Update Funktion

  • Hallo zusammen,

    ich bins mal wieder und zwar heute mit einer Frage zur Update Funktion in meinem Skript.

    Was macht es so wie es jetzt ist?
    Also die download funktion so wie sie im Original Script ist funktioniert auch bei mir, mit einem Hacken. Die Version (Dim $ver = "1.0.0") im Skript wird bei mir nicht (wie in der update.txt vorgegeben) auf Dim $ver = "1.1.0" geändert und ich weiss nicht warum. Daher startet er das Update immerwieder!
    Die Test.ini läd er erfolgreich in den angegeben Ordner!

    So was soll es eigentlich machen?
    Die aktualisierte Update.txt soll bei mir im Ordner erhalten bleiben und daher habe ich die lösch Funktion der update.txt aus dem Code gelöscht!
    Es soll nicht eine Test.ini runterladen, sondern eine von mir aktualisierte Version (eine Exe) des Tools indem auch die Updatfunktion drin ist und die alte mit der neuen ersetzen.

    Ich hoffe ihr wisst wie ich das meine und könnt mir dabei helfen!

    Also setze mal alles folgender Massen:

    1. Original Code den ich als Grund verwende.

    Spoiler anzeigen

    Dim $ver = "1.0.0"
    HttpSetUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10')
    InetGet("http://trap-making.bplaced.net/update.txt", @Scriptdir & "\update.txt", 1, 0)
    $file = FileOpen(@Scriptdir & "\update.txt", 0)
    $line = FileReadLine($file, 1)
    $line2 = FileReadLine($file, 2)
    $line2 = 1
    If $line = $ver Then
    MsgBox(64, "Kein Update", "Du hast die neuste Version: (" & $ver & ")")
    FileClose($file)
    FileDelete(@Scriptdir & "\update.txt")
    Else
    MsgBox(64, "Update!", "Es ist eine Neue Version verfügbar!")
    $fg = MsgBox(4, "Updaten?", "Möchtest du jetzt Updaten?")
    If $fg = 6 Then
    HttpSetUserAgent('Firefox')
    InetGet("http://www.trap-making.bplaced.net/Test.ini", @ScriptDir & "\Test.ini", 1, 0)
    MsgBox(0,"",FileRead(@ScriptDir & "\test.ini"))
    FileDelete(@Scriptdir & "\update.txt")
    EndIf
    EndIf

    2. Von mir abgeänderten Code.

    Spoiler anzeigen

    Dim $ver = "1.0.0"
    InetGet("http://bboalmanach.de/update.txt", @Scriptdir & "\update.txt", 1, 0)
    $file = FileOpen(@Scriptdir & "\update.txt", 0)
    $line = FileReadLine($file, 1)
    $line2 = FileReadLine($file, 2)
    $line2 = 1
    If $line = $ver Then
    MsgBox(64, "Kein Update", "Du hast die neuste Version: (" & $ver & ")")
    FileClose($file)
    Else
    MsgBox(64, "Update!", "Es ist eine Neue Version verfügbar!")
    $fg = MsgBox(4, "Updaten?", "Möchtest du jetzt Updaten?")
    If $fg = 6 Then
    InetGet("http://www.bboalmanach.de/BBO Almanach Ressourcen Rechner.exe", @ScriptDir & "BBO Almanach Ressourcen Rechner.exe", 1, 0)
    MsgBox(0, "Du Benutzt nun die Aktuellste Version", "")
    EndIf
    EndIf

    Mfg Ghostleader

    Einmal editiert, zuletzt von Ghostleader (6. Juli 2011 um 23:57)

  • Du setzt die aktuelle Version ja immer manuell am Start

    [autoit]

    Dim $ver = "1.0.0"

    [/autoit]

    Du musst die Version der vorhandenen exe auslesen und mit der im Internet vergleichen und ggf. downloaden.

    [autoit]

    FileGetVersion

    [/autoit]


    Die Funktion könnte dir dabei helfen ;)

  • Du musst die Version der vorhandenen exe auslesen und mit der im Internet vergleichen und ggf. downloaden.

    Öhm ja und wieso darf er die Version nicht fix in einer Variable speichern? Er muss die Version ja nicht zwingend aus dem exe Header auslesen, das würde btw auch vorraussetzen, dass er die Versionsnummer beim compilieren angibt.
    Eine Variable in der exe mit fixer Versionsnummer langt ja, sofern in der update.txt eine andere steht.

    Nun zu den Fehlern:

    [autoit]


    InetGet("http://www.bboalmanach.de/BBO Almanach Ressourcen Rechner.exe", @ScriptDir & "BBO Almanach Ressourcen Rechner.exe", 1, 0)

    [/autoit]

    Deine Pfad Angabe ist hier fehlerhaft. Du hast ein "\" nach Scriptdir vergessen. Ausserdem wirst du Probleme bekommen wenn die neue exe gleich heisst wie die alte exe, da diese nicht einfach überschrieben werden kann. Da kommt es nun auf einen der folgenden Fälle an:

    Fall 1: Deine Update Routine befindet sich im Hauptprogramm, also die exe die geupdated werden soll wird gerade ausgeführt
    Fall 2: Der Updater ist eine seperate exe Datei, dein Hauptprogramm wird beendet bevor die neue exe heruntergeladen wird

    In beiden Fällen musst du dem Download der neuen exe zunächst einen anderen Namen geben, also zum beispiel neueprogramm.exe
    Spätestens wenn der Download abgeschlossen ist muss die alte Programm.exe beendet werden und entweder gelöscht oder als Backup woanders hinkopiert oder umbenannt werden.

    In Fall 1 gestaltet sich das etwas komplizierter, Fall 2 ist meiner Meinung nach die Optimallösung.

    Nun benennst du die heruntergeladene exe noch um und startest diese, update abgeschlossen, neue Version läuft. Damit deine Update Routine nicht Amokläuft musst du natürlich immer darauf achten, dass die Versionsvariable in der neuen exe auch wirklich gleich ist als die Version die in der aktuellen update.txt steht.

    Einmal editiert, zuletzt von misterspeed (6. Juli 2011 um 23:42)

  • Hallo an euch beide,

    vielen dank für eure Antworten und Hilfe.

    Das Problem ist nun gelöst und daher werde ich auch gleich das Thema als gelöst markieren bevor ich es wieder vergesse. ;)

    Gelöst wird es nun über ein selbtentpackendes Archiv, was ja deiner Variante 2 ähnelt @ misterspeed!

    Mfg Ghostleader