Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TMSWebUpdate - eine neue WebUpdate-Komponente (https://www.delphipraxis.net/109301-tmswebupdate-eine-neue-webupdate-komponente.html)

shmia 13. Mai 2011 12:48

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
@gneric: nicht uninteressant aber leider fehlt noch etwas in Richtung OOP.
Hier ein Ausschnitt aus dem Code:
Delphi-Quellcode:
type
  TDownloadActionLoadUrl = class
  public
    class procedure Download(ziel, downloadurl: string; DownloadFeedback:TDownloadProgressEvent);
  end;
....
  TDownloadBits = class
  public
    class procedure DownloadForground(ziel, downloadurl: WideString; DownloadFeedback:TDownloadProgressEvent);
    class procedure DownloadBackground(ziel, downloadurl, ExeName, Params: WideString);
    class procedure CompleteJob(JobId: WideString);
  end;
Hier müsste es natürlich eine gemeinsame Basisklasse mit einer virtuellen, abstrakten Methode geben. DownloadFeedback müsste ein Event sein (anstelle eines Parameters).

generic 13. Mai 2011 14:48

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Wie bei allen Vorträge und Artikeln gilt:
Es handelt sich hier um Beispiele wie etwas gelöst werden kann.
Das die Quellen nicht der Weisheit letzter Schluss sind, sollte jedem klar sein. Der Quelltext ist nur für Demozwecke und muss natürlich für "production use" ausgearbeitet werden.

Ja, du hast Recht - wenn man den Downloader austauschen will, müssten gleiche Interfaces her.
Allerdings sollte dann auch die gleiche Downloadtechnik für das herunterladen der XML genutzt werden.
Das läuft in der Demo komplett über MSXML.

Vorteil von einer einheitlichen Lösung ist u.a. die Konfiguration von Web-Proxies. Idealerweise nimmt man die in Windows hinterlegten Einstellungen.
Ich denke ich würde den BITS mit eine, hohen Prioritätsdownload verwenden. Dieser müsste nicht extra in der Firewall freigeschaltet werden.

thestallion90 25. Jun 2011 17:31

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hey Leute, hab wieder mal ein kleines Problem.
Die WebUpdate Komponente enthält ja den HTTP-Indy-Client. Jetzt brauche ich diesen aber auch noch seperat in meinem Programm. Sobald ich die Komponete auf die Form ziehen möchte kommt folgende Meldung:

Package "IndySystem150" kann nciht geladen werden. Es enthält die Unit "IdWship6", die auch im Package "WebUpdateKompontente" enthalte ist.

Klar, das Problem ist schon mehrfach diskutiert worden. Besonders interessant finde ich den Ansatz, dass eine Package (in diesem Fall das IdHTTP-Package) einfach in die Requires-Klausel aufzunehmen. Das hat wohl den gleichen effekt wie die uses-Klausel, danach gehts aber wohl. Nur wo ist in der Unit der WebUpdateKomponente die requires Klausel? Das ist wohl eine Klausel die nur in einem Package deklariert werden kann und nicht in einer Unit. Wie auch immer, ich stehe wie der Ochs vorm Berg. Ich weiß zwar welche Unit den Fehler verursacht, aber wie kann ich diese aus der WebUpdateKomponente auslagern so dass siese noch funktioniert UND ich IdHTTP noch seperat benutzen kann? :(

Hat jemand eine Idee? Vllt wie ich mit der requires-Klausel weiter komme? Kann ich diese auch in der Unit der WebUpdateKomponente deklarieren?

lg,
thestallion90

mkinzler 25. Jun 2011 17:34

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
In der Projektdatei.

thestallion90 25. Jun 2011 20:52

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
In der Projektdatei der Komponente? Also der TUpdateKomponete? Wie komme ich denn da hin? Die Komponente liegt ja wie alle anderen auch in der Tool-Leiste. Oder liegt auf der Form, je nachdem.. Wenn ich mir zB die Deklaration eines Events der Komponente anzeigen lasse öffnet sich die betreffende unit der Komponente. Aber wie komme ich auf die Projektdatei?

lg,
thestallion90

mkinzler 25. Jun 2011 21:00

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zu Erstellung wurde aber ein Projekt verwendet ( .dpr)

thestallion90 26. Jun 2011 01:18

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Aber wenn ich das richtig sehe liegt mir das Projekt nicht vor, oder übersehe ich da irgendetwas? 8( Es geht mir ja darum, dass ich das Problem beheben kann...

mkinzler 26. Jun 2011 08:17

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Doch diese Datei muss ja vorhanden sein, da ja die Komponente im Quelltext ohne Package vorliegt.
Irgendwo muss WebUpdateKompontente.dpr vorhanden sein

thestallion90 26. Jun 2011 16:08

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Ja, die Komponente liegt als Unit vor. Und ich habe sie in Delphi per "Komponete/Komponente installieren/Unit auwählen" installiert. Ich habe also nur die Unit ausgewählt und hatte keine dpr-Datei. Kann ich vllt einfach eine neue Kompoentente erstellen und dann den Code aus der vorhandenen Unit reinkopieren? Dann weiß ich nicht, von welcher Komponente ich meine neue ableiten soll damit es funktioniert (das muss man ja auswählen, wenn man auf "Komponente erstellen" geht)...

PS: warum bekomme ich eigentlich keine eMail-Benachrichtigung mehr wenn es hier was neues gibt? :(

mkinzler 26. Jun 2011 16:21

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
An dieser Stelle hast du die Wahl ein neunes (Package-)Projekt anzulegen oder die Unit einem vorhandenen hinzuzufügen.

thestallion90 26. Jun 2011 20:00

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Ich fasse mal kurz zusammen, was ich jetzt ausprobiert habe:

Ich habe "Komponente installieren" ausgewählt, Delphi auf die entsprechende Unit "WebUpdate.pas" verwiesen und sollte dann ein Package auswählen.

Bevor ich es in irgendein vorhandenes reininstalliert hätte, dachte ich mir, es wäre einfacher und übersichtlicher, ein neues Package anzulegen.
Also habe ich zunächst in Delphi per "Datei/Neu/Package" ein Package erstellt und direkt so gespeichert, praktisch ohne irgendetwas drin. Nennen wir es "Package1".

Wieder zurück zur installation der Komponente: Ich habe Delphi also gesagt, dass ich WebUpdate.pas in ein vorhandenes Package installieren möchte, also in das, welches ich gerade erstellt hatte (Package1).

So weit lief auch alles gut. Jetzt muss ich nur noch das HTTP-Indy Package in die requires Klause aufnehmen und alles läuft (habe ich gedacht).
Ich habe also mein "Package1" geöffnet. Zunächst habe ich aus der WebUpdate.pas das IdHTTP aus der uses-klausel genommen und im Quelltext des Packages (Package1) in die requires-Klausel geschrieben. Resultat war eine Meldung, dass das Package "IdHTTP" nicht gefunden werden kann. Logo, hab ich gedacht, in der Uses-Klausel stehen ja auch units drin und keine Packages. Also habe ich mich an die Fehlermeldung erinnert in der es hieß: "Package "IndySystem150" kann nciht geladen werden..." als ich die Indy-HTTP-Komponte auf die Form ziehen wollte. Also habe ich im Quelltext von meinem "Package1" in der requires-Klausel das "IdHTTP" durch "IndySystem150" ersetzt. Aber auch hier sagt er, dass das Package nicht gefunden werden kann 8(.. Was will er?

Ich habe also die unit WebUpdate.pas in ein leeres, neues Package installiert. Was muss ich jetzt damit anstellen damit die Komponente normal funktioniert, ohne dass der Konflikt auftritt?

mkinzler 26. Jun 2011 20:06

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zunächst habe ich aus der WebUpdate.pas das IdHTTP aus der uses-klausel genommen
Dort muss der Verweis aber stehen bleiben.
Der Linker schaut dann, ob er die Unit in einem benötigten Package findet, sonst wird diese implizit in das aktuelle Package gelinkt.
Zitat:

Also habe ich im Quelltext von meinem "Package1" in der requires-Klausel das "IdHTTP" durch "IndySystem150" ersetzt
Das ist richtig so.

Hast du das alte Package Deinstalliert?
Ist Indy aktiv?

thestallion90 26. Jun 2011 20:18

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
nein, ich habe an den installierten Packages nicht gemacht. Hier der genaue Wortlaut der Fehlermeldung:

[DCC Fataler Fehler] WebUpdateKomponenteSelber.dpk(28): E2202 Package 'IndySystem150' wird benötigt, konnte aber nicht gefunden werden

Hier der Quellcode des Packages:

Delphi-Quellcode:
package WebUpdateKomponenteSelber;

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$DEFINITIONINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$IMPLICITBUILD ON}

requires
  rtl,IndySystem150;

end.


Muss ich evtl. irgendwo einen Suchpfad zu dem Package eingeben? Normalerweise müsste er es doch automatisch finden, oder?

mkinzler 26. Jun 2011 20:22

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Ist Indy denn installiert? Es ging ja wegen der Unit nicht.

thestallion90 26. Jun 2011 20:26

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
wie finde ich das denn heraus?

Habe mal versucht per "Komponente/Package installieren" mein Package auszuwählen. Er zeigt mir das gar nicht an, also die dpk-Datei... Und wenn ich auf "Alle Dateien anzeigen" klicke und die dpk-Datei auswähle sagt er, dass das Package ungültig sei.

mkinzler 26. Jun 2011 20:27

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Und INDY?

thestallion90 26. Jun 2011 20:28

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
wie finde ich denn heraus, ob es installiert ist?

mkinzler 26. Jun 2011 20:32

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Unter Komponenten->Packages

thestallion90 26. Jun 2011 20:34

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
"Indy 10 Core Entwurfszeit" und "Indy 10 Protokolle Entwurfszeit" sind installiert...

mkinzler 26. Jun 2011 20:38

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Existiert den die Bpl im Suchpfad?

thestallion90 26. Jun 2011 21:06

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Ich hab einen neuen Suchpfad zum Ordner Embarcadero\RAD Studio\8.0\bin eingetragen. Da liegt die bpl drin. Funzt aber immernoch nicht..

thestallion90 26. Jun 2011 21:41

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Nur für mein Verständnis:

weil die WebUpdateKomponente die HTTP-Indy Komponente braucht und sich in der Uses-Klausel darauf bezieht, wird die aktuelle Version entsprechende Unit in das Package der WebUpdateKomponente "eingebaut". Und wenn icih dann die HTTP-Indy Komponente und die WebUpdate Komponente parallel verwenden will gibt es zwei versionen der entsprechenen Unit. Das gibt den Fehler.
Wenn ich in der WebUpdateKomponente das HTTP-Infy_Package in die requires-Klausel aufnehme wird keine neue Version von der Unit angelegt. Folglich dürfte das Problem behoben sein, oder?
Oder hab ich da irgendwo einen kompletten Denkfehler drin?
Wäre es vllt einfach die Unit, die in der WebUpdateKomponete enthalten ist umzubenennen? Damit es keine zwei Versionen der namensgleichen unit gibt? Das müsste doch auch funktionieren. Oder?

mkinzler 26. Jun 2011 21:57

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Ja im prinzip stimmt es so. Der Linker schaut, ob die benötigten Units in referenzierten Packages vorhanden sind, sonst bindet er sie direkt ein.
Jede Unit darf nur einmal vorhanden sein.

thestallion90 26. Jun 2011 22:08

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
und was passiert, wenn ich die WebUpdateKomponente einfach in das Package der HTTP-Indy Komponente installiere? Dann ist doch alles im gleichen Package und das Problem dürfte auch behoben sein. Oder? Ich frage sicherheitshalber mal, bevor danach gar nichts mehr funktioniert..

thestallion90 26. Jun 2011 23:39

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
WHOOOO! :-D

*räusper*

Habs hinbekommen. Der Name des Packages in der requires-Klausel war falsch. Habe mal per windows-Suche nach einem der anderen Packages, die standardmäßig in der requires klausel stehen (in meinem fall "designide") gesucht und die Datei "designide.dcp" gefunden. Daraufhin habe ich im selben Ordner der gefundenen Datei (designide.dcp) nach etwas Indy-ähnlichem Gesucht und die Dateien "indycore.dcp" und "indyprotocols.dcp" gefunden. Wenn ich die qequires-Klausel um diese beiden Packages erweitere (natürlich ohne die Dateiendung) läuft alles wie geschmiert.

Lösungsweg für die korrekte Installation der WebUpdateKomponente. Für alle, die das gleiche Problem haben, also die Update Komponente mit den anderen Indy Komponenten verträglich machen wollen:

1. Package erstellen:
In Delphi auf "Datei/Neu/Package" gehen. Dann passiert erstmal herzlich wenig, es öffnet sich keine Form oder sonstiges. Einfach direkt im Anschluss auf "Datei/Projekt speichern". Am besten dafür einen neuen Ordner anlegen (wegen der Übersichtlichkeit), ich habe das Package "WebUpdateKomponenteEigen" genannt. In dem Ordner sollte dann die Projektdatei (dpr) und die Package-Datei (dpk) liegen.

2. Komponente aus der gelieferten unit installieren
In Delphi auf "Komponente/Komponente installieren" gehen. Dann die Unit "WebUpdate.pas" auswählen. Im nächsten Schritt dann Option "in vorhandenes Package installieren" anwählen und zu dem gerade eben abgespeicherten Package (WebUpdateKomponenteEigen.dpk) navigieren. Normalerweise sagt Delphi dann etwas wie: "Die Komponente wurde erfolgreich installiert".

3. Package bearbeiten, sodass die eben installierte Komponente mit den Indy-Komponenten verträglich ist.
In Delphi auf "Datei/Öffnen" und zu der eben angelegten Projektdatei navigieren. In meinem Fall "WebUpdateKomponenteEigen.dpr". Wahrscheinlich öffnet sich dann wieder nichts erkennbares, das ist aber in Ordnung. In Delphi XE (ich weiß nicht, ab welcher Version diese Funktion verfügbar ist) ist oben ganz links ein Button in der Menüleiste, der eine Übersicht aller Units, die dem Projekt angehören, öffnet. Wenn man diese Übersicht öffnet müsste die Datei "WebUpdate.pas" als einzige in dieser Liste stehen, weil wir sie ja eben in das vorher noch leere Package installiert haben.
Über "Projekt/Quelltext anzeigen" erreicht man den Quellcode des Packages/Projektes. Hier muss jetzt die requires-Klausel um zwei Packages ergänzt werden (zwei, weil ich nicht genau weiß welches der beiden relevant ist):

Delphi-Quellcode:
package WebUpdateKomponenteEigen;

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}

{...}

requires
  rtl,
  designide,
  vcl,
  vclactnband,
  vclx,
  xmlrtl,
  indycore,                     //<--muss ergänzt werden
  indyprotocols;            //<--muss ergänzt werden

contains
  WebUpdate in '..\tmswebupdate_v1.10.1_174\WebUpdate.pas';

end.
Wenn ihr das Package so speichert, sollte die Komponente ab sofort problemlos zusammen mit anderen Indy-Komponenten auf die Form zu ziehen sein.


Danke an mkinzler für seine Unterstützung!

süden 8. Apr 2013 19:47

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
die Kompo funktioniert super.

Ich würde gerne nur noch eine Setupdatei (Inno) zum laufen (=ausführen nach Download) bringen.
Geht das?

Und noch was:
Wenn ich auf meinen Download-Button klicke, tut sich erstmal eine Weile gar nichts. Viel Benutzer sind nicht daran gewöhnt, mehrere Sekunden zu warten, bevor eine Reaktion kommt.
Mein Versuch, die Funktion mit "Cursor X Finally Cursor y" einzuschließen hat nix gebracht trotz Application.Prozes...

Aber sonst ... vielen Dank.
Ich hatte es vorher mit TMSWebupdate (TMSSoftware) probiert, aber kein Source usw. und etliche Fehler.

Gruß aus dem Süden - süden

süden 11. Apr 2013 10:27

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Das Update funktioniert, wenn das Programm nicht auf C:\Programme installiert ist (WIN7pro).
Gibt es eine Möglichkeit es irgendwie doch zu machen?

In meiner letzten Frage habe ich schon geragt, wie ist eine Setup ans Laufen bekomme. Das wäre wohl eine Lösung, funktioniert aber auch nicht.

Über eine Hilfe würde ich mich sehr freuen, aber der Thread ist wohl tot?!

Gruß süden

PS: Die Komponente gleichen Namens von TMS-Software habe ich schon probiert, hat mir aber nicht so gefallen (kein Code ...).

Gibt es evtl. noch eine Alternative?

RWarnecke 11. Apr 2013 11:18

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von süden (Beitrag 1211110)
PS: Die Komponente gleichen Namens von TMS-Software habe ich schon probiert, hat mir aber nicht so gefallen (kein Code ...).

Suche mal in dem Blog von TMS Sofwtare. Ich weiß, dass es da mal einen Beitrag gab.

Darlo 11. Apr 2013 13:15

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von süden (Beitrag 1211110)
PS: Die Komponente gleichen Namens von TMS-Software habe ich schon probiert, hat mir aber nicht so gefallen (kein Code ...).

Ich nutze die Komponente und wenn das Ding kaufst hast Du auch den Source-Code. Habe den Source bisschen bearbeitet damit es auch unter FM Anwendungen für Windows läuft.

süden 13. Apr 2013 18:38

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
danke für die Antworten. aber das triffts nicht.
Ich würde gerne die Komponentze von Marco zum laufen bringen.

Da steckt jetzt schon einige Arbeit drin und bevor ich jetzt noch mal mit dem Namensgleichen von TMS-Software anfange und Zeit und Geld investiere möcht ich wissen, wie ich die "Schranke" des Systemverzeichnissen C:\... umgehen kann.

Gruß süden

RWarnecke 14. Apr 2013 08:50

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Deine Stichworte sind UAC und Manifest. Mit einem Manifest im Programm kannst Du die Administrationsrechte anfordern um dann Dateien unter C:\Program Files (x86) zu schreiben.

süden 14. Apr 2013 21:29

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
OK, danke für die Antwort.
Ein Manifest habe ich noch nicht eingebaut, aber ich werde mal suchen.

Gruß süden

Smaraner 11. Aug 2013 17:43

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe gerade versucht die Komponente zu installieren. Dabei erscheint folgende Fehlermeldung:

Anhang 39719

Ich habe schon mehrmals Komponenten installiert. Dabei gab es noch nie Probleme beim Erzeugen des Package.

Und dann beim Installieren der Komponente folgende Fehlermeldung:

[dcc32 Fehler] WebUpdateThread.pas(49): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Delphi-Quellcode:
  fIdHTTP := TIdHTTP.Create(nil);
  fIdHTTP.OnWork := InternalOnWork; //<-- Hier erscheint der Fehler
  fs := TFileStream.Create (fPath + fName, fmCreate or fmShareExclusive);
Was habe ich falsch gemacht?

thestallion90 11. Aug 2013 17:51

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Vielleicht hat sich die Liste der Parameter in Delphi XE3 geändert. Ich Nutze die Komponente ohne Probleme in Delphi XE. Was sagen denn die Deklarationen von fIdHTTP.OnWork und InternalOnWork? Ist die Liste der Parameter gleich? Evtl. musst du einfach nur die in der Komponente deklarierte InternalOnWork-Methode anpassen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.
Seite 4 von 4   « Erste     234   

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