Funcionalidade de auto update no sistema

Bom dia amigos,

Estou querendo fazer uma funcionalidade de auto update para o meu sistema.

Pensei em fazer o seguinte:
Criar um servidor ftp onde eu publicaria as DLLs do sistema.
Ao iniciar o sistema acessar esse servidor, verificar se a versão das dlls presentes nele são superiores ao cliente.
Se for superior fazer o download e instalar as Dlls.

Sabem se isso é viável?

Alguém já fez algo parecido? se sim como fizeram?

Agradeço qualquer resposta ou sugestão.

DLL seu sistema é em delphi ??

att

C#

Acredito que seja uma idéia muito boa. Eu faria um arquivo xml, contendo os nomes, versões e caminhos das dlls hospedadas no servidor. Então, periódicamente, o programa iria acessar esse arquivo xml e comparar as dll instaladas com as constantes no arquivo. Caso haja alguma superior, faz o download.

isso é um típico problema que pode ser resolvido com reflections. Pode criar um mecanismo que trabalha semelhante a plugins.

Fiz isso para Java desktop uma vez, faz muito tempo. Funcionou legalzinho, mas não fiz por ftp, fiz por http mesmo. Era muito rápido atualizar, pois eu não carregava a JAR toda, mas só as funções/objetos que haviam sido alterados.

Lembre-se que o seu sistema não poderá estar sendo executado ao mesmo tempo em estiver sendo atualizado. Eu fechava o sistema automaticamente, executava a atualização, e abria novamente automaticamente, porém uma parte pequena do “engine” de atualização não era atualizável desta maneira. De fato nunca precisei atualizá-la, mas sabia que se um dia precisasse não seria possível, seria obrigado solicitar um “Full Update”.

Como sugeriram, eu usei um arquivo XML com nome de versões, caminho, texto sobre o que estava sendo atualizado, etc.

Existem outras formas, talvez melhores, mas para mim esta acima foi suficiente.

Só pra lembrar, normalmente o acesso FTP costuma ser lento comparado com o acesso HTTP, porque a conexão demora muito para abrir. Se o update é de dezenas de arquivinhos pequenos, FTP fica um pouco inviável, melhor usar HTTP.