Vou explicar como funciona o sistema de atualização automática que 
projetei e desenvolvi aqui onde trabalho. Não pretendo que criar um 
manual de como fazer, mas creio que dê pra explicar resumidamente como 
funciona e inspirar aqueles que pretendem fazer algo parecido.

Há uma base MySQL na internet com os "Updates" de cada produto (nossos 
softwares). Cada Update, atualiza um conjunto de versões. Exemplo: o 
update "ProgramaX 1.5" atualiza as versões do Programa X 1.3 e 1.4.

Os updates são setups gerados com o NSIS (poderia ser outro gerador de 
instalações, mas escolhemos esse). Cada setupt de update leva apenas as 
atualizações necessárias, não a instalação inteira. Isso pode incluir o 
EXE do programa, DLL's, arquivos de relatório etc. 

Um detalhe importante é a atualização do banco de dados. Aqui 
trabalhamos com databases versionados. Ex: a primeira versão liberada 
tem o database 1.0. À cada alteração no database, incrementamos a versão 
(1.1, 1.2 ou 2.0 se a alteração for expressiva).

Aqui criamos uma linguagem para contemplar os scripts de atualização e 
os upgrades de versão (XML + SQL + criptografia). Chamamos essa 
linguagem de DBML (Databse Maintenance Language). Um arquivo DBML contêm 
o script para realizar cada "salto" de versão. Ex: da versão 1.0 para 
1.1 foi criado um índice; da versão 1.1 para 1.2 foi criada uma nova 
tabela e assim por diante.

O setup de atualização carrega consigo um arquivo DBML (sempre que tiver 
acontecido uma alteração de database) com os "saltos" de versão (de 
database) contemplados pela atualização. Ex: se a atualização faz update 
da versão (de database) 1.0 e 1.1, o DBML conterá apenas esses "saltos" 
de versão.

Agora a parte da atualização automática:

Foi criado um serviço PHP que consulta a base MySql (citada no início) e 
informa se há atualização disponível para uma determinada versão.

Nossos sistemas carregam consigo um componente que chamei de 
"SelfUpdate" (Atualização de si mesmo). Esse componente, 1 vez por dia, 
dispara o serviço PHP que diz se há atualização para a versão do produto 
em execução. Se houver atualização, o PHP devolve a URL para download e 
o componente faz download do setup de atualização. Isso acontece numa 
outra thread, então o sistema continua podendo ser operado. No fim do 
download, o usuário é avisado que na próxima execução, o programa será 
atualizado. Na próxima execução, se não houver nenhum outro usuário 
utilizando o programa, é executado o setup de atualização, que atualiza 
os arquivos do programa e o banco de dados, se necessário.

É assim que fazemos. Funciona há alguns anos com cerca de 2 mil usuários.

Qualquer dúvida, postem aqui que posso tentar ajudar na medida do possível.

Um abraço,
Dirlei.

snakesjb escreveu:
>  
>
> Tenho um sistema feito em Delphi 2007 e banco de dados firebird...Como 
> o sistema ja fooi instalado em alguns clientes e o mesmo ainda está em 
> fase de testes, MAS EM USO, quase toda semana tenho que atualizar o 
> executável...alguem tem alguma idéia??? Tava pensando em colocar o 
> sistema em um ftp e criar um sistema para download apresentando os 
> arquivos para download...Alguem tem algum exemplo para me ajudar???
>

Responder a