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.....
; ***********************************************************; 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; ***********************************************************