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 10 von 16   « Erste     8910 1112     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 RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#91
  Alt 19. Okt 2008, 14:22
Hallo,

ich probiere gerade Deine Komponente aus. Ich habe Dein Demo Programm genommen und nur soweit abgeändert, dass ich es zur Laufzeit erzeuge. Nur jedesmal, wenn ich das Projekt compilieren möchte kommt der Fehler
Zitat:
[DCC Error] WebUpdateThread.pas(49): E2009 Incompatible types: 'Parameter lists differ'
Und zwar in dieser Procedure in Zeile 6:
Delphi-Quellcode:
procedure TDownloadThread.Execute;
var
  fs: TFileStream;
begin
  fIdHTTP := TIdHTTP.Create(nil);
  fIdHTTP.OnWork := InternalOnWork;
  fs := TFileStream.Create (fPath + fName, fmCreate or fmShareExclusive);
  try
    fIdHTTP.Get(fURL + fName, fs);
  finally
    fs.Free;
    fIdHTTP.Free;
  end;
end;
Kannst Du mir da weiterhelfen ?
Rolf Warnecke
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#92
  Alt 19. Okt 2008, 18:54
Hallo,
Aber klar kann ich dir helfen.
Der fehler tritt deshalb auf, weil das OnWorkEvent in Indy9 und Indy10 unterschiedlich deklariert ist.
Öffnne bitte mal die WebUpdate.inc.
Hier gibts einen Compiler-Schalter Indy10. Den mußt du setzen, also den Punkt davor weg, und der Fehler sollte sich behoben haben.
Es gibt leider keine Möglichkeit irgendwie per Automatik herauszufinden, wann Indy9 und Indy10 installiert sind.
Einen schönen Abend
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#93
  Alt 25. Okt 2008, 20:42
Zitat von Marco Steinebach:
Hallo,
Aber klar kann ich dir helfen.
Der fehler tritt deshalb auf, weil das OnWorkEvent in Indy9 und Indy10 unterschiedlich deklariert ist.
Öffnne bitte mal die WebUpdate.inc.
Hier gibts einen Compiler-Schalter Indy10. Den mußt du setzen, also den Punkt davor weg, und der Fehler sollte sich behoben haben.
Es gibt leider keine Möglichkeit irgendwie per Automatik herauszufinden, wann Indy9 und Indy10 installiert sind.
Einen schönen Abend
Marco
Hallo Marco,

danke für Deine Hilfe, jetzt hat es wunderbar funktioniert. Ich habe auch gleich schon wieder ein neues Problem. Kann ich den Download und das neu Starten der Anwendung auch selber über eigene Buttons starten ?
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von fylo
fylo

 
Delphi 7 Personal
 
#94
  Alt 25. Okt 2008, 21:08
Hallo Marco,
Zitat von Marco Steinebach:
Es gibt leider keine Möglichkeit irgendwie per Automatik herauszufinden, wann Indy9 und Indy10 installiert sind.
Doch gibt es!

Das hatte ich schon hier erklärt, wie man das lösen kann.

Delphi-Quellcode:
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}
);
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#95
  Alt 26. Okt 2008, 12:27
Hi Fylo,
Zitat von fylo:
Doch gibt es!
Das hatte ich schon hier erklärt, wie man das lösen kann.
Stimmt, hattest du, aaaaber: bei mir, und damit sicher auch bei vielen Anderen, findet der Compiler die Datei nicht, ohne das man den Suchpfad, oder was weiß ich ändert, und da ich die Komponente so allgemeingültig wie möglich halten wollte, hab ich's so gelöst, obwohl mri deine Lösung besser gefallen hätte, wenn sie denn ginge.
Einen schönen Sonntag wünscht
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#96
  Alt 26. Okt 2008, 12:39
Hallo Rolf,
Prima, das es geklappt hat.
Mir ist nicht genau klar, was du machen willst, aber:
Den Download startest du, in dem du im OnUpdateFound die variable Download auf True setzt. Das Neustarten kannst du mittels der Prozedur Restart auslösen, wenn du's nicht gleich nach dem Download haben willst.
Beispiel:
Delphi-Quellcode:
// aus einem Programm von mir ...
procedure TTerminHauptFormular.WebUpdateDownloadComplete(sender: TObject;
  var Start: Boolean);
begin
  Application.MessageBox (PChar('Der Download ist abgeschlossen.'+#13#10+'Bitte starten Sie DiKa neu!'), 'Information', MB_Ok);
  UpdateDurchfuehren := true;
end;
Das Prog läuft weiter, bis es geschlossen wird. Im OnCloseEvent dann bitte ...
Delphi-Quellcode:
      if UpdateDurchfuehren then
        WebUpdate.Restart (false);
      Application.Terminate;
    end;
Die Restart erstellt dann die Batch, aber das Prog wird von dir selber beendet.
Ich hoffe, das beantwortet deine Frage? Wenn nicht, dann nochmal das Ganze!
Einen schönen Sonntag
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#97
  Alt 26. Okt 2008, 12:53
Dann stelle ich meine Frage anderst. Kann ich die Versionsinformationen auslesen, ohne das die Komponente in das OnUpdateFound-Ereignis reingeht ? Denn der Download der Dateien soll erst beim betätigen des Button "Update" ausgeführt werden.
Rolf Warnecke
  Mit Zitat antworten Zitat
Marco Steinebach

 
Delphi 5 Enterprise
 
#98
  Alt 26. Okt 2008, 13:20
Hallo Rolf,
nicht direkt, aber über einen Umweg.
Du brauchst eine variable, sagen wir
Delphi-Quellcode:
var
  DownloadStarten: boolean;
Dann sowas wie ...
Delphi-Quellcode:
procedure TForm1.NeuerungenClick (sender: TObject);
begin
  DownloadStarten := false;
  WebUpdate.CheckForUpdates;
end;

procedure TForm1.DownloadStartenClick (sender: TObject);
begin
  DownloadStarten := true;
  WebUpdate.CheckForUpdates;
end;

procedure TForm1.WebUpdateOnUpdateFound (...)
begin
  if not DownloadStarten then
  // ist beim click auf "Neuerungen zeigen" der Fall. Hier werden die
  // Neuerungen angezeigt, der Download aber nicht gestartet.
    with TWhatsNewFormular.Create (self) do
      try
        ShowModal (WebUpdate.NewVersion, WebUpdate.WhatsNewList);
      finally
        free;
      end;
  download := false;
  else // DownloadStarten ist true, neuerungen wurden schon angezeigt ...
    download := true
end;
So denke ich, könnte es gehen.
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#99
  Alt 26. Okt 2008, 13:29
Dann mache ich hiermit doch einen Verbesserungsvorschlag, so das man den Download und die Überprüfung auf eine neue Version auch über Buttons anstoßen kann. Also einzelnd, zu dem Zeitpunkt wo es benötigt wird.
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#100
  Alt 27. Okt 2008, 18:14
Wo und an welcher stelle beendest Du das laufende Programm ? Ich habe das ganze jetzt in eine DLL gepackt, nur leider wird das eigentliche Programm nicht beendet, wenn ich die Variable Start auf True setze. Hättest Du da für mich eine Idee oder Vorschlag, wie ich das realisieren könnte ?
Rolf Warnecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 10 von 16   « Erste     8910 1112     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 19:46 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