AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TMSWebUpdate - eine neue WebUpdate-Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

TMSWebUpdate - eine neue WebUpdate-Komponente

Ein Thema von Marco Steinebach · begonnen am 27. Feb 2008 · letzter Beitrag vom 11. Aug 2013
Antwort Antwort
Seite 8 von 16   « Erste     678 910     Letzte »    
Marco Steinebach
Registriert seit: 4. Aug 2006
Hallo Listers,
vor gut einer Woche hatte ich entgültig die Nase voll. Ich suchte eine Komponente für ein automatisches WebUpdate, Internet-Update, ganz wie ihr wollt.
Entweder es gab lauter teures Zeug, oder Freeware, die zwar gut, aber meist recht wenig anpassbar war, dann noch ein paar Schnipsel hier, ein Textchen da, ein Code-Teilchen wo anders....
Also gut, selber schreiben...
Und hier ist das Ergebnis.

TMSWebUpdate ist ganz sicher nicht neu, aber
- Freeware mit Source
- Einfach zu integrieren
- Anpassbar, also keine Formulare die schon mit dabei sind
- Flexibel, was die Anzahl der runterzuladenden Dateien angeht
- Flexibel beim format der Steuerdatei auf dem Server.
- Nicht erst ab Delphi 2006 enterprise lauffähig.
- Auf Indy basierend, also geht ab Delphi 5.


Webupdate schaut auf einem Server in einer Infodatei nach, ob eine neuere Version, als die aktuelle, vorhanden ist. Falls ja, können eine, oder mehrere Dateien, heruntergeladen, und ggf. eine davon als Update ausgeführt werden.

Dazu einfach die Komponente auf die form.
Die zwei eigenschaften
UpdateURL und IniName müssen natürlich ausgefüllt werden.
UpdateUrl ist die Adresse zur ini-datei also z.B.
www.meine-seite.de/Software
(http und / am ende werden automatisch ergänzt)
IniName ist der Name der Datei, in der die Infos über ein evtl. Update stehen, also beispielsweise
MeinProg_Update.html

Und MeinProg_Update.html könnte dann ungefähr so aussehen:
[Version]
Major=1
Minor=0
Release=0
Build=99

[File001]
Name=MeinProg_Update.exe
Start=1

[File002]
name=EinSound.wav
Path=sounds

[New]
Ein Fehler beim entgültigen löschen von Dateien wurde beseitigt.

Mehrere kleine Sachen sind jetzt leider kaput. Ich bin noch dran!
...

Alles was nach dem Schlüsselwort
[New]
steht, wird gnadenlos als WhatsNew angezeigt, dann zu finden in der WhatsNewListe der Komponente.

Ach ja, die Anweisung zur Prüfung heißt
CheckForUpdates.
Das war’s schon, und 6 Ereignisse
OnUpdatefound
OnNoUpdateFound
OnDownloadProgress
OnDownloadComplete
OnNextFile und
OnError
Gibt’s natürlich auch noch.

So. und nun wünsche ich viel spaß beim ausprobieren, testen, einsetzen, was auch immer. Ich würde mich über verbesserungsvorschläge, wünsche, anregungen, kritik, besonders über Lob, natürlich sehr freuen. Wenn bedarf ist, können wir auch gerne ein Projekt daraus machen.

Viele Grüße
Marco
Angehängte Dateien
Dateityp: zip tmswebupdate_v1.10.1_174.zip (24,9 KB, 799x aufgerufen)
 
Benutzerbild von Diamondback2007
Diamondback2007

 
Delphi 2007 Professional
 
#71
  Alt 21. Jul 2008, 10:27
Kleiner Tipp zur Optmierung noch, ist mir grade so beim Durchlesen aufgefallen:
Delphi-Quellcode:
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;

  ...
Hier setzt du dir sage und schreibe 4 Mal den Wert für 'File'+null(SectionCount, 3) neu zusammen. Speicher ihn doch in einer Variablen, dann hast dus einfacher und schneller ists auch noch.
Fabian E.
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#72
  Alt 21. Jul 2008, 11:31
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
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

 
Delphi 2007 Professional
 
#73
  Alt 21. Jul 2008, 11:43
Super
Fabian E.
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#74
  Alt 21. Jul 2008, 17:42
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
Marco Steinebach
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#75
  Alt 26. Jul 2008, 11:46
Hallo Marco,

ich habe soeben auf die neue Version geupdated. Allerdings erhalte ich beim Abrufen der aktuellen Version nun die Fehlermeldung:

Zitat:
Im Projekt vplan_update.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''' ist kein gültiger Integerwert.'
Ich habe einfach die Komponenten ausgetauscht und am Code weiter nichts verändert.
Sven Kannenberg
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#76
  Alt 26. Jul 2008, 12:22
Hallo,
Schickst du mir mal deine Info-Datei? Vielleicht hab ich was bei der Updatebeschreibung vergessen zu schreiben? ...
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#77
  Alt 26. Jul 2008, 12:49
Kein Problem: http://kallage.de/vplan/vplan/update_plus/update.ini
Sven Kannenberg
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#78
  Alt 26. Jul 2008, 13:40
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
Marco Steinebach
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#79
  Alt 26. Jul 2008, 21:07
Hallo Marco,

das Problem tritt in der Unit WebUpdate Zeile 402/403

Delphi-Quellcode:
procedure TMSWebUpdate.CheckForUpdates;

....

  ma := StrToInt (copy(lv, 1, pos('.',lv)-1));
  delete (lv, 1, pos('.', lv));

...
auf.

In der Demo klappt der Download soweit wunderbar, bis auf die Zeitüberschreitung, die ich beim ersten Update-Versuch erhalte.
Sven Kannenberg
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#80
  Alt 26. Jul 2008, 23:11
Huhu Svenkan,
Hast du bei dir unter
Projekt / Optionen / Versionsinfo / Versionsnummer ins Projekt übernehmen
aktiviert?
Gruß
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 16   « Erste     678 910     Letzte »    


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 17:20 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