Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Idee für ein LiveUpdate (https://www.delphipraxis.net/38596-idee-fuer-ein-liveupdate.html)

Die Muhkuh 21. Jan 2005 15:10


Idee für ein LiveUpdate
 
Hi,

ich plane für mein Programm ein LiveUpdate zu machen. Meine Idee sieht wie folgt aus:

Es gibt ein extra Programm. Sobald man in diesem Programm auf "Nach Updates suchen" klickt, lädt das Programm eine Dateiliste herunter die nach folgendem Schema aufgebaut ist:

Code:
<URL zur Datei>;<Dateigröße>;<Dateidatum>;<Ordner in den die Datei kopiert werden soll>
Diese Datei wird nun runtergeladen. Danach gibts nun zwei Möglichkeiten:

1. Möglichkeit
Das Programm erstellt von eine Lokale FileList und ich prüfe per Pos() ob ein Eintrag vorhanden ist. Wenn nein -> Auf die Update list und dann runtergeladen.

2. Möglichkeit
Der String wird geparst, und es wird auf dem Rechner nach der Datei gesucht. Wenn die Datei gefunden wird und Datum und Größe stimmen nicht überein, kommt der String in die Updatelist. Wenn die Datei nicht gefunden wird, kommt der String auch in die Updatelist.

Wenn nun alle Dateien überprüft wurden, wird das ganze Zeugs runtergeladen.

Was haltet ihr von dem Konzept? Oder habt ihr was besseres?

Robert_G 21. Jan 2005 15:22

Re: Idee für ein LiveUpdate
 
Möglichkeit 3:
Du nimmst RunTime Packages und sorgst dafür, dass deine Echse nur einen leeren "Rumpf" darstellt. Sämtliche Klassen für UI und Logik hast du in den Packages.
Diese kannst du dann bei Bedarf entladen, ersetzen und neu laden. ;)

Die Muhkuh 21. Jan 2005 15:24

Re: Idee für ein LiveUpdate
 
Ähm,

sorry, ich hab kein bisschen verstanden :oops: Kannst du mir das mal genauer erklären?

Dax 21. Jan 2005 15:42

Re: Idee für ein LiveUpdate
 
Kurz: Dein "Programm" ist eine (odere mehrere) DLL(s), die von einem Miniprogramm geladen werden und deren Windowfunktionen ausgeführt wird (such mal nach Hier im Forum suchenrundll, könnte helfen ;)). Wenn du jetzt ein Update startest, kickt dein Programm die DLLs aus dem Speicher und nimmt stattdessen die neuen.

Ich hoffe, das war kurz und verständlich erklärt ;)

Robert_G 21. Jan 2005 15:42

Re: Idee für ein LiveUpdate
 
Na wenn du dich noch nie mit dynamisch geladenen Packages auseinandergesetzt hast, würde es jetzt zu lange dauern.
Da musst du also ( wie Tyler auch) warten, bis ich Zeit habe. ;)

p.s.: Was ich mich immer wieder frage: Warum zum Geier interessiert sich kaum ein Delphianer für die Möglichkeiten von Delphi?
Ich will dir jetzt nicht vorwerfen, dass du nur stupide mit dem Form designer arbeitest. Aber hat dich das Thema Packages noch nie interessiert? :shock:
Schließlich besteht die Delphi IDE selbst nur aus einer kleinen Anwendung, der Rest sind Packages, die statisch und dynamisch geladen werden.

Jelly 21. Jan 2005 15:44

Re: Idee für ein LiveUpdate
 
Vielleicht hilft die Komponente Internetupdate von meiner HP dir weiter.

kalmi01 21. Jan 2005 16:04

Re: Idee für ein LiveUpdate
 
Hallo Spider,

ich hab ein ähnliches Prob so gelöst:

1. auf Server liegt eine Liste.SRV mit allen zu installierenden
und zu de-installierenden Dateinamen.
Aufbau: Pfad inkl. Dateiname | Datum_Uhrzeit

Im Header steht nur: Datum_Uhrzeit wann die Liste erstellt wurde.

2. auf dem lokalen Rechnern liegt eine Liste.LOC, mit gleichem Aufbau wie Liste.SRV

Bei der Installation der Software wird Liste.SRV zu Liste.LOC kopiert.

Ein kleines Prg. ließt erste Zeile mit Datum_Uhrzeit aus Liste.SRV und Liste.LOC
Sind beide Strings nicht identisch, wird nun das "richtige" Update-Prg. aufgerufen.

Update-Prg. vergleicht beide Stringlisten von Liste.SRV und Liste.LOC miteinander.
Ist der Datum_Uhrzeit-String = 0, wird die entsprechende Datei gelöscht.
Sind die Datum_Uhrzeit-Strings von Liste.SRV und Liste.LOC nicht gleich und nicht 0,
so wird kopiert.

Am Ende wird noch Liste.SRV zu Liste.LOC kopiert.

shmia 21. Jan 2005 16:05

Re: Idee für ein LiveUpdate
 
Anstelle von Dateigrösse und Dateidatum wäre eine MD5 oder SHA1 Prüfsumme sinnvoll.
Das Dateidatum könnte sich durch versch. Zeitzonen oder durch die Sommer-/Winterzeit Problematik unterscheiden.
Die Dateigrösse ist kein sinnvolles Entscheidungskriterium.

Die Muhkuh 21. Jan 2005 16:11

Re: Idee für ein LiveUpdate
 
Hi,

@Robert, Dax

das ist mir doch ein bisschen zu aufwenig :stupid:

@Jelly

thx, ich gucke mir die mal an. Achso, ich kann mit FireFox die Datei nicht downloaden. Ging nur mit dem IE.

@kalmi

Das ist mir auch klar. Sowas hatte ich auch vor :stupid:

@shima

MD5 bzw. SHA1 ist auch keine schlechte idee.

Die Muhkuh 21. Jan 2005 16:18

Re: Idee für ein LiveUpdate
 
Hi Jelly,

ich hab mir deine Komponente angesehen, aber da es leider keine Dokumentation bzw. kleines Beispiel Programm gibt, versteh ich nicht ganz wie ich diese Komponente einsetzen soll. Wärst du so nett und schreibst mir ein kleines Beispiel, damit ich mal ein Grundgerüst habe?

yankee 21. Jan 2005 16:19

Re: Idee für ein LiveUpdate
 
andere idee:
Du rufst zunächst das PHP-Skript mit der Versionsnummer als Parameter auf. Das PHP-Skript prüft, ob neue Updates vorhanden sind. Wenn ja, packt es alle neuen Dateien/patches in ein zip-Archiv und gibt es zurück. Dann musst du nur noch installen.

EDIT: Mal so nebenbei: Es gibt da so eine Erfindung, die heißt csv. Aslo ich meine jetzt nicht csv-Dateien, sondern csv ist auch ein OpenSource-Projekt um Versionszeug zu managen. Das ist ganz schon umfangreich, deswegen habe ich ich damit nie wirklich genau auseinander gesetzt, aber ich glaube, das wurde dafür gemacht. Und es ist schon von hunderten Entwicklenr getestet. Vorallem Linux-Projekt sind häufig darauf aufgebaut.
Ich glaube csv kann noch vieeell mehr als nur Versionszeug.

Die Muhkuh 21. Jan 2005 16:24

Re: Idee für ein LiveUpdate
 
Hi,

dann hat man eine Zip die man entpacken muss. Find ich nicht so gut. Man startet einfach nur das Update drückt auf Updaten und das neue Zeugs ist da ;) So wäre es am besten.

Die Kompo von Jelly sieht sehr gut aus, aber wie gesagt ohne ein kleines Grundgerüst, weis ich nicht wie ich damit anfangen soll

[edit]
Zitat:

EDIT: Mal so nebenbei: Es gibt da so eine Erfindung, die heißt csv. Aslo ich meine jetzt nicht csv-Dateien, sondern csv ist auch ein OpenSource-Projekt um Versionszeug zu managen. Das ist ganz schon umfangreich, deswegen habe ich ich damit nie wirklich genau auseinander gesetzt, aber ich glaube, das wurde dafür gemacht. Und es ist schon von hunderten Entwicklenr getestet. Vorallem Linux-Projekt sind häufig darauf aufgebaut.
Ich glaube csv kann noch vieeell mehr als nur Versionszeug.
Soweit ich weis benötigt man ein extra Programm um das runterzuladen -> Kann ich dem Anwender nicht zumuten.

yankee 21. Jan 2005 16:34

Re: Idee für ein LiveUpdate
 
Zitat:

Zitat von Spider
Hi,

dann hat man eine Zip die man entpacken muss. Find ich nicht so gut. Man startet einfach nur das Update drückt auf Updaten und das neue Zeugs ist da ;) So wäre es am besten.

Wo ist das Problem? Dein Programm muss doch nur in der Lage sein ein zip zu entpacken. Das kann ja wohl auch automatisch direkt nach dem runterladen ausgeführt werden????
Zitat:

Zitat von Spider
Soweit ich weis benötigt man ein extra Programm um das runterzuladen -> Kann ich dem Anwender nicht zumuten.

Brauchst du nicht. Ich ahbe schon öfter mal aus Linux ganz normal per Browser sowas gedownloaded. Da hat man normalerweise entweder ein ftp-Odner oder ein Verzeichnis, in dem per .htacess der Inhalt reigegeben ist. Das kann man automatisch per Programm downloaden (normalerweise befindet sich a glaube ich sogar extra noch eine txt-Datei mit informationen, die man easy per prog auslesen kann). Nur du brauchst das.

Jelly 21. Jan 2005 17:12

Re: Idee für ein LiveUpdate
 
Zitat:

Zitat von Spider
Hi Jelly,

ich hab mir deine Komponente angesehen, aber da es leider keine Dokumentation bzw. kleines Beispiel Programm gibt, versteh ich nicht ganz wie ich diese Komponente einsetzen soll. Wärst du so nett und schreibst mir ein kleines Beispiel, damit ich mal ein Grundgerüst habe?

Das wollt ich immer schon mal machen...
Ganz kurz:
auf einem Webserver legst du eine Info-Datei ab, die sollte in etwa so aussehen wie diese hier

Code:
[VERSION]
Major=1
Minor=1
Release=3
Build=41

[SETUP]
URL=http://www.tp-soft.de/downloads/shareware/ReMaSetup11341.exe
Username=
Password=

[WHATS NEW]
L0=Machinenabhängige Lizenz rausgenommen
D0=War mir zu heikel, das Ganze nachher zu verwalten
L1=Detaillierte HTML Beschreibung für jedes Projekt
D1=Es kann jetzt für jedes einzelne Projekt eine sehr detaillierte Beschreibung im HTML Format angegeben werden. Somit soll es ermöglicht werden, für jedes Produkt diese Informationen auf einer getrennten Webseite darzustellen.
VERSION ist die Version des Updates
SETUP liefert dir den Link
WHATS NEW liefert dir, was alles neu ist, L.. kurze Beschreibung, D... detailliert (nicht zwingend)


In der Kompo muss du auf diese File (inkl. http://blabla) verweisen. Ansonsten noch einige Properties setzen, und Execute aufrufen. Die wichtigsten Properties sind das Angeben der aktuell laufenden Version. Entweder manuell, oder automatisch die in deiner Anwendung definiert ist, falls du eine definiert hast. C'est tout. Standardevents fürs Einfache, oder eigene (defaultevents=false).

Das ist eigentlich immer das Prinzip das Programme ausnutzen, wenn Updates runtergeladen werden.

Eigenwerbung: wenn du mit REMA arbeitest, das erstellt dir diese INFO File automatisch als PHP Skript und in Verbindung einer MySQL Datenbank. Im Programm definierst du nur noch deine Releases und was neu drin ist. Schaltest du ein Release frei, wird die Info File gleich mit angepasst.

Die Muhkuh 22. Jan 2005 09:17

Re: Idee für ein LiveUpdate
 
Hi Jelly,

wie sieht das mit mehreren Dateien aus?

Ich hab ja nicht nur eine Exe upzudaten sondern auch noch eine bzw. mehrere DLL(s).

MathiasSimmack 22. Jan 2005 09:53

Re: Idee für ein LiveUpdate
 
Im DF treibt sich (in der Sparte "Internet", AFAIR) eine XML-Lösung herum. Auf deinem Server lagert eine XML-Datei, die ja durchaus mehrere Dateinamen und ihre Versionsnummern und meinetwegen auch Prüfsummen usw. enthalten kann. Dein Live Update greift auf diese XML-Datei zu (mit MS-XML bspw. direkt über die URL ohne die Datei vorher extra runterladen zu müssen), liest sie aus und vergleicht die gelisteten Dateien mit den lokal installierten. Den Rest (runterladen -> austauschen bzw. ggf. nach Neustart austauschen) müsstest du dann hinbekommen. :)

Die Muhkuh 22. Jan 2005 09:59

Re: Idee für ein LiveUpdate
 
Hi Mathias,

das runterladen an sich ist kein Problem (wie du schon sagtest), das Problem ist, wie ich überprüfe ob die Datei auf dem Server neuer ist, als die lokale.

Ich werde mal im DF gucken.

MathiasSimmack 22. Jan 2005 10:09

Re: Idee für ein LiveUpdate
 
:wiejetzt:

Habe ich doch gesagt, die XML-Datei enthält den Namen der aktualisierten Datei, meinetwegen die Versionsnummer und die Prüfsumme, die hier im Beitrag schon von irgendwem angesprochen wurde. Diese Prüfsummen sind doch meist auch bloß Strings, oder? Kann doch dann rein. Meinetwegen so was wie
Code:
<update>
  <file name="MeineExe.exe" version="2.0.0.0" md5sum="xdsslhsdkhsdlhsl122181298192ßsmnlksjdoo"/>
</update>
Die Prüfsumme habe ich mir ausgedacht. :stupid: Wollte nur das Prinzip zeigen. Dein Updateprogramm muss lediglich die Routinen zum Vergleichen beinhalten; sprich: Datei suchen, evtl. Versionsnummer vergleichen, aber auf jeden Fall die Prüfsumme vergleichen.

Hier ist der Beitrag übrigens. Interessant wird es hier, wenn ich mal so sagen darf. :mrgreen: Ich muss mal gucken ob ich das Projekt noch habe, dass ich dem Beitragersteller im DF damals zur Verfügung gestellt habe. War ein einfaches Beispiel, das die Versionsnummer verglich, AFAIR. Wenn ich es finde, willst du es dann haben?

Die Muhkuh 22. Jan 2005 10:12

Re: Idee für ein LiveUpdate
 
Hi Mathias,

ich hab dich schon verstanden was du willst :Stupid:

Ich hab nur nochmal konkret gesagt, wo das Problem nun liegt.

Ich werde mir den Beitrag nochmal zur Gemüte führen.

Zitat:

Wenn ich es finde, willst du es dann haben?
Da fragst du noch? Klar doch :)

MathiasSimmack 22. Jan 2005 10:27

Re: Idee für ein LiveUpdate
 
Na, hoffentlich bist du jetzt nicht enttäuscht, denn ich finde es nicht mehr :oops: Aber so schwer war das auch gar nicht. Und wenn du keine Ahnung von XML hast, ... nun ja, hier soll es eine eigene Sparte dafür geben ... habe ich gehört. :mrgreen:

Aber ernsthaft: Wie du bspw. URL und Version eines Programms ausliest, siehst du ja auch in dem DF-Beitrag. Nach dem gleichen Muster könnte man auch den Prüfsummenstring laden, und damit hättest du alles zum Update zusammen, denke ich.

Jelly 22. Jan 2005 13:15

Re: Idee für ein LiveUpdate
 
Zitat:

Zitat von Spider
wie sieht das mit mehreren Dateien aus?

Ich hab ja nicht nur eine Exe upzudaten sondern auch noch eine bzw. mehrere DLL(s).

Ist bisher noch nicht vorgesehen. Aber in dem Punkt werde ich das Programm Rema eh noch ausbauen, und dann kommt auch so eine Funktion mit rein. Dürfte wohl nicht allzu kompliziert werden.

Du kannst dir aber zur Zeit damit Abhilfe schaffen, indem du deine Updatedateien alle in ein ZIP File steckst, und dann nach dem Runterladen entsprechend entpackst. Nur hast du dann halt immer den großen Traffic, da du unter Umständen DLLs mitrunterlädts, die auf deinem System bereits aktuell sind.

Aber wie gesagt, im Februar werd ich wohl zum Ausbau von Rema, und somit auch der Update Komponente, kommen. Bis dahin spiel ich noch mit meinen Photonen rum :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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-2025 by Thomas Breitkreuz