• Hallo!

    Ich musste zur Wartungszwecke ein Programm vom mir erweitern das sich selbst updaten kann oder zumindest den Benutzer darüber informiert das es eine neu Version verfügbar ist und diese Installiert werden kann.

    Jetzt wollte ich nicht ein zweiten Programm machen das den Hauptteil dann updatet sondern es sollte ein ausführbares Programm bleiben. In vielen Firmen wird aber Applocker eingesetzt und verbiedet zum Beispiel die Ausführung von Batch-Scripts (oder VB,...). Trotzdem kann man das machen.

    Ich bitte mal gleich um Entschuldigung das die Funktion etwas "unaufgeräumt" ist, aber Weihnachten steht vor der Türe und ich muss den Weihnachtsmann noch ein bisschen unterstützen ;)

    In neinem Fall wird das von dem FS aufgerufen, aber es kann auch von einen Webserver zuerst ein Download durchgeführt werden und dann lokal das Update durchführen. Was halt so jeder braucht....

    Wichtig ist nur die Zeile:

    run ('cmd /c ping 127.0.0.1 /n 2 & copy /y ' & $update_program & ' ' & @ScriptFullPath & ' & start ' & @ScriptFullPath , "", @SW_HIDE)

    gefolgt von einen Exit

    lg

    Racer

    PS: nach den Feiertagen räume ich den Code auf.....

    AutoIt
    ; ***********************************************************; Selbstupdate; Übergabe: Updatesourepfad; Übergbae: autoupdate - Meldung (damit nicht bei jedem Start "Sie haben bereits die aktuelle Version" kommt; Rückgabe: -1 Update wurde nicht gefunden (Pfad/Datei nicht vorhanden, Zugriff nicht möglich...); ***********************************************************Func _Selfupdate($source, $autoupdate = False)	Local $update_program = $source & @ScriptName                                                                    ;full Path	Local $ret                                                                                                        ;Arbeitsvariablen	Local $file_version                                                                                                ;Welche Versionsnummer steht im INI-File	If $test = True Then                                                                                            ;Nur für die Entwicklung damit ein Update simuliert werden kann		$update_program = $source & "msvpn_monitor.exe"	EndIf	$ret = FileExists($update_program)                                                                                 ;gibt es das Programm überhaupt und/oder ist das Share erreichbar ?	If $ret <> 1 Then                                                                                                ;1 OK, alles andere schlecht		If $test = True Then			Print("Datei " & $update_program & " wurde nicht gefunden!")		Else			;echo ("Datei " & $update_program & " wurde nicht gefunden!")												;Momentan einfach nichts machen....			Return -1		EndIf	EndIf	$file_version = FileGetVersion($update_program)                                                                 ;Fileversion einlesen	If $test = True Then		print($update_program & @TAB & $file_version)		print("aktuelle Programmversionsnummer:" & @TAB & $version)		print("$autoupdate: " & $autoupdate)	EndIf	$ret = _VersionCompare($file_version, $version)                                                                 ;Vergleich der Versionsnummern	Select		Case $ret = 1			$ret = MsgBox(1, "Programmupdate", "Möchten Sie auf die Version V" & $file_version & " updaten?", 15)			If $ret = 1 Then                                                                                        ;Wenn OK geklickt worden ist				If @Compiled = 0 Then					print('cmd /c ping 127.0.0.1 /n 2 & copy /y ' & $update_program & ' ' & @ScriptFullPath & ' & start ' & @ScriptFullPath)				Else					Run('cmd /c ping 127.0.0.1 /n 2 & copy /y ' & $update_program & ' ' & @ScriptFullPath & ' & start ' & @ScriptFullPath, "", @SW_HIDE)      ;Selfupdate					Exit                                                                                            ;Programm muss beendet werden damit es kopiert werden kann -> Automatisch wieder starten				EndIf			EndIf		Case $ret = -1			If $autoupdate = True Then				MsgBox(1, "Programmupdate", "Gratuliere, Sie haben eine aktuellere Version als ich ;-)", 10)			EndIf			Return		Case $ret = 0			If $autoupdate = True Then				MsgBox(0, "Programmupdate", "Sie haben bereits die aktuellste Version", 10)			EndIf			Return	EndSelectEndFunc   ;==>_Selfupdate; ***********************************************************

    2 Mal editiert, zuletzt von Racer (26. Dezember 2022 um 14:53)