Pesquisei soluções para aplicações .NET que reproduzissem esse mesmo comportamento, permitindo atualizações constantes e sem a intervenção do usuário. Infelizmente não encontrei nenhuma solução pronta que atendesse minhas necessidades.
A primeira opção, logicamente, foi utilizar o ClickOnce. Mas, devido a suas limitações, ele não me atendeu. A seguir, procurei outras soluções, mas nenhuma atendia necessariamente aquilo que eu queria. Por fim, resolvi desenvolver eu mesmo um componente que resolvesse esse problema. Foi assim que surgiu o AppUpdater (sim, eu sei, esse nome é horrível).
Características do AppUpdater
As principais características do AppUpdater são:- as atualizações são feitas via web (download dos arquivos);
- o processo de atualização não necessita da intervenção do usuário;
- o tamanho de uma atualização é mínimo. A atualização faz o download apenas das partes modificadas de cada arquivo atualizado (deltas), mesmo em arquivos binários.
Vale ressalta um aspecto muito importante: o tamanho da atualização. O componente fará o possível para baixar a menor quantidade possível de dados.
- Os novos arquivos são baixados de forma compactada (gzip). Com isso, um executável de 200 kB, fica com cerca de 60 kB;
- Os arquivos que não foram alterados, não são baixados novamente;
- No caso de arquivos modificados, apenas as partes alteradas são baixadas (delta). O componente faz o download do delta, aplica na versão antiga do arquivo e gera assim a nova versão. O tamanho do delta obviamente vai depender do que foi modificado. Apenas por curiosidade, adicionei a chamada a um MessageBox em uma aplicação de 200 kB, e o delta dessa alteração ficou com 639 bytes.
Utilizando o componente
Para utilizar o componente, recomendo a leitura da documentação. De forma resumida, o que deve ser feito para utilizá-lo é:
- a aplicação deve seguir uma certa estrutura de diretórios pré-determinada;
- deve existir um servidor web que irá disponibilizar as atualizações;
- a aplicação deve ativar o código que verifica as atualizações.
Para que o componente funcione, o único código necessário é o seguinte:
AutoUpdater autoUpdater = new AutoUpdater(UpdateManager.Default); autoUpdater.SecondsBetweenChecks = 3600; autoUpdater.Start();
Concluindo
Não vou repetir aqui o passo-a-passo de como utilizar o componente, acredito que a documentação já trate de todos os assuntos necessários para utilizá-lo.Se algo não ficou claro, por favor, entre em contato. Eu altero a documentação ou posso criar um tutorial esclarecendo quaisquer dúvidas que surgirem.
Por fim, tenho que agradecer a Fernanda Moratelli que me ajudou no desenvolvimento do AppUpdater!