Fórum Problema com atualização do sistema pela Internet #261032

03/12/2004

0

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

Responder

Posts

03/12/2004

Xanatos

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!!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar