Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

Svenkan 26. Jul 2008 23:59

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Marco,

jetzt weiß ich wieder, wo das Problem liegt!
Ich hatte in der Komponente immer geändert, dass die Versionsdaten aus einer anderen Datei (VPlan.exe) ausgelesen werden sollen und deswegen findet er hier nun natürlich keine Angaben darüber.
Wär es möglich, dass du vlt. die Möglichkeit einbaust, dass man diese Daten aus einer 2. Datei auslesen kann?

Nun bekomme ich allerdings die Fehlermeldung 'Ein deaktiviertes oder unsichtbares Fenster kann nicht den Fokus erhalten.'.

Delphi-Quellcode:
procedure THauptFormular.GetVersionClick(Sender: TObject);
begin
 WebUpdate.CheckForUpdates;
 ActiveControl := Fortschritt;
end;
Das Problem tritt in der Zeile mit der Zuweisung der ActiveControl auf.

Svenkan 1. Aug 2008 00:19

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hätte noch folgende Bitten: es wäre toll, wenn man in der Komponente selbst das TEMP-Dir und den Namen für die *.bat festlegen könnte. Dann muss man nicht immer in den Code selbst reingehen. Zumal man sowieso nicht immer dran denkt.

Desweiteren wüsste ich mal gerne, ob der im Screen genannte Fehler wirklich so gewollt ist. :D

Marco Steinebach 1. Aug 2008 10:04

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Huhu,
Kein Problem, ich denke auch, daß mit dem direkten Ändern der Namen ist ganz sinnig. Wird eingebaut.
Welchen Fehler meinst du? Du müßtest, bitte, den Text des Fehlers in die Nachricht kopieren, weil ich die Screenshots nicht lesen kann.
Aber, zu deiner letzten Nachricht: bist du sicher, daß die ProgressBar sowohl Enabled als auch Visible auf True stehen hat? Zur Not mal mit'm Debugger nachschauen.
Und das Form, auf dem "Fortschritt" angezeigt wird, ist momentan das aktive??
Ich denke nicht, daß der Fehler von der Komponente ausgelöst wird ...
Viele Grüße
Marco

Svenkan 1. Aug 2008 11:41

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Marco,

dann liegts wohl tatsächlich daran, dass es ich die GroupBox mit den Download-Infos auch erst beim Download einblenden lasse. Naja, es klappt ja auch so. ;)

Zu dem Fehler:

Anwendungsfehler
Exception EIdConnectionClosedGracefully in Modul vplan_update.exe bei 0001E956.
Die Verbindung wurde erfolgreich beendet.

:D

fylo 1. Aug 2008 12:24

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Moin,

Zitat:

Zitat von Svenkan
Anwendungsfehler
Exception EIdConnectionClosedGracefully in Modul vplan_update.exe bei 0001E956.
Die Verbindung wurde erfolgreich beendet.

Der Fehler wird von Indy ausgelößt und ist eher eine Statusmeldung. Siehe dazu den Eintrag in der Borland-Newsgroup.

Versuch mal mit dem Debugger schrittweise durch deinen Code zusteppen, dann müsstest du irgendwann in eine Indy-Unit kommen und dort steht auch nochmal etwas zu dieser Exception (kann das leider gerade nicht, weil ich hier kein Delphi auf dem Rechner hab).

Svenkan 2. Sep 2008 21:12

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,

mir ist gerade aufgefallen, dass wenn man einen Eintrag mit der Eigenschaft 'Path' vornimmt, diese Dateien nicht auch in der lokalen Ordnerstruktur in diesen Ordner gepackt werden. Das ist eher hinderlich, als nützlich. Wäre es möglich, dies noch einzubringen?

Marco Steinebach 9. Sep 2008 12:19

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Huhu Svenkan,
ähm, kannst du deine Frage nochmal anders stellen, bitte! Mir ist nicht wirklich klar, was ich einbauen soll.
Wenn die Datei
test.dll
im Unterverzeichnis
DLLS
auf dem Zielrechner stehen soll, dann muß sie auf dem FTP-Server im Unterverzeichnis DLLS liegen und der Eintrag Path=DLLS muß angegeben sein.
Ist das bei dir so, und es geht trotzdem nicht?
Vielleicht schickst du mal deine Update.html als anlage?
Viele Grüße
Marco

Volle 9. Okt 2008 10:12

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hi,

arbeite gerade auch an nem Webupdate.

Hab n paar Fragen bzw n paar Anregungen:

- Wie verhaelt sich das ganze wenn man nicht als Admin eingeloggt ist?
Ich mein damit wenn man keinen Schreibzugriff auf das Anwendungsverzeichnis hat?
Soweit ich gesehen hab wird das Update abgebrochen oder?

- Wenn sich nur ein paar Dateien geaendert haben (sagen wir in einem Projekt das insgesamt 100mb in vielen einzelnen Dateien hat)
dann wird sobald sich die Version aendert das komplette Paket gesaugt oder?

- Es wird am Anfang abgerufen wie gross das Update ist. Vielleicht wärs geschickt gleich noch abzufragen ob genügend
Speicherplatz auf dem Datenträger vorhanden ist. Is kein grosser Aufwand und kann fehler vermeiden :>
(hier braucht man ja ca 2x den speicherplatz den das Update hat)

- Vielleicht noch ne Kompression einbauen? 7z laesst sich ja super ueber die Kommandzeile
steuern und wenn man 50% weniger saugen muss is das glaub ich jedem recht :P
Somit kann man dann gleich abfragen ob man Downloadfehler hat (wenn sich die Datei nich
entpacken laesst gabs wohl nen Fehler beim saugen )

- Kanns grad nicht nachprüfen aber kümmert sich idhttp um die zeichenkodierung in urls?
Wenn nich wäre das auch kein fehler einzubauen.

- Ich glaub (wenn ichs richtig gesehen habe) kann man mit der Komponente nur Dateien Updaten die im
Anwendungsverzeichnis liegen. Vielleicht könnte man hier noch was einbauen dass auch andere Dateien ersetzt
werden können. (z.B. im Benutzerverzeichnis)


mfg
Volle

Marco Steinebach 11. Okt 2008 16:16

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
Zitat:

Zitat von Volle
arbeite gerade auch an nem Webupdate.

Prima! Dann bringen wir das Update-Doppelpack heraus. ;-)

Zitat:

Zitat von Volle
- Wie verhaelt sich das ganze wenn man nicht als Admin eingeloggt ist?
Ich mein damit wenn man keinen Schreibzugriff auf das Anwendungsverzeichnis hat?
Soweit ich gesehen hab wird das Update abgebrochen oder?

Hat nicht jede Anwendung immer, sogar unter Vista, Schreibzugriff auf ihr eigenes Verzeichnis?

Zitat:

Zitat von Volle
- Wenn sich nur ein paar Dateien geaendert haben (sagen wir in einem Projekt das insgesamt 100mb in vielen einzelnen Dateien hat) dann wird sobald sich die Version aendert das komplette Paket gesaugt oder?

Im Moment leider ja. Das ist natürlich unschön, ich bin aber, bis jetzt, noch auf keine wirklich gute Idee gekommen, wie man Dateien vergleichen kann, ohne sie runterzuladen. Die Größe ist völlig uninteressant, das Datum, hm, da es ja auf einem FTP-Server liegt ... ist auch nicht wirklich 100 % zu gebrauchen, ...
Vielleicht hat hier ja jemand ‚ne Idee?

Zitat:

Zitat von Volle
- Es wird am Anfang abgerufen wie gross das Update ist. Vielleicht wärs geschickt gleich noch abzufragen ob genügend Speicherplatz auf dem Datenträger vorhanden ist. Is kein grosser Aufwand und kann fehler vermeiden :>
(hier braucht man ja ca 2x den speicherplatz den das Update hat)

Joa stimmt, bau ich mit ein.

Zitat:

Zitat von Volle
- Vielleicht noch ne Kompression einbauen? 7z laesst sich ja super ueber die Kommandzeile
steuern und wenn man 50% weniger saugen muss is das glaub ich jedem recht

Hab ich mir noch nicht angesehen, aber ein Tool, was ich zu meinem Programm dazuinstallieren muß, egal wer’s installiert, finde ich nicht wirklich geglückt. Mit einer DLL könnte ich da schon eher leben ...
Aber Kompression ist, natürlich, nicht schlecht.

Zitat:

Zitat von Volle
- Kanns grad nicht nachprüfen aber kümmert sich idhttp um die zeichenkodierung in urls?
Wenn nich wäre das auch kein fehler einzubauen.

Was meinst du genau?

Zitat:

Zitat von Volle
- Ich glaub (wenn ichs richtig gesehen habe) kann man mit der Komponente nur Dateien Updaten die im
Anwendungsverzeichnis liegen. Vielleicht könnte man hier noch was einbauen dass auch andere Dateien ersetzt
werden können. (z.B. im Benutzerverzeichnis)

Hab ich, bis jetzt, aus Vista-Gründen die Finger von gelassen.

Ich sags ja, mit der Zeit wird TMSWebUpdate noch richtig gut. ;-)

Viele Grüße
Marco

fylo 11. Okt 2008 21:25

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von Marco Steinebach
Hallo,
Zitat:

Zitat von Volle
- Wenn sich nur ein paar Dateien geaendert haben (sagen wir in einem Projekt das insgesamt 100mb in vielen einzelnen Dateien hat) dann wird sobald sich die Version aendert das komplette Paket gesaugt oder?

Im Moment leider ja. Das ist natürlich unschön, ich bin aber, bis jetzt, noch auf keine wirklich gute Idee gekommen, wie man Dateien vergleichen kann, ohne sie runterzuladen. Die Größe ist völlig uninteressant, das Datum, hm, da es ja auf einem FTP-Server liegt ... ist auch nicht wirklich 100 % zu gebrauchen, ...
Vielleicht hat hier ja jemand ‚ne Idee?

Hashwete z.B. MD5MD5 oder SHA sind für solche Aufgaben gedacht.

RWarnecke 19. Okt 2008 14:22

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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 ?

Marco Steinebach 19. Okt 2008 18:54

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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

RWarnecke 25. Okt 2008 20:42

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

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 ?

fylo 25. Okt 2008 21:08

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Marco,
Zitat:

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}
);

Marco Steinebach 26. Okt 2008 12:27

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hi Fylo,
Zitat:

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 26. Okt 2008 12:39

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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

RWarnecke 26. Okt 2008 12:53

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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.

Marco Steinebach 26. Okt 2008 13:20

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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

RWarnecke 26. Okt 2008 13:29

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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.

RWarnecke 27. Okt 2008 18:14

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
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 ?

Svenkan 5. Jan 2009 19:44

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Gibt es eine Möglichkeit Einbauen zu können, dass bestimmte Dateien nur bis zu einer bestimmten Version runtergeladen werden? Spart bei neueren Versionen des Programms Traffic!

Weazy 13. Feb 2009 21:29

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
entferne einfach überall
Delphi-Quellcode:
{$IFNDEF Indy10} const {$ENDIF}
, dann gehts;-)

Svenkan 20. Feb 2009 16:29

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Und das bringt mir genau was?
Meine Idee: man gubt für jede Dateinin der INI mit an, bis zu welcher Programmversion diese mitgeliefert werden soll. Oder es sollte einen Parameter geben, bei dem man einstellen kann, dass eine vorhandene Datei (z.B. Readme) nicht erneut heruntergeladen werden soll (Prüfung per FileExists?).

Net7 24. Feb 2009 12:05

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Marco,

ich habe mir deine Kompoponente zwar nicht angeschaut habe aber paralellen zu meinem " alten Updater" gefunden. Also habe ich ihn rausgekramt und weiter verbessert.
Folgendes Ergebnis ist dabei rausgekommen.
Ich habe zwar auch mit einer ini. ähnlichen Datei gearbeitet diese ist aber nicht mehr wirklich notwendig.

Folgenden Ansatz habe ich bereits umgesetzt:

- Container geschrieben der die "neuen Dateien aufnimmt und in eine Datei packt, Inhalt wird per MD5 verifiziert"
- Upgrader alias (Update.exe) geschrieben. Dieser packt die Containerdatei aus und verteilt diese an die Anwendung.

Funktion:

- Der Download des Updates ( der Containerdatei ) erfolgt über das Hauptprogramm.
- Update wird heruntergeladen, dieses beinhaltet eine Containerdatei.
- Das Hauptprogramm startet den Upgrader alias Update.exe und beendet sich selbst.
- Upgrader alias Update.exe verteilt, löscht bzw überschreibt die alten Dateien oder aktualisiert sich selbst.

Vorteile:

- Den Upgrader kann man individuell ans Programmdesign anpassen da der Code immer gleich bleibt.
- Der Upgrader alias (Update.exe) kann sich selbst updaten.
- Updatekomponente wird wie gehabt ins normale Projekt aufgenommen.
- Man hat nur noch eine Containerdatei auf dem Webspace.
- Die Version des aktuellen Programms wird mittels einer version.dat vom Upgrader verteilt. Und vom Hauptprogramm abgefragt. Somit erübrigt sich die ini-änliche datei auf dem Space. ;)
- Man benötigt nur für den Upgrader Adminrechte nicht fürs Hauptprogramm

Das Modul läuft übrigens schon in eines meiner aktuellen Projekte :)

Würde mein Wissen und Lösungsansatz gern mit dir Teilen.
Wenn du Interesse hast kannst du dich ja mal per Pm melden.

Mfg Net7

ChEeTaH 26. Feb 2009 17:39

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
beim Kompilieren kommt dieser Error:

[DCC Fehler] WebUpdateThread.pas(48): E2010 Inkompatible Typen: 'Int64' und 'Integer'

Delphi-Quellcode:
procedure TDownloadThread.Execute;
var
   fs: TFileStream;
begin
   fIdHTTP := TIdHTTP.Create(nil);
   fIdHTTP.OnWork := InternalOnWork; //-> Hier kommt der Error
   fs := TFileStream.Create (fPath + fName, fmCreate or fmShareExclusive);
   try
      fIdHTTP.Get(fURL + fName, fs);
   finally
      fs.Free;
      fIdHTTP.Free;
   end;
end;
Help pls :gruebel:

Net7 1. Mär 2009 13:33

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hi,

Zitat:

Zitat von ChEeTaH
Hallo,
beim Kompilieren kommt dieser Error:

[DCC Fehler] WebUpdateThread.pas(48): E2010 Inkompatible Typen: 'Int64' und 'Integer'

Delphi-Quellcode:
procedure TDownloadThread.Execute;
var
   fs: TFileStream;
begin
   fIdHTTP := TIdHTTP.Create(nil);
   fIdHTTP.OnWork := InternalOnWork; //-> Hier kommt der Error
   fs := TFileStream.Create (fPath + fName, fmCreate or fmShareExclusive);
   try
      fIdHTTP.Get(fURL + fName, fs);
   finally
      fs.Free;
      fIdHTTP.Free;
   end;
end;
Help pls :gruebel:


hab zwar nicht den Komponentencode aber:

OnWork ist vom Typ TWorkEvent der ist so definiert.

Delphi-Quellcode:
TWorkEvent = procedure(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer) of object;

Nun die Frage: Wie ist InternalOnWork definiert etwas so?


Delphi-Quellcode:
InternalOnWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: INT64);
Dann wird das wohl daran liegen ...


Mfg Net7

youuu 9. Aug 2009 10:51

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Kann einer weiter helfen bei dem Problem?


[DCC Fehler] WebUpdateThread.pas(49): E2010 Inkompatible Typen: 'Int64' und 'Integer'

Delphi-Quellcode:
      procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode;
                {$IFNDEF Indy10} const {$ENDIF} AWorkCount: Integer);
ist meines wissen's richtig?

DP-Maintenance 9. Aug 2009 14:35

DP-Maintenance
 
Dieses Thema wurde von "TBx" von "Freeware" nach "Open-Source" verschoben.
Quellen dabei, also Opensource :-)

Net7 10. Aug 2009 10:52

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von youuu
Kann einer weiter helfen bei dem Problem?


[DCC Fehler] WebUpdateThread.pas(49): E2010 Inkompatible Typen: 'Int64' und 'Integer'

Delphi-Quellcode:
      procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode;
                {$IFNDEF Indy10} const {$ENDIF} AWorkCount: Integer);
ist meines wissen's richtig?


Ist es auch.

Tipp, mal versucht die an den Compilereinstellungen zu fummeln?? Bereichsprüfung zur Laufzeit ect. ?

Real-TTX 10. Aug 2009 11:41

Re: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Soweit ich weiß, liegt es an einer alten Indy Version. Ich hatte das Problem auch einmal. Ein altes Projekt von mir, wurde nicht mehr compiled. Hatte zuvor eigentlich nur ein Indy Update gemacht...

Gruß, Real-TTX

thestallion90 11. Mai 2011 11:43

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hey Marco,

wenn ich die Komponente installieren will kommt folgender Fehler (den Int64 und den Indy10 Fehler habe ich beheben können, bei dem hier weiß ich nicht weiter) :

[DCC Fehler] MaryTools.pas(166): E2251 Doppeldeutiger überladener Aufruf von 'StrPas'

Der Fehler bezieht sich auf folgenden Code:

Delphi-Quellcode:
 function GetInfo(const aKey: string): string;
  begin
    Result := '';
    VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
      [LoWord(Integer(VerBufValue^)), HiWord(Integer(VerBufValue^)), aKey]);
    if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
      Result := StrPas(VerBufValue);  //<---Fehler
  end;
Hast Du eine Idee, was ich da machen kann?

Habe Delphi XE, kann es daran liegen?

lg, Marco

himitsu 11. Mai 2011 12:02

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Delphi-Quellcode:
var
  VerBufValue: Pointer;
Es gibt zwei Version von StrPas ... einmal ANSI (PAnsiChar) und Unicode (PWideChar)
da VerBufValue aber nur als Pointer deklariert ist, kann Delphi nicht mehr entscheiden was genommen werden soll.

Lösung:
Deklariere VerBufValue als PChar.



Dank einer automatischen Typkonvertierung könnte man Delphi-Referenz durchsuchenStrPas auch weglassen.
Delphi-Quellcode:
var
  VerBufValue: PChar;

...

function GetInfo(const aKey: string): string;
begin
  VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
    [LoWord(PInteger(VerBufValue)^), HiWord(PInteger(VerBufValue)^), aKey]);
  if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
    Result := VerBufValue
  else
    Result := '';
end;
PS:
Zitat:

Zitat von OH
StrPas ist nur aus Gründen der Abwärtskompatibilität vorhanden.


thestallion90 11. Mai 2011 12:14

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Hey himitsu,

wow, nicht schlechte Reaktionszeit für einen aufgewärmten Thread :P

Allein VerBufValue anders zu deklarieren hat nicht funktionert, da Delphi die Variable an anderer Stelle im Code nichtmehr geschmeckt hat. Habe es jetzt so gelöst:

Delphi-Quellcode:
 function GetInfo(const aKey: string): string;
  var PCharVerBufValue : PChar;  //<--- neue Variable als PChar
  begin
    Result := '';
    VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
      [LoWord(Integer(VerBufValue^)), HiWord(Integer(VerBufValue^)), aKey]);
    if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
      PCharVerBufValue := VerBufValue; //<---Wert wird aus VerBufValue in PChar "umformatiert"
      Result := SysUtils.StrPas(PCharVerBufValue); //<-- Delphi schluckt
  end;

thestallion90 11. Mai 2011 12:21

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Also verstehe ich es richtig, dass

- StrPas nur aus einem PChar einen PAnsiChar macht
- und man das aber mittlerweile nichtmehr braucht weil Delphi das automatisch übernimmt wenn man einem PAnsiChar ein PChar zuweist?

DeddyH 11. Mai 2011 12:22

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Delphi-Referenz durchsuchenSysUtils.StrPas

[edit] IIRC hat man das unter Delphi 1 noch gebraucht, ab Delphi 2 nicht mehr. [/edit]

himitsu 11. Mai 2011 12:27

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
StrPas macht aus einem PAnsiChar einen AnsiString
und seit Delphi 2009 wird auch noch aus einem PWideChar ein UnicodeString gemacht.

Als es die Unicodeversion noch nicht gab, konnte man auch einen untypisierten Zeiger (Pointer) verwenden, welcher dann als PAnsiChar angesehn wurde,
da es nur eine Variante von StrPas, mit einem Zeigertypen gab (die mit PAnsiChar/PChar).

thestallion90 12. Mai 2011 17:17

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
mal noch ne andere Sache:

Ich hab die Update Komponente jetzt eingebunden und in dem Projekt ne neue Form angelegt. Heute morgen war meine exe noch schlanke 2,x MB groß, jetzt sind es fast 10 MB :pale:
Dadurch dauert natürlich jedes Update 1000 mal länger *übertreib*

Mal ehrlich, die units und die Komponente wiegen fast gar nichts, das sind ein paar kB. Auf der Form ist auch nix drauf außer n Memo und ne ProgressBar. Wo kommen denn von jetzt auf gleich die MBs her? Hab auch in den Projekt-Optionen nichts verändert von wegen Debug-Infos und so (die Suche stieß mich immer wieder auf dicke Debug-Infos in der EXE). Kommt das daher, dass in dem Programm jetzt die Indy-komponente integriert ist? Die hatte ich vor dem MSWebUpdate ja noch nicht? Was kann man da machen?

shmia 12. Mai 2011 17:26

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von thestallion90 (Beitrag 1100471)
Kommt das daher, dass in dem Programm jetzt die Indy-komponente integriert ist?

Ja, Indy vergrössert dein Programm relativ stark.
Hätte man auf das gehört, was ich auf Seite 6 im Beitrag #54 geschrieben habe, dann wäre es jetzt kein Problem Indy durch etwas Schlankeres zu ersetzen.

thestallion90 12. Mai 2011 17:46

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von shmia (Beitrag 1100474)
Ja, Indy vergrössert dein Programm relativ stark.
Hätte man auf das gehört, was ich auf Seite 6 im Beitrag #54 geschrieben habe, dann wäre es jetzt kein Problem Indy durch etwas Schlankeres zu ersetzen.

hngrrr, schadee :P naja, dann muss ich halt in den saueren Apfel beißen...

generic 12. Mai 2011 19:48

AW: TMSWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab euch mal meinen Vortrag von den letzten Delphi-Tagen angehängt.
  • nutzt keine Komponenten von dritten
  • nutzt keine Indys
  • nutzt OS integrierte Funktionen wie msxml / bits

Wenn ihr nochmal nach lesen wollt, im Entwickler Mag. 04/10 ist der passende Artikel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.
Seite 3 von 4     123 4      

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