PDA

Visualizza la versione completa : [DELPHI] : ICS - scarico un file via HTTP ma non si apre


Whitecrowsrain
21-06-2012, 12:37
salve a tutti,
ho la fatto la seguente procedura per scaricarmi un file via http dato il suo link:



var
HttpCli1:THttpCli:
begin
HttpCli1.URL:= indirizzo;
HttpCli1.Connection := 'Keep-Alive';
HttpCli1.RcvdStream:=TFileStream.Create(pathTMP+'f ile.exe',fmCreate);
HttpCli1.NoCache:=true;

try
HttpCli1.head;
except
end;
pb.max:=HttpCli1.ContentLength;
try
HttpCli1.get;
except
messageDlg('Errore durante il download : ' + IntToStr(HttpCli1.StatusCode)+' - ' + HttpCli1.ReasonPhrase,mtWarning,[mbOk],0);
HttpCli1DocEnd(nil);
end;
end;

procedure TFSCaricaDP.HttpCli1DocEnd(Sender: TObject);
begin
if HttpCli1.RcvdStream<>nil then
begin
HttpCli1.RcvdStream.Free;
HttpCli1.RcvdStream:=nil;
end;
end;


Il file si scarica, ma quando lo vado ad aprire mi da questo errore:



Richiesta ReadProcessMemory o WriteProcessMemory completata solo parzialmente


Qualcuno di voi ha un idea del perché?
Grazie.

alka
21-06-2012, 13:23
Originariamente inviato da Whitecrowsrain
Il file si scarica, ma quando lo vado ad aprire mi da questo errore [...]

Come lo apri?
Sei sicuro che il file scaricato sia integro?

Whitecrowsrain
21-06-2012, 15:51
Originariamente inviato da alka
Come lo apri?
Sei sicuro che il file scaricato sia integro?

Lo apro con doppio click del mouse (provavo con shellexecute ma non dava risultati) e mi da questo errore!

Ho scaricato il file incollando il link su di un browser ed l'ho confrontato con quello scaricato dalla mia procedura risultato: hanno lo stesso peso, solo che uno ha l'iconcina del setup (quello scaricato manualmente) mentre l'altro ha l'iconcina generica dell'eseguibile.. che può essere?

Whitecrowsrain
21-06-2012, 17:16
ho risoloto..

sostituito il componente ICS con INDY..



Timer1.enabled:=false;
b_annullaTutto.Tag:=0;
pb.position:=0;
pb.Max:=0;
fs:=TFileStream.Create(pathTMP+'setup.exe',fmcreat e);
IdHTTP1.Head(indirizzo);
pb.Max:=IdHTTP1.Response.ContentLength;
try
scaricato:=true;
IdHTTP1.Get(indirizzo,fs);
except
scaricato:=false;
messageDlg('Errore durante il download: '+intToStr(IdHTTP1.ResponseCode)+' '+IdHTTP1.ResponseText,mtWarning,[mbOk],0);
end;
fs.Free;


Funziona che è una meraviglia!!
Chissà eprché con gli ICS non andava.. mha..

Grazie comunque!! :ciauz:

Loading