[Delphi] Atualização Automática – Parte 3 – Considerações

Leitores, vamos fechar a série de artigos sobre atualização automática? Vamos!
A terceira e última parte dessa série traz algumas observações sobre as codificações do artigo anterior, com o objetivo de esclarecer dúvidas que talvez tenham surgido e também para explicar os recursos que utilizei no tutorial. Recomendo a leitura desse artigo.

Enquanto escrevia os dois primeiros artigos da série, procurei prever possíveis dúvidas e dificuldades dos leitores. O resultado foi a lista de observações abaixo, cada uma com sua respectiva justificativa. Mesmo assim, sintam-se à vontade para usar o formulário de comentário no final da página para questionar ou complementar algo, ok?

1) Arquivo INI

Para manter o aspecto didático no artigo, optei pela utilização de arquivos INI devido à simplicidade de manipulação, mas isso não é uma regra. A informação da versão pode ser armazenada de várias formas, como uma tabela no banco de dados, um arquivo XML ou até mesmo um documento na nuvem. Além disso, a informação da versão também pode ser obtida nas propriedades do executável através da seguinte função:

2) Clean Code

Alguns métodos do artigo anterior podem ser melhorados ao aplicar as práticas de Clean Code. Por exemplo, os métodos que consultam a versão local e a versão do FTP são bastante semelhantes e podem ser unificados, recebendo um parâmetro para definir qual arquivo será lido. Do mesmo modo, as instruções que excluem os arquivos existentes também podem ser refatorados para um novo método definido como ExcluirArquivo. Porém, mais uma vez, mantive a implementação bem detalhada para facilitar a compreensão.

Além disso, os nomes dos componentes também devem ser adequados, como a alteração do nome do componente TProgressBar de ProgressBar1 para ProgressBarDownload.

3) Validação da conexão com a internet

A rotina de atualização pode apresentar algumas exceções caso o computador esteja desconectado da internet ou ocorrer uma queda. Para garantir a confiabilidade, podemos implementar uma função que verifica se há uma conexão válida e utilizá-la em uma condição IF antes da tentativa de acesso ao FTP:

4) Exibir a quantidade de KBytes baixados

Lembram-se que implementamos a porcentagem do download no evento OnWork do componente TIdFTP? Pois bem, no mesmo evento, podemos exibir também a quantidade de KBytes que estão sendo baixados em tempo real:

5) Reiniciar a aplicação após a atualização

Essa é uma boa ideia, hein? Afinal, a atualização só entrará em vigor quando o sistema for fechado e iniciado novamente. Para executar essa ação, basta implementar os comandos abaixo quando a atualização for finalizada:

6) Executar script

Muitas vezes, só atualizar o executável não é o suficiente. É necessário executar também alguns scripts no banco de dados como parte da atualização. No entanto, essa ação depende de qual banco de dados está sendo utilizado no projeto. Para Firebird, por exemplo, pode-se utilizar o utilitário isql para executar scripts via linha de comando, assim como foi feito com o 7-Zip no artigo anterior. Veja um exemplo da sintaxe:

Opcionalmente, o desenvolvedor também pode criar um aplicativo exclusivo para essa finalidade, executado durante a atualização.
Se este procedimento for necessário, entre em contato comigo. Talvez eu possa ajudá-lo!

7) Copiar arquivos adicionais

Recebi essa dúvida na semana passada do leitor Marcos Vinicius (obrigado pela questão, Marcos!).

A cópia de arquivos adicionais, como uma DLL, por exemplo, pode ser feita por meio de um arquivo de lotes (extensão BAT), contendo comandos do MS-DOS, como no exemplo a seguir:

A rotina de atualização, por sua vez, deve executar esse arquivo com a função ShellExecute:

8) Log de atualização

Procure registrar o processo de atualização em algum local, como um arquivo de texto, contendo os seguintes dados:

  • Data e hora da atualização
  • Tamanho do pacote de atualização
  • Usuário conectado
  • Versão que está sendo atualizada
  • Resultados do(s) script(s)

Essas informações podem ser relevantes para atividades de manutenção, estatísticas (quantidade de atualizações em período) ou simplesmente para controle interno. Para complementar, este log pode ser enviado automaticamente ao desenvolvedor por e-mail após o término da atualização.

 

Bom, pessoal, aqui encerro a série de artigos sobre atualização automática.
Dúvidas? Deixe um comentário. Abraço!


Confira as outras partes desse artigo:

[Delphi] Atualização Automática – Parte 1
[Delphi] Atualização Automática – Parte 2
[Delphi] Atualização Automática – Parte 3


 

André Celestino