![]() |
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:
Diese Datei wird nun runtergeladen. Danach gibts nun zwei Möglichkeiten:
<URL zur Datei>;<Dateigröße>;<Dateidatum>;<Ordner in den die Datei kopiert werden soll>
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? |
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. ;) |
Re: Idee für ein LiveUpdate
Ähm,
sorry, ich hab kein bisschen verstanden :oops: Kannst du mir das mal genauer erklären? |
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
![]() Ich hoffe, das war kurz und verständlich erklärt ;) |
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. |
Re: Idee für ein LiveUpdate
Vielleicht hilft die Komponente
![]() |
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. |
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. |
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. |
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? |
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. |
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:
|
Re: Idee für ein LiveUpdate
Zitat:
Zitat:
|
Re: Idee für ein LiveUpdate
Zitat:
Ganz kurz: auf einem Webserver legst du eine Info-Datei ab, die sollte in etwa so aussehen wie ![]()
Code:
VERSION ist die Version des Updates
[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. 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. ![]() Das ist eigentlich immer das Prinzip das Programme ausnutzen, wenn Updates runtergeladen werden. Eigenwerbung: wenn du mit ![]() |
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). |
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. :)
|
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. |
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:
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.
<update>
<file name="MeineExe.exe" version="2.0.0.0" md5sum="xdsslhsdkhsdlhsl122181298192ßsmnlksjdoo"/> </update> ![]() ![]() |
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:
|
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. |
Re: Idee für ein LiveUpdate
Zitat:
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