Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

AW: Software Launcher/Update Prüfer

  Alt 3. Dez 2013, 00:50
@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.
$2B or not $2B

Geändert von himitsu ( 3. Dez 2013 um 00:53 Uhr)
  Mit Zitat antworten Zitat