Problema com atualização do sistema pela Internet

Delphi

03/12/2004

Galera,

Qual a melhor forma de se fazer a verificação e atualização de um sistema pela Internet? Pois o q estou fazendo é baixar um arquivo DAT via FTP, pois se baixar via HTTP sempre é carregado o arquivo que está no cache da máquina e não o que está no site. Quando concluído o donwload via FTP é lido a versão dentro do file e sendo superior o sistema faz o download automático das atualizações.

Existe alguma forma melhor de se fazer isso? Existe algum problema se for feito por exemplo mil conexões FTP dentro do servidor do provedor ao mesmo tempo? Pois estou preocupado com congestionamento e indisponibilidade de atualização, pois o sistema tem que estar disponível 24hrs sem falha.

Obrigado...


Hell_gentleman

Hell_gentleman

Curtidas 0

Respostas

Xanatos

Xanatos

03/12/2004

voce pode fazer o download via HTTP mesmo e ai vc pode por exemplo excluir o conteudo da Cache antes de fazer o download ou usar a funcao que faz sem usar a cache

function DownloadURL_NOCache(const aUrl: string; var s: wideString): Boolean;
var
  hSession: HINTERNET;
  hService: HINTERNET;
  lpBuffer: array[0..1024 + 1] of Char;
  dwBytesRead: DWORD;
begin
  Result := False;
  s := ´´;
  // hSession := InternetOpen( ´MyApp´, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hSession := InternetOpen(´MyApp´, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    if Assigned(hSession) then
    begin
      hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(hService) then
        try
          while True do
          begin
            dwBytesRead := 1024;
            InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
            if dwBytesRead = 0 then
              break;
            lpBuffer[dwBytesRead] := 0;
            s := s + lpBuffer;
          end;
          Result := True;
        finally
          InternetCloseHandle(hService);
        end;
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;


para excluir os arquivos em Cache:

procedure DeleteIECache;
var
  lpEntryInfo: PInternetCacheEntryInfo;
  hCacheDir: LongWord;
  dwEntrySize: LongWord;
begin
  dwEntrySize := 0;
  FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
  GetMem(lpEntryInfo, dwEntrySize);
  if dwEntrySize > 0 then
    lpEntryInfo^.dwStructSize := dwEntrySize;
  hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
  if hCacheDir <> 0 then
  begin
    repeat
      DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
      FreeMem(lpEntryInfo, dwEntrySize);
      dwEntrySize := 0;
      FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize);
      GetMem(lpEntryInfo, dwEntrySize);
      if dwEntrySize > 0 then
        lpEntryInfo^.dwStructSize := dwEntrySize;
    until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize);
  end;
  FreeMem(lpEntryInfo, dwEntrySize);
  FindCloseUrlCache(hCacheDir);
end;


Atravez dessa funcao vc pode criar outro só para excluir o arquivo que vc vai baixar...

Espero que ajude!!!!


GOSTEI 0
POSTAR