Hallo Leute,
ich hab die letzten Tagen an einer DLL gebastelt, mit der sich auf einfache Art und Weise ein Programm updaten lässt. Die DLL besteht aus einer einzelnen Funktion
MyUpdate, die von einem Server eine Ini-Datei herunterlädt, ausliest und danach die gewünschten Optionen ausführt.
Um es gleich vorweg zu nehmen: Es existiert gerade die erste Version, die nur auf meinen speziellen Gebrauch zugeschnitten ist und deshalb nur einen sehr begrentzen Funktionsumfang besitzt:
- Ini-Datei herunterladen.
- Programm herunterladen.
- Programm starten.
- Fortschrittsdialog
Wer sich also nicht bemühen möchte ein extra Formular für die Updatefunktion herzustellen, der kann diese DLL mit nonVCL Formular benutzen.
Die DLL ist gerade einmal 26kb groß und
benötigt natürlich eine Internetverbindung.
Die nonVCL-Grundlagen habe ich mir durch Luckies Tutorial im Schnellkurz angeeignet, kann sein dass ich da noch handwerkliche Fehler begangen habe.
Im Allgemeinen gilt: Fehler und Vorschläge sind gerne erwünscht, auch die Erweiterung ist gerne möglich, bitte stellt sie aber uns alle zur Verfügung, ganz gemäß dem Grundgedanken von Open Source.
Das ist auch der Grund warum ich diese DLL veröffentliche: Vielleicht hat ja jemand sowas gesucht und möchte es jetzt erweitern, ein kleines Stück ist ja schon geleistet.
Download:
private.hippieclan.net/update_dll.zip.
So nun aber endlich ein einfaches Beispiel, es ist die Unit
UpdConst.pas einzubinden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var AData: PUpdateSettings; begin New(AData); AData^.UpdateMode := upmCheck; AData^.DownloadURL := 'http://private.hippieclan.net/update.ini'; AData^.ProgramName := 'Rep-Ex'; AData^.CurrentVersion := 0; AData^.MainHandle := 0; AData^.CallBackFunc := nil; AData^.CallBackData := nil; AData^.WindowSettings := nil; AData^.StartUpdate := True; AData^.FreeMemory := True; UpdateDoUpdate('update.dll', AData); |
So, nach Aufruf wird nun die Version überprüft und die Datei heruntergeladen und aufgerufen, dass ganze mit Dialog.
Wenn man kein Dialog oder die Position ändern möchte, gibt es dafür die
TWindowSettings:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| PWindowSettings = ^TWindowSettings; TWindowSettings = packed record ShowWindow: Boolean; CloseWindowWhenFinished: Boolean; X, Y: Integer; end; |
Um diese zu benutzen, einfach ein Record mit
New erstellen und
AData^.WindowSettings zuweisen.
Zu guter Letzt kann man den ganze Vorgang durch eine CallBack-Funktion kontrollieren. Diese sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| UPDATE_START = 1; UPDATE_WINDOW_CREATE = 2; UPDATE_CONNECT_INTERNET = 3; UPDATE_DOWNLOAD_TEMPFILE = 4; UPDATE_DOWNLOAD_FILESIZE = 5; UPDATE_DOWNLOAD_START = 6; UPDATE_DOWNLOAD_PROGRESS = 7; UPDATE_DOWNLOAD_FINISHED = 8; UPDATE_READ_SETTINGS = 9; UPDATE_GET_FILE_COUNT = 10; UPDATE_FOUND_VERSION = 11; UPDATE_ABORT = 12; UPDATE_ERROR = 13; UPDATE_WINDOW_CLOSE = 14; UPDATE_WINDOW_DESTROY = 15; UPDATE_FINISHED = 16; UPDATE_END = 17; UPDATE_CHECK_VERSION = 0; UPDATE_DO_UPDATE = 1; |
Der Rückgabewert entscheidet, ob die Operation fortgeführt wird (True) oder abgebrochen wird.
Und zu guter letzt ein Einblick in die Inidatei auf dem Server:
Quelltext
1: 2: 3:
| [program] version=1 file=URLTOFILETODOWNLOAD |
Mehr wird bald kommen, hoffentlich

!
So, soviel mal fürs erste. Ich hoffe ihr unterstützt mich!
Version 0.2:
Quellcode komplett überarbeitet und auch getestet. Konstanten umbenannt und hinzugefügt. Die nötigen Konstanten und Types befinden sich in einer eigenen Unit und die UpdateFunktion ruft die DLL nun dynamisch auf!
Gruß Hape!
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.