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???