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

Olá, pessoal, estou de volta com mais um artigo técnico!
Hoje em dia é comum encontrar aplicativos que são atualizados automaticamente pela internet sem a intervenção do usuário. Na verdade, estes aplicativos possuem rotinas específicas que os permitem ser capazes de gerenciar suas próprias atualizações.
Já pensou em implementar essa funcionalidade no seu projeto?
Essa série de artigos, divididas em 3 partes, apresenta um passo-a-passo para codificar uma atualização automática simples, porém, funcional, em Delphi com FTP!

Introdução

Se você utiliza o CCleaner, TeamViewer, Notepad++, Skype, entre outros, já deve ter recebido uma notificação de que uma nova versão estava disponível, não é? Enquanto alguns destes aplicativos disponibilizam um botão para acessar o link direto para download da nova versão, outros são capazes de baixar a atualização e instalá-la automaticamente no computador. Estes últimos sempre me chamaram a atenção. Refleti sobre como seria possível implementar essa funcionalidade com Delphi sem muita complexidade. Uma das formas mais simples que idealizei, na qual apresentarei nessa série de artigos, é através de arquivos INI e uma conexão FTP.

Ao meu ver, uma das maiores vantagens da atualização automática é dispensar a morosidade do trabalho de atualizar o software em cada cliente, um por um. Antes de implementar essa funcionalidade em um dos meus projetos, era necessário acessar o computador do cliente remotamente e transferir o novo executável para cada versão liberada. Algumas vezes, eu demorava aproximadamente meio período para concluir a atualização em todos os usuários. Agora, apenas faço o upload da versão para uma área FTP e vou descansar. 🙂

Servidor FTP

Pois bem, pessoal, vamos ao trabalho!

O primeiro passo é adquirir um acesso FTP em algum serviço de hospedagem. Mas, atenção: nem todas hospedagens fornecem conexões FTP e, aquelas que fornecem, geralmente não aceitam uploads de executáveis (.exe) por questões de segurança. Esse foi um dos problemas que lidei ao prosseguir com essa implementação, mas falaremos disso mais tarde.

Após algumas pesquisas, encontrei o Free Web Hosting Area (FreeWHA) que, como o próprio nome induz, é grátis! Basta fazer um cadastro receber as configurações de acesso ao FTP. Clique neste link, digite o nome desejado para o endereço no campo “Free subdomain hosting” (para verificar a disponibilidade) , selecione “orgfree.com” na caixa ao lado e clique em “Proceed”. Para acompanhá-los no artigo e simplificar o tutorial, fiz um cadastro fictício nessa hospedagem:

Vefificação de endereço disponível no FreeWHA

Na próxima janela, preencha o e-mail e uma senha de acesso:

Informações para cadastro no FreeWHA

Pronto! Ao avançar, as informações do endereço FTP já estarão disponíveis!

Informações da conta de FTP no FreeWHA

Futuramente, caso seja necessário entrar no painel de controle da conta para alterar os dados ou consultar os endereços dos servidores, acesse este link.

Usando um cliente FTP

Antes de avançar apara os próximos passos, recomendo fortemente a utilização de um cliente FTP para facilitar a transferência de arquivos. Embora essa operação possa ser feita pelo Windows Explorer (ou Explorador de Arquivos, no Windows 10), um cliente FTP possui vários recursos exclusivos para trabalhar com esse tipo de conexão, como painéis de arquivos, limite de uploads/downloads, resumo de transferências, marcadores e log de mensagens.

Neste artigo, utilizarei o FileZilla. É grátis, leve e fácil de usar. Para baixá-lo, clique aqui.

Após instalá-lo, acesse o menu Arquivo > Gerenciador de Sites. Na janela exibida, clique em “Novo Site” e preencha os campos com os dados do servidor FTP, conforme ilustrado abaixo:

Configuração de FTP no FileZilla

Para fazer um teste, clique em “Conectar”. Se tudo ocorrer como esperado, estes serão os arquivos padrão exibidos no FTP:

Arquivos do FTP exibidos no FileZilla

Criaremos, então, um novo diretório que armazenará o pacote de atualização e o arquivo INI contendo as informações da nova versão. Clique com o botão direito na lista de arquivos do diretório FTP e selecione “Criar Pasta”, nomeando-a como “atualizacao”.

Criação da pasta de atualização no FTP

Arquivos INI

Agora, criaremos dois arquivos INI no disco local, responsáveis por comparar as versões e identificar se há a necessidade de atualização:

  • VersaoLocal.ini: ficará gravado localmente no mesmo diretório do programa e armazenará o número da versão que está atualmente instalada no cliente;
  • VersaoFTP.ini: ficará disponível no diretório FTP e armazenará o número da versão mais recente do programa.

O conteúdo do arquivo “VersaoLocal.ini” será este:

Salve-o no mesmo diretório em que se encontra o programa.

Por sua vez, o arquivo “VersaoFTP.ini” terá a mesma estrutura, diferindo apenas no nome da seção:

Salve-o em uma pasta temporária e depois transfira-o para a pasta “atualizacao” no diretório FTP. Para isso, no FileZilla, basta arrastar o arquivo para dentro dela:

Upload do arquivo de versão para o FTP

Perfeito!

Acompanhe a lógica: na tela de atualização do programa, acessaremos o diretório FTP para baixar o arquivo “VersaoFTP.ini”. Em seguida, faremos a leitura do conteúdo dos dois arquivos INI para comparar os números das versões. Se o número da versão local (por exemplo, “1.0.0”) for diferente (menor) do que o número da versão que está no FTP (por exemplo, “1.0.1”), então poderemos assumir que há uma nova versão disponível. Legal, hein?

Compactação do executável

Porém, lembre-se que no início do artigo mencionei que servidores FTP normalmente não aceitam uploads de executáveis. Por isso, teremos que compactar o nosso executável antes de transferi-lo para o FTP. Nesse tutorial, o arquivo compactado deverá sempre se chamar “Atualizacao.rar” para que a aplicação o encontre para baixá-lo.

Mesmo assim, encontramos mais um impasse. O Delphi não possui uma função nativa para descompactação de arquivos com extensão RAR. É necessário a utilização de aplicativos externos ou a instalação de componentes de terceiros. Para não gerar complexidade, optei pela primeira opção. Usaremos o 7-Zip! Apenas dois arquivos desse aplicativo são suficientes: o executável e uma DLL. Baixe-os aqui e, em seguida, coloque-os na mesma pasta em que está a aplicação.

Pessoal, só para confirmação, estes são os arquivos que deverão estar em uma mesma pasta:

  • Executável
  • VersaoLocal.ini
  • 7z.exe
  • 7z.dll

O outro arquivo INI (VersaoFTP.ini) será baixado para essa pasta em tempo de execução.

Bom, o próximo passo é codificar uma rotina para baixar a atualização, descompactá-la, substituir o executável existente e atualizar o número da versão para que os dois arquivos INI fiquem iguais. Nossa, como faremos tudo isso?

 

Bom, aguardem a segunda parte dessa série de artigos!
Abraço e até a próxima semana!


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