Sistema de Atualização Automático
Índice
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) 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.
- 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).