Mudanças entre as edições de "Sistema de Atualização Automático"

De UniWiki
Ir para: navegação, pesquisa
 
Linha 79: Linha 79:
 
<span style="font-size:12pt">'''Pacote Zip - app_v0.0.0.0.zip'''</span>
 
<span style="font-size:12pt">'''Pacote Zip - app_v0.0.0.0.zip'''</span>
  
O arquivo ZIP deverá conter os arquivos de atualização da aplicação e tambem o programa auxiliar '''"usleep.exe"''' todos os arquivos devem estar obrigatoriamente na raiz do zip (pastas compactadas dentro do arquivo serão ignoradas).
+
O arquivo ZIP deverá conter:
 +
 
 +
- Os arquivos de atualização da aplicação.
 +
 
 +
- Uma cópia do arquivo de etiqueta (versao.txt)
 +
 
 +
- O programa auxiliar '''"usleep.exe"'''
 +
 
 +
Todos os arquivos devem estar obrigatoriamente na raiz do zip (pastas compactadas dentro do arquivo serão ignoradas).
  
  

Edição atual tal como às 15h28min de 11 de fevereiro de 2020

Sistema de Atualização para Aplicações Uniware

Este documento descreve o funcionamento e uso do Sistema de Atualização para Aplicações Uniware

1 Descrição Geral

O sistema de SAAU (Sistema de Atualização para Aplicações Uniware) é composto dos seguintes elementos:

  • Um repositório centralizado de pacotes localizado em http://uniware.com.br/updates no qual ficam disponíveis os pacotes de atualização das aplicações correspondentes.
  • Código client Classe TUpdateVersion no arquivo:
  Delphi 5 - CVS\_sharedunits\UUpdate.pas          
  Delphi 7 - CBS_D7\_SharedUnits\UUpdate.pas
  XE10 Rio - CVS_XE10\_SharedUnits\UUpdate.pas


Para que a aplicações compatíveis com a atualização automática possam ser atualizadas corretamente, os seguintes itens devem ser providenciados:

  1. 1) Um diretório com o nome da aplicação (em letras minusculas) deve ser criado em uniware.com.br/updates para disponibilização do pacote de atualização.
  1. 2) O pacote de atualização deve seguir as regras de publicação descritas abaixo



2 Regras de Publicação de Pacote

Os pacotes de atualização são compostos de dois arquivo, um arquivo de etiqueta do pacote com o nome fixo "versao.txt" contendo a descrição do pacote e um ZIP contendo todos os arquivos necessários para a atualização da aplicação e uma cópia do arquivo de etiqueta (versao.txt).

versao.txt

  Exemplo arquivo versao.txt:
    10.0.2.0
    11/02/2020
    tsprint_v10.0.2.0.zip
    count=4
    file1=TSPrint.exe|.\
    file2=TSImgCap.exe|.\
    file3=TSFingerCap_NIT.exe|.\
    file4=TSFingerCap_GRI.exe|.\

Descrição

 Linha 1: 10.0.2.0
 Linha 2: 11/02/2020
 Linha 3: tsprint_v10.0.2.0.zip
 Linha 4: count=4
 Linha 5: file1=TSPrint.exe|.\
 Linha 6: file2=TSImgCap.exe|.\
 Linha 7: file3=TSFingerCap_NIT.exe|.\
 Linha 8: file4=TSFingerCap_GRI.exe|.\


  • Linha 1 - Versão da aplicação disponível no pacote.
  • Linha 2 - Data de publicação do pacote
  • Linha 3 - Nome do arquivo zip que contem os arquivos para atualização (usar o padrão de nomes como no exemplo)
  • Linha 4 - Contador de arquivos, imdica quantos arquivos constam na lista (files1 a files(n))
  • Linha 5 a 8 - Relação dos arquivos existentes no pacote e respectivos paths.
  Os paths dos arquivos devem ser especificados de maneira relativa ao path do executável da aplicação (o executável que executa a atualização),
  por padrão usa-se .\ para diretório da aplicação.
  O sistema de atualização tambem utiliza esta lista de arquivos para verificar a integridade do pacote ao efetuar o download.



Pacote Zip - app_v0.0.0.0.zip

O arquivo ZIP deverá conter:

- Os arquivos de atualização da aplicação.

- Uma cópia do arquivo de etiqueta (versao.txt)

- O programa auxiliar "usleep.exe"

Todos os arquivos devem estar obrigatoriamente na raiz do zip (pastas compactadas dentro do arquivo serão ignoradas).



3 Ajuda ao Programador


Abaixo segue um exemplo de rotina de atualização de aplicação, convêm que a rotina de verificação de atualização seja o primeiro processo executado na carga do programa pois sempre que a aplicação for atualizada ela será reiniciada.


Requisitos:

- Adicionar o arquivo UUpdate.pas ao projeto conforme a versão de delphi utilizada (Ver "Descrição Geral" acima).

- Adicionar UUpdate na uses

 // Exemplo metodo Atualizar - Verifica se existe uma atualização disponível e se for o caso atualiza a aplicação.
 procedure TFMain.Atualizar;
 var
   UPD : TUpdateVersion;
   S : String;
   i : Cardinal;
 begin
   UPD := TUpdateVersion.Create(Nil);
   UPD.UrlPath := APP_UPDATE_URL;
   try
      LogF('Verificando atualizações disponíveis...');
      if (UPD.HasUpdate) Then begin
         // testa para ver se não houve uma tentativa frustrada nas ultimas 2 horas para a nova versão
         if (not UPD.HitVersion) then begin
            LogF('   Preparando atualização de ' + ExtractFileName(ParamStr(0))+' para a versão ' + UPD.Versao);
            LogF('   Baixando arquivos da atualização...');
            if (UPD.Download) then begin
               if (UPD.PreparaAtualizacao) then begin
                  S := UPD.ScriptFileName;
                  FLog.Log('Atualizando arquivos...');
                  UPD.putVersion;

                  I := ShellExecute(0,'open',PChar(S),,,SW_MINIMIZE);
                  if (I <= 32) then begin
                     FLog.Erro('Erro ao executar o script de atualização. Codigo do erro: '+IntToStr(I));
                     S := ;
                     Case I of
                       0 : S := 'The operating system is out of memory or resources.WrapText';
                       ERROR_FILE_NOT_FOUND : S := 'Script não encontrado ('+UPD.ScriptFileName+').';
                       ERROR_PATH_NOT_FOUND: S := 'Caminho não encontrado ' + ExtractFilePath(UPD.ScriptFileName);
                       ERROR_BAD_FORMAT: S := 'Formato do arquivo inválido.';
                       SE_ERR_ACCESSDENIED: S:= 'Acesso negado ao arquivo de script.';
                       SE_ERR_ASSOCINCOMPLETE: S := 'Associação de tipo inválida ou incompleta para extensão .bat';
                       SE_ERR_NOASSOC	: S := 'Erro: SE_ERR_NOASSOC	.';
                       SE_ERR_OOM	: S := 'Não há memória disponível para completar a operação.';
                       SE_ERR_SHARE: S := 'Ocorreu uma violação de compartilhamento ao acessr o arquivo de script.';
                     end;
                     if (S <> ) then begin
                        LogF('   Erro: '+S, True);
                     end;
                  end else begin
                     Close;
                  end;

               end else begin
                  LogF('   Erro ao descompactar o pacote de atualização.',true);
               end;
            end else begin
               LogF('   Erro ao baixar o pacote de atualização.', True);
            end;
         end;
      end else begin
          lbVersão.Caption := 'Versão  ' +  UPD.AppVersao;
          LogF('   '+ExtractFileName(ParamStr(0)) + ' já está na ultima versão disponível.');
      end;
   finally
      UPD.Free;
   end;
 end;


Para exemplo de atualização de Serviços do Windows, consulte o UniSMS (serviço de SMS do Unilab).