AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Software Launcher/Update Prüfer

Ein Thema von Luki206 · begonnen am 2. Dez 2013 · letzter Beitrag vom 4. Dez 2013
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 23:35
@d7user1

In der Programmierung arbeitet man (wenn man es richtig macht) mit Delegations.
(z.B. Owner bei TComponents, TObjectlist mit OwnsObjects, eine PrintKlasse, die eine bestimmte Instanz ausdruckt, ...)

Ändert sich etwas an der Daten-Klasse, dann passt man die Print-Klasse an und trotzdem bleibt der Aufruf gleich - schick.

Man kann sich gegen diese Delegations auch wehren und muss dann eine sehr aufwändige und umständliche Programmierung aufbringen, um eine Setup/Update-Routine zu haben, die auch zukünftige Szenarien abdeckt.

Oder man nimmt eine sehr einfache und simple Routine, die lediglich überprüft ob eine Aktualisierung vorliegt, und wenn, dann das Updatepaket liest und ausführt.
Diesem Updatepaket (joar ein Setup) ist es erheblich leichter beizubringen die alte Version auf den neuen Stand zu bringen. Man delegiert es eben.

Und ein Setup muss nicht umständlich sein, da man dieses auch silent (sichtbar ohne Benutzereingriff) oder very silent (gar nicht zu sehen) ausführen kann.

Und auch beim Setup können Dateien nachgeladen werden (wenn benötigt).

Somit kann man das gleiche Resultat erreichen, mit erheblich geringerem Aufwand und der Sicherheit auf jede mögliche Änderung reagieren zu können.

Jeder macht sich das Leben aber selber schwer, empfehlen würde ich deine Vorgehensweise aber nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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.
Ein Therapeut entspricht 1024 Gigapeut.

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

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Software Launcher/Update Prüfer

  Alt 3. Dez 2013, 01:25
Also mit wenigen Zeilen kann man Dateien von einem Webserver herunterladen:
Delphi-Quellcode:
uses ..., UrlMon;

function DownLoadInternetFile(const SourceUrl, DestFilename : String): Boolean;
const S_OK = 0;
begin
   Result := URLDownloadToFile(nil,PChar(SourceUrl),PChar(DestFilename),0,nil) = S_OK;
end;
Nachteile:
* Die Funktion blockiert während des Downloads
* kein Feedback während des Downloads (das liese sich aber noch mit einem IBindStatusCallback interface verbessern)
* läuft nur unter Windows
Vorteile
* extrem einfach und wenig Sourcecode
* benützt die Proxyeinstellungen der IE
* HTTPS funktioniert ebenfalls out of the box

Also ich würde mit dieser einfachen Methode beginnen und erst wenn der ganze Download & Update Prozess funktioniert auf eine andere Methode (z.B. Indy oder MSXML2 oder WinInet) umsteigen.

Noch ein Wort zu FTP:
Vergiss es einfach; das Protokoll hat gegenüber HTTP(S) zu viele Nachteile.
fork me on Github
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#4

AW: Software Launcher/Update Prüfer

  Alt 3. Dez 2013, 15:06
A propos Verifizierung, 1000 Zeilen usw.


All das ist in den vielen Zeilen enthalten. Verifizierungen aller Art, um auf möglichst viele Probleme reagieren zu können.

verzeiht Schreibfehler. Ich poste mit dem Handy.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz