Update-Funktion

  • Hallo an alle,

    ich stehe momentan vor einem kleinen Problem.
    Ich entwickle gerade ein größeres Script, dass momentan noch ständig erweitert wird, ich es aber bereits auf unterschiedlichen Rechnern einsetze. (Ohne installiertes AutoIt)

    Ich habe jetzt über eine Updatefunktion nachgedacht, die mir das automatische Updaten ermöglichen soll.

    Ich stelle mir das so vor:

    Ich habe meine Installer.exe (Version 2.0)
    Diese schaut beim ausführen nach, ob die Datei https://autoit.de/www.test.de/Installer.exe auch die Version 2.0 hat (ich kann sie auch downloaden und mit FileGetVersion rausziehen)
    Falls diese Datei neuer sein soll, wird diese heruntergeladen und anstelle der alten ausgeführt.

    Ggf. wird die alte gelöscht/ersetzt/überschrieben etc...
    Wie ich das mache, dass sich die Datei selbst aktualisiert weiß ich noch nicht genau, eventuell nochmals in einer separaten Installer-Datei, das tüftel ich noch aus.

    Aktuell stehe ich vor dem Problem, dass ich die Dateiversion nicht ändern kann. Ich habe immer die Version "3.3.8.1" als Dateiversion stehen.
    Vielleicht kann mir hier jemand helfen oder hat mir noch einen Wink mit dem Zaunpfahl.
    Kann natürlich auch sein dass ich Einfach auf dem Schlauch stehe...

    Schonmal vielen dank im voraus!!!

  • Rechtsklick auf au3 -> Compile with Options ->Ressource Update -> FileVersion


    Dateiversion als solche kannst nicht so einfach ändern da hier die Version der Autoitinterpreters genommen wird.

    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.

  • Hi chip,

    ... sollte natürlich auch immer die aktuellste Version von AutoIt installiert haben, meine Version hatte das noch nicht drinnen ...

    wenn ich noch sage "Beta: 0.0.0.0" übernimmt er mir die Dateiversion so wie ich es haben will unter Resource Update.

    Stellt sich nur noch die Frage, muss ich die Datei vorher downloaden oder kann ich das mit einem online-abgleich finden?

    Edit:
    Vielen dank schonmal :)

  • Schreib doch einfach online in eine Ini-Datei die Version die Online ist. Im Forum gibts dazu schon einige Themen und fertige Scripte.

    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.

  • Hallo,

    ich habe nicht direkt eine Ini genommen, sondern einfach eine Text datei. in der ersten Zeile im Programm steht halt die Versions nummer. Ich arbeite mit einem Teamlaufwerk, es gibt keine autorisierung.

    Prüfen der Versions Version:

    [autoit]

    $fCurrentVer = FileReadLine($sharepfad & "version.txt")
    if $fCurrentVer > $sVersion then
    $VerCheck = MsgBox(4, "Update Vorhanden. " & $fCurrentVer, "Eine neue Version liegt auf dem Server bereit. Wollen Sie das Update jetzt durchführen?")
    Select
    Case $VerCheck = 6
    _update ()
    exit
    Case Else
    EndSelect
    Else

    [/autoit]

    _Update

    [autoit]

    Func _update($iDelay = 5)
    Local $sCmdFile
    FileDelete(@TempDir & "\callupdate.bat")
    sleep(2000)
    $sCmdFile = 'ping -n ' & $iDelay & ' 127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & ':copyloop' & @CRLF _
    & 'copy "'&$sharepfad&'programmname.exe" '&'"'& @ScriptDir &'\programmname.exe"' & @CRLF _
    & ' if not exist "'& @ScriptDir &'\programmname.exe" goto copyloop' & @CRLF _
    & '"' & @ScriptFullPath & '"'
    FileWrite(@TempDir & "\callupdate.bat", $sCmdFile)
    Run(@TempDir & "\callupdate.bat", @TempDir, @SW_HIDE)

    EndFunc

    [/autoit]

    Ich hoffe ich konnte helfen, bin eigendlich relativ neu in dem Geschäft bei Autoit.

  • Damit sollte es klappen, kann ich aber erst im Laufe der nächsten Woche prüfen, kann erst am Montag mein Passwort für meinen WebSpace suchen X(
    Werde aber das Ergebnis posten, ob es funktioniert.

    [autoit]

    ;Update-Programm

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

    Internet()

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

    FileInstall ("Pfad\Installer.exe", @Scriptdir & "\Installer.exe", 1) ;Entpackt die eigentliche Installationsroutine
    $D_Installer = InetGet ("www.test.de/installer.exe", @ScriptDir &"\Installer_temp.exe", 1, 1) ; Lädt die Online-Version herunter
    Do ;Wartet, bis die Datei heruntergeladen ist und führt dann das Script fort
    Sleep(250)
    Until InetGetInfo($D_Installer, 2)

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

    InetClose($D_Installer)
    $Lokal = FileGetVersion ("Installer.exe") ;Ließt die lokale Dateiversion ein
    $Online = FileGetVersion ("Installer_temp.exe") ;Ließt die Online-Dateiversion ein

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

    ;Prüft, welche Version die aktuelle ist.
    If $Lokal < $Online then ;Online-Version ist höher wie die aktuelle
    msgbox (1, "Update ist nötig", "Lokale Version wird aktualisiert")
    FileCopy ("Installer_temp.exe", "Installer.exe")
    EndIf
    If $Lokal = $Online then ;Lokale Version ist aktuell
    msgbox (1, "Update nicht nötig", "Lokale Version ist aktuell")
    FileDelete ("Installer_temp.exe")
    EndIf
    run ("Installer.exe") ;Führt das eigentliche Programm aus

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

    Func Internet() ;Prüft die Internetverbindung. Wenn diese nicht besteht, wird das Programm beendet.
    $ping = Ping("www.google.com", 1000)
    If $ping Then
    MsgBox(0, "Status", "Internetverbindung ok." & @CRLF & "Programm wird gestartet ", 2)
    Else
    MsgBox(0, "Status", "Internetverbindung wurde nicht hergestellt!" & @CRLF & "Die lokale Version wird ausgeführt.")
    Exit
    EndIf
    EndFunc

    [/autoit]
  • Also funktioniert jetzt genau so wie ich es will, hier ist das Script dazu.
    Einzige Verbesserung wäre noch, wenn ich die Version prüfen könnte, ohne die Datei herunter zu laden.

    [autoit]

    Func Update()
    $D_Installer = InetGet ("URL_zur_Datei", @ScriptDir &"\Installer_temp.exe")
    MsgBox (1, "Download fertig", "Download ist fertig") ; Lädt die Online-Version herunter
    $Lokal = FileGetVersion ("Installer.exe") ;Ließt die lokale Dateiversion ein
    $Online = FileGetVersion ("Installer_temp.exe") ;Ließt die Online-Dateiversion ein
    ;Prüft, welche Version die aktuelle ist.
    If $Lokal < $Online then ;Online-Version ist höher wie die aktuelle
    msgbox (1, "Update ist nötig", "Lokale Version wird aktualisiert")
    FileCopy ("Installer_temp.exe", "Installer.exe")
    msgbox (1, "Installer.exe", "Installer.exe wure aktualisiert.")
    run ("Installer.exe") ;Führt das eigentliche Programm aus
    exit
    EndIf
    If $Lokal = $Online then ;Lokale Version ist aktuell
    msgbox (1, "Update nicht nötig", "Lokale Version ist aktuell")
    FileDelete ("Installer_temp.exe")
    EndIf
    EndFunc

    [/autoit]