Simpler Updater

  • Hallo Mitglieder,

    Ich habe gerade einen simplen Updater geschrieben und würde gerne wissen was man an ihm verbessern könnte.

    [autoit]

    DirCreate ("C:/Programme/SavageCraft")
    FileInstall ("Mineshafter-proxy.jar", "C:/Programme/SavageCraft/Mineshafter-proxy.jar", 1)

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

    $UpdatePath = "http://dl.savage-craft.tk/SavageCraft.exe"
    $Version = "1.0.0"
    $VersionPath = BinaryToString (InetRead ("http://dl.savage-craft.tk/version.txt"))

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

    While 1
    updatecheck ()
    WEnd

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

    Func updatecheck ()
    If $VersionPath > $Version Then
    InetGet ($UpdatePath, @ScriptDir & "\SavageCraft.exe")
    $Version=$VersionPath
    start()
    Else
    start()
    EndIf
    EndFunc

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

    Func start()
    ShellExecute ("C:/Programme/SavageCraft/Mineshafter-proxy.jar")
    Exit
    EndFunc

    [/autoit]


    Ich würde mich über eure Hilfe freuen.

    Mit freundlichem Gruß,
    Kazu

    Einmal editiert, zuletzt von KazuZockt (7. August 2012 um 03:03)

  • Da die Version als String ist, kannst du es nicht einfach so vergleichen.
    Mach es besser so:

    Spoiler anzeigen
    [autoit]

    DirCreate("C:/Programme/SavageCraft")
    FileInstall("Mineshafter-proxy.jar", "C:/Programme/SavageCraft/Mineshafter-proxy.jar", 1)

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

    $UpdatePath = "http://dl.savage-craft.tk/SavageCraft.exe"
    $Version = 100
    $VersionPath = BinaryToString(InetRead("http://dl.savage-craft.tk/version.txt"))
    $VersionPath = Int(StringReplace($VersionPath, ".", ""))

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

    While 1
    updatecheck()
    WEnd

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

    Func updatecheck()
    If $VersionPath > $Version Then
    InetGet($UpdatePath, @ScriptDir & "\SavageCraft.exe")
    $Version = $VersionPath
    start()
    Else
    start()
    EndIf
    EndFunc

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

    Func start()
    ShellExecute("C:/Programme/SavageCraft/Mineshafter-proxy.jar")
    Exit
    EndFunc

    [/autoit]
  • Und wenn die Versionsnummer 0.10.1 lautet?
    Besser wäre sicherlich sowas ähnliches:

    Spoiler anzeigen


    @KazuZockt
    Ich verstehe noch nicht ganz wie der Ablauf funktioniert und was im Einzelnen passieren soll.
    Du erstellst einen Ordner SavageCraft im Programme-Verzeichnis.
    Dorthin verschiebst du die mitgelieferte .jar-Datei.
    In dein SkriptDir (was wo liegt?) lädst du, falls eine neuere Datei existiert die exe-Datei und die bleibt dort liegen.
    Dann wird die Jar-Datei ausgeführt - aber was macht die?
    Weiß die wo dein Skriptverzeichnis ist und tauscht die exe aus oder was macht die jar?
    Weil wenn nicht bleibt die exe in deinem Verzeichnis liegen. Und die jar womöglich auch.

    Ansonsten ein paar Vorschläge:

    • Warum die While-Schleife?
      Die Versionsnummer wird nur ein einziges mal abgefragt also brauchst du die Funktion updatecheck() auch nur ein einziges mal ausführen.An $VersionPath ändert sich im Verlauf des Skriptes ja nichts mehr.Falls das nicht gewollt ist und du ständig den Server abfragen willst - unbedingt noch ein entsprechend großes Sleep() mit in die Schleife bauen sonst machst du ein Rapid-Fire auf den Server ;)
    • Statt absoluter Pfade lieber die Pfade mit den Makros wie z.B. @ProgramFilesDir zusammenbauen.
    • Die Versionsnummer lieber in außerhalb des Skriptes in eine Ini-Datei o.Ä. schreiben weil dann kannst du diese gleich mit deiner exe updaten und dein Skript klappt auch noch bei späteren Versionen ohne das du im Skript die Nummer anpassen musst.
    • Momentan lässt sich das Skript nur beenden wenn eine neuere Datei gefunden wird.

    2 Mal editiert, zuletzt von AspirinJunkie (17. Juni 2015 um 11:15)

  • Der Script überprüft ob es eine neuere Version des Script's gibt.
    Falls es eine gibt lädt er diese herunter und startet danach die .jar.
    Die .jar ist eine Minecraft Modifikation der es Benutzern erlaubt mit ihren kostenlosen Konto auf meinem Server zu verbinden.
    Die .jar weiß nicht wo sich der Script befindet, da ich die .jar nicht bearbeiten kann und auch sonst kein Java programmieren kann :D
    Die .exe soll man von überall starten können, eventuell wird es auch einen Installer geben welcher die .exe in das selbe Verzeichnis wie die .jar legt und dann eine Verknüpfung auf dem Desktop erstellt.


    Zu den Fragen.
    Ich weiß nicht wie ich eine Func ohne eine GUI starte, außer sie befindet sich in einer While Schleife.

    Ich habe vergessen dass es @ProgrammFilesDir gibt xD

    Dann könnte man die Version aber ohne Probleme ändern und so Updates verhindern.

    Dies könnte daran dass keine .jar bei dir existiert.