Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Download (Thread) (https://www.delphipraxis.net/17400-download-thread.html)

devnull 4. Mär 2004 17:38


Download (Thread)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich versuche, während der Laufzeit meines Programms über eine "Live-Update"-Funktion neuere Versionen desselbigen
Progrs herunterzuladen. Dazu verwende ich einen Thread.

Aufgerufen wird die ganze Prozedur mit
DownloadThread :=
TDownloadThread.Create('programmname',pos+'\NewVer sion_'+internet_ver+'.exe',server_adress+updatepos );


Das Problem ist, dass die heruntergeladene Datei sich nicht öffnen lässt (fehlende Bytes oä.).
Wenn man erneut auf Download/Update klickt, kommt gleich die Meldung "Download fertiggestellt", obwohl
das Prog noch nich mal angefangen hat, etwas zu laden.


Bitte helft mir
devnull

devnull 5. Mär 2004 11:25

Re: Download (Thread)
 
weis keiner was ??? muss man vielleicht den thread (download...) irgenwie schließen / beenden ?

himitsu 5. Mär 2004 11:48

Re: Download (Thread)
 
Ich arbeite seit Kurzem auch damit (UrlDownloadtoFile). Und es geht super, allerdings nicht in 'nem eigenem Thread. An den Thread dürfte es aber nicht liegen.

Du darfst dabei aber nicht vergessen, das diese Download-Art vorrangig die Datei-Kopie aus dem IE-Cache verwendet. Wenn du also ein zweite Mal startest geht es natürlich viel schneller.

Bei mir was es aber auch manchmal so, das einige Dateien nicht vollständig auf den Server hochgeladen wurden (einige GIF's) und daher auch nicht vollständig runtergeladen werden konnten. Zusätzlich befand sich manchmal noch eine alte Kopie der Datei in IE-Cache und unter bestimmten Voraussetzungen lädt das Teil dann nicht dir neue Version runter, sondern verwendet weiterhin das alte Teil.

Diese beiden Probleme (alte/defekte Dateien) hab ich mit Hilfe eines Hashvergleichs beseitigt.

Auf dem Server befinden sich 2 Hash-Listen. Einmal die Liste der Dateien für das Update und noch eine kleine zur Kontrolle das Hash-Liste.

Nach dem Download jeder Datei wird diese geprüft und bei einem Fehler nochmal geladen ...

devnull 5. Mär 2004 12:35

Re: Download (Thread)
 
danke für deine aw.

wie bekomm ich den hash-wert einer datei raus ? gibts da irgendwo ne funktion oder so ?

himitsu 5. Mär 2004 12:50

Re: Download (Thread)
 
Da brauchst du hier nur mal nach Hier im Forum suchenHash suchen, da gibt es 'ne Menge.

stoxx 5. Mär 2004 13:19

Re: Download (Thread)
 
Hallo devnull,

das ist alles äusserst schlecht, was Du da machst.
Wenn Du urlDownloadFile in einem Thread aufrufst, wird auf DownloadThread.UpdateForm1; in diesem Thread aufgerufen.
Und da Du in UpdateForm auf die VCL zugreifst (Buttons, Labels) MUSS dieser Aufruf mit Synchronize erfolgen.!
Undbedingt.
Noch viel Besser wäre natürlich, wenn Du ein Update Event einrichtest.
Was ist, wenn Du diesen DownloadThread nochmal verwenden willst, aber z.B. mit einem ganz anderen Form ?

Du solltest Dir also ein Status Event einrichten. Und das aktualisieren von Buttons übernimmt das FORM SELBER !

TDownStatusEvent = procedure( sender : Tobject; progress, progressmax, status : integer) of object;

Nun zu Deinem Problem.

Das

Code:
BINDSTATUS_ENDDOWNLOADDATA : begin
        PagesDlg1.Label4.Caption := 'Download "'+fileinfo+'" fertiggestellt ...';
        DownloadThread.UpdateForm1;
    end;
ist nur ne MEldung, da ist Dein Download noch nicht zu ENDE.

Du musst also in BINDSTATUS_ENDDOWNLOADDATA eine Variable "FERTIG" setzen.
Und dann

Code:
try
   UrlDownloadtoFile(nil, PCHAR(runterladen), PCHAR(speichernals), 0, CDownStatus);
  if not abgebrochen or sonstwas and fertig then
   begin
    if MessageDlg ('Programm beenden und Update entpacken ?',mtConfirmation,[mbYes,mbNo],0)
        = mrNo then exit;
    ShellExecute(self.Handle, NIL, pchar(speichernals),'','',SW_SHOWNORMAL);
    halt;
   end;


  finally
    cDownStatus.Free;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 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