AutoIt Tools Updater

  • Nabend da ich berufsbedingt mir das ein oder andereTool gebastelt habe,
    habe ich immer das Problem auf den zig vmwares die aktuelle Version von dem einen oder anderen tool zu haben.
    Also habe ich mir etwas gebastelt was so für alle Programme funktioniert.

    Ablauf:
    Das eigentliche Programm entpackt diese Exe nach %tmp% und wird startet.
    Das Programm bekommt als Übergabeparameter, den Programmnamen, das Verzeichnis wo es läuft und den Orginalnamen falls ein Kollege es sich umbenannt hat. :)
    Anhand der Pfadhinterlegung aus der Ini vom Programm1 + Orginalfilname wird dann geprüft ob eine neure Version verfügbar ist.
    Falls ja wird man gefragt ob es getauscht werden soll. Programm1 beendet sich sich und wird ersetzt danach wieder gestartet
    Falls nein: Updater bendet sich und wird entfernt.

    Inhalt der Ini vom zu aktualisierenden Programm

    Spoiler anzeigen

    PrgUpdate=0
    UpdateDir="\\svr-ad-01\Tools\ODBC-Generator\"

    Aufruf aus dem zu aktualisierenden Programm

    Spoiler anzeigen
    [autoit]

    If Not FileExists(@TempDir & "\AutoIt-Tools-Updater.exe") Then FileInstall("C:\AutoIT_SVN\Eigene Scripte\Dietmar\AutoIt-Tools-Updater\AutoIt-Tools-Updater.exe", @TempDir & "\AutoIt-Tools-Updater.exe")

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

    $UpdateDir = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","UpdateDir","")
    If $UpdateDir <> "" And IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","PrgUpdate",0) = 1 Then RunWait(@TempDir & '\AutoIt-Tools-Updater.exe "' & $Script_Dir & '" "' & @ScriptName & '" "' & $UpdateDir & '"')

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

    FileDelete(@TempDir & "\AutoIt-Tools-Updater.exe")

    [/autoit]

    Und das eigentliche Programm zum Updaten:

    Spoiler anzeigen
    [autoit]

    If $CmdLine[0] = 0 Then
    MsgBox(4096,"Info:","Das Programm dient zur Programmaktualisierung und " & @CRLF & "kann ohne Übergabeparameter nicht gestartet werden.")
    Else
    $AktiveFile = $CmdLine[1] & $CmdLine[2]
    If FileExists($AktiveFile) Then
    $OrgFilename = FileGetVersion($AktiveFile,"ProductName")
    $UpdateFolder= $CmdLine[3]
    If StringRight($UpdateFolder,1) <> "\" Then $UpdateFolder &= "\"
    $UpdateFile = $UpdateFolder & $OrgFilename & ".exe"

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

    If FileExists($UpdateFile) Then
    $UpdateFileVersion = FileGetVersion($UpdateFile,"FileVersion")
    If $UpdateFileVersion > FileGetVersion($AktiveFile,"FileVersion") Then

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

    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(1,$OrgFilename & " - Update Programm","Es steht eine neue Version (" & $UpdateFileVersion & ") zur Verfügung. " & @CRLF & "Möchten Sie das Programm jetzt aktualisieren?")
    Select
    Case $iMsgBoxAnswer = 1 ;OK
    If ProcessExists($CmdLine[2]) Then
    ProcessClose($CmdLine[2])
    ProcessWaitClose($CmdLine[2],2)
    FileCopy($UpdateFile,$AktiveFile,1)
    Run('"' & $AktiveFile & '"')
    EndIf
    Case $iMsgBoxAnswer = 2 ;Cancel
    EndSelect
    Else
    EndIf
    Else
    MsgBox(4096,"Info:","Das Programm dient zur Programmaktualisierung." & @CRLF & 'Kein Update gefunden,ist "' & $CmdLine[3] & '" erreichbar? ')
    EndIf
    Else
    MsgBox(4096,"Info:","Das Programm dient zur Programmaktualisierung." & @CRLF & "Falscher Übergabeparameter, es erfolgt kein Update.")
    EndIf
    EndIf
    Exit

    [/autoit]

    Damit der OrginalName ausgelesen werden kann bedarf es noch einem Eintrag wie diesem

    [autoit]

    #AutoIt3Wrapper_Res_Field=ProductName|ODBC-Generator

    [/autoit]


    in dem au3 File von dem Programm was man updaten möchte.

    Viel Spass damit
    Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (14. November 2010 um 20:45)