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
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 & '"')
FileDelete(@TempDir & "\AutoIt-Tools-Updater.exe")
[/autoit]Und das eigentliche Programm zum Updaten:
Spoiler anzeigen
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"
If FileExists($UpdateFile) Then
$UpdateFileVersion = FileGetVersion($UpdateFile,"FileVersion")
If $UpdateFileVersion > FileGetVersion($AktiveFile,"FileVersion") Then
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
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