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 3 von 16     123 4513     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)
 
Marco Steinebach

 
Delphi 5 Enterprise
 
#21
  Alt 13. Mai 2008, 18:46
Huhu,
Zitat von Svenkan:
Gefällt mir schonmal ganz gut,
Danke!
Zitat von Svenkan:
aber ich hab 2 Probleme:

1. Ich lasse die Dateien in das Unterverzeichnis '\downloads' laden. Nachdem das Update-Programm geschlossen wird, werden diese Dateien allerdings nicht ins Hauptverzeichnis verschoben.
stimmt! Sollen sie auch nicht. Gedacht ist das runterladen in ein Unterverzeichnis beispielsweise für Sound-Dateien, Updates von Bildern o.ä.
Kannst du die Dateien, die du im Hauptverzeichnis brauchst, nicht gleich dorthin laden?
Zitat von Svenkan:
2. Fällt bei mir AWorkCount in den negativen Bereich. Da ich eigtl einen Fortschrittsbalken einbauen wollte, kann ich das erstmal vergessen, da mir negative Werte rein gar nichts bringen. Denn so kann es bei größeren Dateien schnell den Anschein haben, dass der Download steckengeblieben ist.
ähm, der WorkCount ist der der Indy-Komponenten ... wann wird der denn negativ?
Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#22
  Alt 17. Mai 2008, 18:57
Hallo Listers,
Es gibt eine Neue Version der WebUpdate-Komponente, V1.01.0.
Es hat sich einiges Neue getan.
An dieser Stelle ein Dank an Fylo und Svenkan für die Ideen.
Das SSL gibt's im nächsten update.

Neuerungen:
Für jede, in der Versionsdatei angegebene Datei, gilt:
ist ein Pfad angegeben, wird die Datei beim Herunterladen
dort hinein kopiert. (wie gehabt).
Ist
Pfad=
angegeben, oder wird die Angabe schlicht weggelassen, wird die Datei in ein Unterverzeichnis, unterhalb des Programmverzeichnisses, mit dem Namen WebUpdateDateien kopiert.
All diese Dateien werden, nach Programmende, ins eigentliche Programmverzeichnis kopiert.
Das hat den vorteil, daß auch mehrere Dateien, beispielsweise dlls, im Programmverzeichnis ersetzt werden können.
Wird z.B.
Pfad=sound
angegeben, wird die Datei ins Verzeichnis sound\ unterhalb des eigentlichen Programmverzeichnisses kopiert.
So kann, weiterhin, eine Image, sound,-...-Datei ersetzt werden.
Die erste datei, die den Zusatz
Start=1
hat, wird von der Batch-Datei als letzte Aktion ausgeführt.
Auf diese Weise, kann das Programm sofort nach dem Update automatisch wieder neu gestartet werden.
Schaut euch auch das Beispiel im demo an.
Das bringt u.a. den enormen vorteil, daß man als neue Programmversion schlicht die Programmdatei benutzen kann, und die nicht umständlich erst umbenennen muß.

Die Section
[Einstellungen]
samt
[DirektesUpdate]
entfällt dadurch komplett.

Um ein indirektes Update, also das Ganze über ein setup.exe durchzuführen, sieht die Sektion für Datei001 dann so aus:
[Datei001]
name=setup.exe
; die eigentliche Update-Datei, als Setup verpackt.
Pfad=
; wird ins Programmverzeichnis kopiert.
Start=1
; wird, nach dem alles kopiert ist, ausgeführt.

Hier bleibt dem Programmierer lediglich, die Setup.exe nach Programmstart von Hand zu löschen, da WebUpdate nicht weiß, daß es sich um eine Update-Datei handelt.
Also z.B.
Code:
UpdateName := ExtractFilePath (Application.ExeName) + 'setup.exe';
If FileExists (UpdateName) then
  DeleteFile (UpdateName);
Die Batchdatei entfernt, um keinen Müll zu hinterlassen, gnadenlos alle Dateien in
WebUpdateDateien
und auch das verzeichnis selbst.

Ebenso wurden das Demo und die Doku ein wenig überarbeitet - ich hoffe,zum Besseren hin.

So. Ich warte, wieder, auf Lob, Kritik, Anregungen und sowas schönes alles!
Einen schönen Abend!
Marco
p.s.: ach ja, , geänderte Version, wie immer, im ersten Beitrag.
Marco Steinebach
  Mit Zitat antworten Zitat
Pif
 
#23
  Alt 17. Mai 2008, 22:10
Zitat von Marco Steinebach:
Hallo,
Zitat von Delphi Code Anfänger:
Zitat von Pif:
Danke für deine hilfe, das mit dem package habsch begriffen.
aber wenn ich das installieren will kommt ein fehler im quelltext der komponente

fIdHTTP.OnWork := InternalOnWork; [DCC Fehler] WebUpdateThread.pas(39): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Mach ich da was falsch oder liegt es am quellcode?
Ich bekomme genau den gleichen Fehler.

Ich weiß nicht wie ich es beheben kann. Kann mir vielleicht einer helfen?
Also ich bekomm die Komponente nicht richtig installiert. Ka wieso ... -.- ich machn package und wenn ichs dann installieren will kommt der oben genannte fehler.

Was genau brauchst du um mir zuhelfen Marco? ^^
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

 
Delphi 10.2 Tokyo Starter
 
#24
  Alt 17. Mai 2008, 22:21
Hi,

hört sich an wie unterschiedliche Indy-Versionen.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Pif
 
#25
  Alt 17. Mai 2008, 23:30
Was kann ich da machen?
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#26
  Alt 18. Mai 2008, 08:22
Hallo,
Jetzt geht mir dieser Fehler wirklich auf den Geist. Den werden wir doch irgendwie behoben kriegen!!!
Zitat von Pif:
Was kann ich da machen?
Entweder in der Hilfe nachschlagen, oder, eine neue Anwendung erstellen, ein TIDHTTP auf die Form legen, ein OnWork definieren und mir den Procedure-Kopf schicken, damit man mal die, bestimmt unterschiedlichen, Parameter angleichen kann.

Aber jetzt hab ich 'ne Frage: wie kann ich feststellen, welche Indy-Version läuft, also z.B. Compiler-Schalter, oder geht sowas mit Overload?
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Pif
 
#27
  Alt 18. Mai 2008, 15:50
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin

end;

end.
Also ich bin jetzt nich so der Delphi-Pro. Ich hoffe du meinst das so. Ich hab ne neue Anwendung gemacht dieses TIDHTTP draufgezogen und dann onwork definiert...

Das ist der Code (oben). "TWorkMode" wird mir als nicht deklarierter Bezeichner angezeigt.


Ich hoffe ich kann dir helfen ...
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#28
  Alt 18. Mai 2008, 16:23
Huhu Pif,
Zitat von Pif:
Also ich bin jetzt nich so der Delphi-Pro.
Ich hoffe du meinst das so. Ich hab ne neue Anwendung gemacht dieses
TIDHTTP draufgezogen und dann onwork definiert...
Ja genau, das meinte ich. Ich hab den Fehler gefunden, kleines Wort, große Wirkung.
Ich häng dir hier mal eine geänderte WebUpdateThread.pas dran. Die bitte mal drüberkopieren und mir sagen, ob's jetzt geht!
Dank dir und viele Grüße
Marco
Angehängte Dateien
Dateityp: pas webupdatethread_183.pas (1,5 KB, 38x aufgerufen)
Marco Steinebach
  Mit Zitat antworten Zitat
Pif
 
#29
  Alt 18. Mai 2008, 20:29
Ich muss dich enttäuschen.... Also ich bekomme den gleichen fehler immernoch.

Vllt. mache ich ja auch was falsch beim installieren.

Ich mache ein neues Package. Dann füge ich unter "Enthält" WebUpdate.pas und WebUpdateThread.pas hinzu.
Dann mach ich aufs Package rechtsklich und dann installieren.

Dabei bringt er mir dann den fehler!

MfG Pif
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#30
  Alt 18. Mai 2008, 20:48
Huhu,
Zitat von Pif:
Ich muss dich enttäuschen....
Das gibt's doch gar nicht. Ich hab noch 'ne bitte: in der WebUpdateThread.pas gibt es eine Zeile
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; {$IFNDEF Indy100} const {$ENDIF} AWorkCount: Integer); Ändere die doch bitte mal so, daß das ganze {$ifndef} draußen ist, also die Zeile so aussieht:
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); Das gleiche gibt es dann weiter unten nocheinmal, bitte genauso verfahren.
Klappt es jetzt?
Wenn du mir hilfst, wär' das echt klasse!
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 16     123 4513     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 10:51 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