@d7user: Meinst du nicht, daß 1000 Zeilen ein bissl viel sind?
Delphi-Quellcode:
uses
Math, IOUtils, ShellApi;
procedure TForm4.Button1Click(Sender: TObject);
const
URL = '
http://example.com/application.exe';
var
TempName, OldName, CurName:
string;
TempFile: TStream;
Error: HINST;
begin
CurName := Application.ExeName;
OldName := CurName + '
.old';
TempName := TPath.GetTempFileName;
IdHTTP1.Head(
URL);
if IdHTTP1.Response.LastModified <= TFile.GetLastWriteTime(CurName)
then
Exit;
// lokale Datei ist neuer
TempFile := TFileStream.Create(TempName, fmCreate);
try
IdHTTP1.Get(
URL, TempFile);
finally
Free;
end;
if TFile.Exists(OldName)
then
TFile.Delete(OldName);
TFile.Move(CurName, OldName);
TFile.Move(TempName, CurName);
Error := ShellExecute(Application.Handle,
nil, PChar(CurName),
nil,
nil, SW_SHOW);
if Error <= 32
then
RaiseLastOSError(Error);
Application.Terminate;
end;
Tja, und ab nun fangen die möglichen Probleme an.
- keine Verifizierung, z.B. ob die runtergeladene Datei defekt ist
- Schreibrechte? (ordentliche Anwendungen liegen in C:\Programme und da darf nicht jeder drin rumschreiben)
- Proxy? (Pech gehabt)
- es wird sich auf eine aktuelle Eigenart von lokalen Datenträgern verlassen, beim Austausch der Datei (mit Netzwerkpfaden geht es nicht)
- keine Prüfung ob alles korrekt ablief und auch kein Rollback bei Problemen, um ein Funktionierendes System nach dem Update zu haben
- kein Update/Konvertierung von irgendwelchen Dateienen, z.B. wenn sich in der neuen Version was ändert (die neue Version muß dann alle alten Daten ebenfalls verstehen = unnützer Anwendungscode, der nur einmal benötigt wird)
- usw.