Newsgroup: it.comp.lang.delphi
Titolo: [ot??] Win7 e la cache dei files scaricati da internet mi causa problemi con applicazione delphi

Salve,
   per gli aggiornamenti automatici di alcuni miei software scritti con 
d5 procedo come segue:
Scarico un file .ini da internet, ne estraggo il contenuto e se del caso 
scarico il vero file di setup per l'aggiornamento.
 
Fino a Win XP ha funzionato regolarmente ma da quando c'ï¿œ win7 non va piï¿œ.
 
Funziona soltanto dopo una pulizia dei files temporanei fatta con 
cclean. Infatti se provo a scaricare il file .ini da internet, viene 
sempre fuori il vecchio file che ï¿œ stato scaricato precedentemente.
 
Qualcuno sa come aggirare questo ostacolo? Grazie.
 
Ciao.

> Fino a Win XP ha funzionato regolarmente ma da quando c'ï¿œ win7 non va piï¿œ.
In quale cartella vengono "scaricati" i file?
Se questa si trova all'interno della cartella Programmi, con le impostazioni di sicurezza per l'account attive, è difficile che possa funzionare.
 


il file viene scaricato in "C:\users\utente\appdata\temp\" per cui 
l'utente ha certamente i diritti di scrittuta tanto che dopo aver 
cancellato la cache via cclean, il file viene effettivamente scaricato 
ma non piï¿½ aggiornato anche se questo, sul web, cambia il proprio 
contenuto e la propria dimensione.
 
Grazie, ciao.
 

> il file viene scaricato in "C:\users\utente\appdata\temp\" per cui 
Scusa se ti ho chiesto per il percorso, di solito è un problema che si riscontra spesso.
 
Io utilizzo un sistema simile per gli aggiornamenti, lavorando sia con XP, Vista e Seven oltre alle varie versioni Server, 32 e 64 bit, con il controllo account attivo e non, ma non ho avuto problemi del genere.
Quale metodo/componente utilizzi per scaricare gli aggiornamenti?


� una funzione presa da delphi.about:
 
{
============================================================================================================
< GetInetFile >
-----------------------------------------------------------------------------------------------------------
Esegue un'applicazione esterna.
------------------------------------------------------------------------------------------------------------
FileURL  = URL del file da scaricare
FileName = Nome del file una volta scaricato
Result   = Restituisce True se l'operazione � andata a buon fine
Autore   = 
Delphi.About.com
 
Modificata il 02/04/2007
============================================================================================================
}
 
function GetInetFile(const fileURL, FileName: String;
                      AProgressBar: TProgressBar; var AAnnulla: 
boolean): boolean;
const
   BufferSize = 1024;
var
   hSession, hURL: HInternet;
   Buffer: array[1..BufferSize] of Byte;
   BufferLen: DWORD;
   f: File;
   sAppName: string;
begin
   Result := False;
   sAppName := ExtractFileName(Application.ExeName);
   hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
                              nil, nil, 0);
   try
     hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
     if (hURL <> nil) then
     begin
       try
        AssignFile(f, FileName);
        Rewrite(f, 1);
        repeat
         InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
         BlockWrite(f, Buffer, BufferLen);
         if (AProgressBar <> nil) then
         begin
           AProgressBar.Position := AProgressBar.Position + 
Integer(BufferLen);
           Application.ProcessMessages;
         end;
         if AAnnulla then
         begin
           if (MessageBox(0, 'Confermi l''annullamento del download 
dell''aggiornamento?',
               'Richiesta di annullamento del download',
               MB_ICONQUESTION or MB_YESNO or MB_HELP or MB_DEFBUTTON2) 
= idYes) then
             Break;
           AAnnulla := False;
         end;
        until BufferLen = 0;
        CloseFile(f);
        Result := not AAnnulla; //True;
       finally
        InternetCloseHandle(hURL);
       end;
     end;
   finally
     InternetCloseHandle(hSession);
   end;
end;
 

Utilizzavo anch'io una funzione simile in passato.
Attualmente, più per pigrizia che altro, utilizzo il componente TNMHTTP (in Delphi 5)
 
Con procedure simili a quella che hai pubblicato effettuavo delle operazioni FTP. Poi a seguito di problemi a non finire sono passato ad Indy.


 
prova a mettere INTERNET_FLAG_RELOAD nei flag di InternetOpenURL
 
http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx
 
 
ciao


 
Cosě funziona :) Grazie
 
Ciao.