Re: TWebUpdate - eine neue WebUpdate-Komponente
Es wäre auch noch schön, wenn man eine Verzeichnisstruktur komplett updaten könnte, ohne alle einzelnen Dateien anzugeben.
Das würde die Arbeit bei vielen Dateien ernorm vereinfach. Einfach in der Ini einen Ordner auf dem Webspace angeben, der dann komplett mit der Struktur geupdatet wird. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Und ich glaube ich habe noch einen Bug gefunden.
Wenn ich den Neustart nach einem Update aktiviere, dann wird weder der WepUdateDateien-ordner gelöscht noch die Batsch datei. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hi Assertor,
Zitat:
I IdCompilers.inc wird bei mir Indy90 definiert. Aber mein Compiler meckert ... Hier mal ein Auszug aus der Unit, wo's knallt:
Delphi-Quellcode:
In Indy9 kommt hier vor dem aWorkCount ein const, in Indy10 ist das weggefallen. Also müßte, ..., es ja eigentlich klappen.
uses
classes, IdComponent, IdHTTP, IdGlobal; type TOnWorkEvent = procedure(Sender: TThread; AWorkCount: Integer) of object; TDownloadThread = Class (TThread) private procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; {$IFDEF Indy90} const {$ENDIF} AWorkCount: Integer); ... Irgend 'ne Idee, warum es das nicht tut? Freundliche Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
Ist ja nicht besonders schwer. Einfach ein OnDownloadStartEvent, dass die Gesamtgröße mitgibt. gruß |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Huhu Diamondback2007,
Ich weiß nicht, ob ich die nächsten Tage dazu komme. Vielleicht kannst du, wenn du magst, die geänderte Version posten, dann nehm' ich das mit rein? Ich hänge noch an diesem Downloadfortschritt und diesem Indy9 Indy10 blödsinn! Viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
ich hab mir mal den Quellcode angeschaut und ihn wie folgt geändert:
Delphi-Quellcode:
Die gleiche Änderung natürlich auch noch bei der Procedure selbst. Mit diesen Änderunge compiliert mein Delphi 7 (mit Indy 10) den Code ohne Probleme.
unit WebUpdateThread;
{$i WebUpdate.inc} // hier das Indy-Def gelöscht {$i IdCompilerDefines.inc} // hier wird die Indy Version definiert // Indy 9 = INDY90 und Indy 10 = INDY100 ! procedure InternalOnWork(Sender: TObject; AWorkMode: TWorkMode; {$IFDEF INDY100} AWorkCount: Int64 {$ELSE} const AWorkCount: Integer {$ENDIF} ); |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Soweit ich weiß oder gesehn habe ist es doch so, dass beim start eines Downloades die Gesamtgrößemitübergeben wird oder?damit ließe sich das machn.
Aber ich kann gern mal sehen was ich hinbekomme. Auf Indy 9 müsstest du das aber dann umbauen, hab nur 10. Sollte aber dann ja nicht so schwer sein. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hi Fylo,
genauso, wie du es oben beschrieben hast, hab ich's auch versucht. Dann ist's irgendein fehler im Setup von Indy oder sonstwo. Eine Frage noch: Ist bei dir der SourcePath mit im Suchpfad von Delphi angegeben? In welchem Verzeichnis liegt bei dir die IdCompilerDefines.inc? Bei mir liegt die im source-Verzeichnis und dhain führt kein Suchpfad. Ich denke, da liegt der Fehler. Viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
So, ich glaube jetzt habe ich den Fortschritt fertig. Muss nur noch ein bischen testen.
Was mir aber noch aufgefallen ist, ist dass wenn eine Datei die heruntergeladen werden soll, nicht vorhanden ist, es einen 404 Error gibt. Das sollte man abfangen und schöner machen. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich denke das sollte klappen.
Ich hab die Units mal angehangen. Zusätzlich noch ein Formular bei dem man die Verwendung sieht. Achja auf dem Formular die Komponente pbLoading ist eine extra Komponente aber natürlich durch jede Progressbar ersetzbar. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
ich nutze die Subversion-Version von Indy 10. Bei dieser ist die Datei IdCompilerDefines.inc in den Unterverzeichnissen Core, System und Protocols enthalten. Diese drei Verzeichnisse sind bei mir in meinem Delphi 7 auch im Suchpfad eingetragen. Ich weiß aber nicht mehr, ob dass das Indy-Setup gemacht hat oder ob ich es selber gemacht hab :gruebel: |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hallo Marco,
nach anfänglichen Problemen funktioniert nun auch bei mir alles wunderbar! Wie wäre es aber noch mit einer Möglichkeit, dass bspw. in ein Edit-Feld eintragen kann, welche Dateien bereits heruntergeladen wurden? Oder irgendwie anders kenntlich machne, dass der Download noch läuft? ;) |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hallo Listers,
Es gibt, mal wieder, ‚ne neue Version: Neuerungen in TWebUpdate V1.10.0 vom 01.07.2008: Als erstes möchte ich mich für das kommende im voraus entschuldigen. All diejenigen, die TwebUpdate bereits eingebunden haben, müssen nämlich ein paar Zeilen code ändern, denn: TWebUpdate, jedenfalls der Code und die Info-Datei, sind ab sofort in englisch. Die englische Doku läßt noch ein wenig auf sich warten. Aber keine Angst, es wird nicht wieder deutsch, also wer jetzt ändert, braucht das nicht nochmal machen. ;-) Das heißt: die eigenschaften bleiben gleich, SucheNachUpdates ist zu CheckForUpdates geworden, und die ereignisse entsprechen allesamt dem Standard. Als weiteres gibt es eine Fehlerbehandlung (OnError), die verschiedene Fehlercodes interprätieren kann. Bitte auch das Demo und TwebUpdate.pas hierzu anschauen. Ein herzliches Dankeschön an DiamondBack2007 für die Erstellung eines Zählers, der es ermöglicht, die Größe aller herunterzuladenden Dateien zu bestimmen. Auf die anderen Vorschläge gehe ich gesondert ein, kann ein, zwei Tage dauern. Das Demo wird auch nochmal erweitert, – damit es ein bißchen aussagekräftiger wird. Viel Spaß mit der neuen Version und immer her mit Ideen, Lob, Kritik und sowas! Einen schönen Abend! Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hier sind bestimmt noch Units drin, die nicht gebraucht werden (z.B. Graphics, Controls)
Delphi-Quellcode:
Und noch ne Idee:
unit WebUpdate;
interface {$i WebUpdate.inc} // Diverse Compilerschalter. // bitte dringend überprüfen, ob diese euren Anforderungen gerecht werden., uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Man sollte die Update-Komponente vom Downloader trennen. Soll heisen, es wäre gut, wenn man Indy ganz einfach durch etwas anderes austauschen könnte. Der Downloader hat ja nicht anderes zu tun, als eine URL herunterzuladen und in einer best. Datei abzulegen. Dabei soll er aber nach Möglichkeit OnProgress Event unterstützen, damit man ggf. eine ProgressBar ansteuern kann.
Delphi-Quellcode:
Davon könnte man konkrete Klassen ableiten: TIndy9Downloader, TIndy10Downloader und TSimpleDownloader.
TDownloader = class(TObject)
public procedure DownloadURL(const URL, DestFilename : string); virtual; property OnProgress: TProgressEvent; end; TSimpleDownloader benötigt kein Indy, sondern verwendet die Funktion URLDownloadToFile aus Unit UrlMon. Dafür kann der TSimpleDownloader keine ProgressEvents erzeugen; aber das kann man verschmerzen. Wenn ein Downloader eine URL nicht runterladen konnte, dann wirft er eine Exception. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
*** Vorherigen Satz bitte vergessen (falls gelesen)! Hab meine INI nicht bearbeitet. :wall: ***
Ich wollte mal gerne wissen, an welcher Stelle ich 'AllFileSize' anwenden kann. Denn bisher bekomme ich (Prozedur 'UpdateFound') nur eine 0 ausgegeben. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
Läßt du das Proggi unter der IDE laufen, so daß die Delphi-Exceptions ausgelöst werden? Zitat:
Schau dir mal die prograssbar im Demoprogramm an. Viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
Zitat:
Kann man eigtl. 2 Dateien nach dem Update starten lassen? (z.B. Programm und Readme) Ich habe mal testweise bei zweien das Attribut 'Start' auf '1' gesetzt, allerdings wird nur die erste geöffnet. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Wenn ich ein neues PAckage mache und die 3 units einfüge und es dann installieren will bekomme ich nen error:
requires vclx, vcl, rtl; was muss ich da machen? wo bekomme ich diese dateien her? MfG Pif |
Re: TWebUpdate - eine neue WebUpdate-Komponente
/edit: Sry, hab mich verlesen. Ich sollte jetzt echt mal ins Bett gehen. ^^
|
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hey,
also erst mal finde ich es super, dass jetzt alles in Englisch ist :) :thumb: Ich bin gerade dabei einen UpdateCreator zu erstellen, wenn der fertig, kann ich den ja hier mal posten. Als Anregungen. Du könntest noch implementieren, dass auf dem Server Ordner mit den einzelnen Dateien liegen. Diese würden dann genauso heißen wie später nach dem Download. Du würdest also praktisch die gesamte Ordnerstruktur auch auf dem Server haben. Das schafft Ordnung. Und wenn du Lust hast, könntest du auch noch eine Backupmöglichkeit einbauen. Bei einem neuen Update könntest du die zu ersetzenden Dateien einfach in einen Backupordner kopieren und bei Bedarf wiederherstellen. gruß |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
requires vclx, ... Willst du denn wirklcih 'n neues Package machen, oder die Kompo im Borland-Anwenderkomponenten-Package installieren, das Delphi schon mitbringt? Was für'n Delphi und Indy fährst du? Viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
JO da steht
requires vclx, vcl, rtl; Ich habs bis jetzt immer so installiert. datei-> neu -> package dann die units rein dann das package installiert. fertig. Ich bin net sod er delphi experte, deshalb kenn ich nur den weg. Ich hab delphi 2007 und glaub indy10 |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab die Komponente jetzt bei mir in einem Projekt ausprobiert.
Alle anderen Update-Lösungen waren mir zu aufwendig oder zu kostspielig. Also Danke Marco Zum Erstellen der Info-Datei habe ich mir ein kleines Tool geschrieben. Bitte testen. Exe benötigt keine Installation, Source ist beigefügt. Marco: Kannst du der Komponente einen individuelleren Namen geben. "TWebUpdate" wird von mehren anderen Herstellen auch verwendet und Delphi meckert daher bei jeder Installation. Ich nenne sie immer in TDPWebUpdate um (DP=DelphiPraxis) |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
Naja okay dann lade ich mal meinen Update Creator hoch.
Man muss nur die Dateien auswählen und evtl. noch den Pfad einstellen und dann wird die Info-datei erzeugt und alles auf einen FTP-Server hochgeladen. Mit Doppelklick auf eine Datei in der Liste kann man noch mal den Pfad ändern und angeben ob die Datei Start=1 bekommt. Ihr müsst nur in der Settings.ini noch eure FTP-Daten eintragen. |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
das mach ich auch immer so. Ich hab in der Unit WebUpdate.pas in der Uses-Anweisung nach Implementation die Unit FileCtrl gelöscht und man braucht kein vclx mehr. :thumb: |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Zitat:
|
Re: TWebUpdate - eine neue WebUpdate-Komponente
Delphi-Quellcode:
[DCC Fehler] WebUpdateThread.pas(49): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich
fIdHTTP.OnWork := InternalOnWork;
selbes Problem wie früher schon einmal. taucht wieder auf ... :/ |
Re: TWebUpdate - eine neue WebUpdate-Komponente
huhu,
Zitat:
{$DEFINE Indy10} Du mußt also den Punkt forne wegnehmen, dann sollte es klappen. Viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Funktioniert =) DANKE
MfG |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Ich habe einen Wizard mit der Komponente gebastelt und dabei immer Fehlermeldungen bekommen.
Nach ca. zwei Stunden probieren und Scheuklappen vor den Augen habe ich den Fehler gefunden: Fehler: Ich hab die Methode CheckforUpdates 2x aufgerufen (wurde benötigt um im Wizard die Seiten zu wechseln und eine Fortschrittsanzeige zu realisieren. Beim Ermitteln von AllFileSize und beim Download gabs dann Fehlermeldungen. Ursache: fFiles enthielt mehr Dateien als in der Steuerdatei angegeben (und zwar am Ende mit leeren Dateinamen). Da es Leernamen waren griff die Fehlerroutine nicht. Lösung: fFiles muß beim Aufruf von CheckforUpdates geleert werden. Hier der Code dazu:
Delphi-Quellcode:
Jetzt funktionierts prima.
procedure TWebUpdate.CheckForUpdates;
... ini := TIniFile.Create (fTempDir + IniName); ma := ini.ReadInteger ('Version', 'Major', 0); mi := ini.ReadInteger ('Version', 'Minor', 0); re := ini.ReadInteger ('Version', 'Release', 0); bu := ini.ReadInteger ('Version', 'Build', 0); SetLength (fFiles,0); // <-- Diese Zeile neu eingefügt SectionCount := 1; FileCount := 0; while Ini.SectionExists ('File'+null(SectionCount, 3)) do begin s := ini.ReadString ('File'+null(SectionCount, 3), 'Name', ''); if LinkExists (fUpdateURL + s) then begin SetLength (fFiles, Length(fFiles)+1); with fFiles[FileCount] do begin name := s; Path := ini.ReadString ('File'+null(SectionCount, 3), 'Path', ''); if ((Path <> '') and (copy (Path, Length(Path)-1, 1) <> '\')) then Path := Path + '\'; if fStartname = '' then if ini.ReadBool ('File'+null(SectionCount, 3), 'Start', false) then fStartname := name; end; FileCount := FileCount + 1; end else if Assigned (OnError) then OnError (self, TWU_FileNotFound, s); SectionCount := SectionCount + 1; end; ini.Free; ... |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Kleiner Tipp zur Optmierung noch, ist mir grade so beim Durchlesen aufgefallen:
Delphi-Quellcode:
Hier setzt du dir sage und schreibe 4 Mal den Wert für
procedure TWebUpdate.CheckForUpdates;
... ini := TIniFile.Create (fTempDir + IniName); ma := ini.ReadInteger ('Version', 'Major', 0); mi := ini.ReadInteger ('Version', 'Minor', 0); re := ini.ReadInteger ('Version', 'Release', 0); bu := ini.ReadInteger ('Version', 'Build', 0); SetLength (fFiles,0); // <-- Diese Zeile neu eingefügt SectionCount := 1; FileCount := 0; while Ini.SectionExists ('File'+null(SectionCount, 3)) do begin s := ini.ReadString ('File'+null(SectionCount, 3), 'Name', ''); if LinkExists (fUpdateURL + s) then begin SetLength (fFiles, Length(fFiles)+1); with fFiles[FileCount] do begin name := s; Path := ini.ReadString ('File'+null(SectionCount, 3), 'Path', ''); if ((Path <> '') and (copy (Path, Length(Path)-1, 1) <> '\')) then Path := Path + '\'; if fStartname = '' then if ini.ReadBool ('File'+null(SectionCount, 3), 'Start', false) then fStartname := name; end; FileCount := FileCount + 1; end else if Assigned (OnError) then OnError (self, TWU_FileNotFound, s); SectionCount := SectionCount + 1; end; ini.Free; ...
Delphi-Quellcode:
neu zusammen. Speicher ihn doch in einer Variablen, dann hast dus einfacher und schneller ists auch noch. :)
'File'+null(SectionCount, 3)
|
Re: TWebUpdate - eine neue WebUpdate-Komponente
Hallo zusammen,
keine Angst, ich leb noch und auch TWebUpdate noch. ;-) Ich werd' die ganzen Vorschläge einbauen, ich hoffe, daß ich im Laufe der Woche dazu komme. Also: Code-Optimierung, Den Fehler mit dem SetLength (FFiles)... der Name wird sich übrigens in TMSWebUpdate ändern, das ist dann hoffentlich die letzte Änderung bei der man mehr tun muß als das Package neu zu kompilieren, und mal schauen zu was, von den anderen guten Vorschlägen, ich komme. Bis dahin viele Grüße Marco |
Re: TWebUpdate - eine neue WebUpdate-Komponente
Super :)
|
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Hallo zusammen,
Als erstes möchte ich mich für die vielen Anregungen und Verbesserungsvorschläge ganz herzlich bedanken. etwas früher als erwartet, hier die Version 1.10.1 vom 21.07.2008. Neuerungen in V1.10.1 vom 21.07.2008 Die gute alte TwebUpdate heißt jetzt TMSWebUpdate (MS, wer hätte es gedacht, für Marco Steinebach), damit sie leichter von anderen Komponenten unterscheidbar ist. Ich hoffe, jetzt gibt’s nur noch Updates, bei denen es damit getan ist, einfach das Package neu zu kompilieren. ;-) Ein neues Ereignis OnNextFile ist dazugekommen. Es wird ausgelöst, wenn die nächste Datei, wirklich, heruntergeladen wird. Im Fehlerfall wird es nicht ausgelöst. Dem Ereignis werden die Nummer der Datei, die heruntergeladen wird, beginnend bei 0, und ihr Name mitgegeben. Das Demoprogramm wurde erweitert, um das o.b. Verhalten zu verdeutlichen. Das Problem mit mehrfachem Aufruf, wurde beseitigt. Einiges an Code-Optimierungen durchgeführt. Überflüssige Unit-Aufrufe raus! Wenn Dateien in ein Unterverzeichnis auf der Festplatte downgeloaded werden sollen, müssen sie auf dem FTP-Server im gleichen Unterverzeichnis liegen. Also: in der Info-Datei der Demo-Version wird die Datei Testdatei.txt heruntergeladen, und auf platte ins Verzeichnis Verschiedenes, unterhalb des Programmverzeichnisses, gepackt. Damit das geht, muß sie auf dem FTP-Server im Unterordner „Verschiedenes“ liegen, der unterhalb des von UpdateURL angegebenen Verzeichnisses liegt. UpdateURL: www.odissa.de/programme/updates/UpdateTest (also das Hauptverzeichnis). Testdatei.txt liegt in http://www.odissa.de/programme/updat.../Verschiedenes. Bitte achtet UNBEDINGT darauf, dass ihr, wenn ihr einen Unix-FTP-Server habt, die Groß-/Kleinschreibung beachten müsst. Viel spaß und, wie immer, her mit Lob, Kritik und Anregungen. Herzliche Grüße Marco |
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Hallo Marco,
ich habe soeben auf die neue Version geupdated. Allerdings erhalte ich beim Abrufen der aktuellen Version nun die Fehlermeldung: Zitat:
|
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Hallo,
Schickst du mir mal deine Info-Datei? Vielleicht hab ich was bei der Updatebeschreibung vergessen zu schreiben? ... Viele Grüße Marco |
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Kein Problem: http://kallage.de/vplan/vplan/update_plus/update.ini
|
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Huhu,
Tja, die Datei sieht, wie erwartet, so aus, wie sie soll. Okay, dann anders: kannst du mal per (einzelne Anweisung) schauen, wo der Fehler, wann auftritt? Also welche prozedur, bei welcher Codezeile, oder bei welchem Ereignis? Viele Grüße Marco |
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Hallo Marco,
das Problem tritt in der Unit WebUpdate Zeile 402/403
Delphi-Quellcode:
auf.
procedure TMSWebUpdate.CheckForUpdates;
.... ma := StrToInt (copy(lv, 1, pos('.',lv)-1)); delete (lv, 1, pos('.', lv)); ... In der Demo klappt der Download soweit wunderbar, bis auf die Zeitüberschreitung, die ich beim ersten Update-Versuch erhalte. |
Re: TMSWebUpdate - eine neue WebUpdate-Komponente
Huhu Svenkan,
Hast du bei dir unter Projekt / Optionen / Versionsinfo / Versionsnummer ins Projekt übernehmen aktiviert? Gruß Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz