ATUALIZAR SOFTWARE VIA WEB

TRTNCG 17/06/2010 10:04:27
#345089
Bom dia Pessoal!

Olha queria um exemplo: tipo eu gostaria de colocar no meu site os arquivos de atualização do meu software, ao executar o software ele verificar se a versão instalada é inferior a que está no site. Se for inferior baixar todos os arquivos que estão na pasta.
LUIS.HERRERA 17/06/2010 11:05:17
#345093
Eu também já tentei isso, mas não consegui pois encontrei alguns problemas, talvez aqui alguém tenha algum modelo funcional, também tenho interesse.

O que eu fiz foi pegar um txt no site que continha a versão atual (do site). Ao executar o software no cliente, ele baixava esse txt e comparava a versão com o programa, se menor baixava o arquivo de atualização xxxx.exe. Depois de baixado ele era executado e meu programa fechado. O instalador atualizava o sistema e então ativava o programa.

Nota: O atalho apontava para um pequeno EXE que fazia a verificação da versão, esse EXE possuia também o mesmo número de versão do EXE do aplicativo principal e era substituido na atualização também. Se a versão era igual, então ele chamava o EXE principal e finalizava.

Os problemas que encontrei:
1- O meu aplicativo é instalado em cada terminal e o EXE movido pro servidor do cliente. Sendo assim ao ser executado ele é transferido para a RAM da estação e executado, só que ao baixar e rodar a Atualização, ela era colocada na estação e não no servidor, não resolvendo e piorando as coisas, pois a cada estação que entrava no sistema, fazia o download e não atualizava nada, pois sempre pegava a versão errada no servidor, era uma atualização a cada login.

2- Outro problema, a maioria das estações em alguns clientes não tem permissão de instalar programas, assim ao tentar rodar o windows gerava erro e não permitia, gerando problemas, pois isso sempre precisava ser feito pelo Administrador da rede com as permissões na estação.

3- Em vários clientes é usado além do EXE no servidor, uma instalação em máquinas virtuais para acesso remoto. Aí piorou tudo, pois não é possível deixar os usuários com permissão de instalação em máquinas virtuais, isso é feito pelo ADMIN da Rede.

Será que alguém aqui conseguiu resolver isso e talvez outros problemas?
N2NN 17/06/2010 12:52:46
#345108

Eu tenho uma aplicação que faz isso via web foram varios testes e o que deu certo sem problemas funciona assim.

No servidor tem um arquivo texto com a versao nova no mesmo, tipo 3.1.1

Ao executar o aplicativo, o mesmo faz o download deste arquivo para o micro, abre-o ler a versão e compara com sua propria versao, se diferente copia a nova do site.

Ai o detalhe. No site o executavel da nova versão esta com nome diferente e compactado autoexecutavel.

Após o download da nova versão, a aplicação executa o arquivo autoexecutavel baixado e se finaliza(END)

O arquivo autoexecutavel, apos sua auto-descompactação executa o executavel da aplicação(com nome diferente).

Ao ser executado, o aplicativo verifica que esta com nome diferente do normal se copia para o nome correto, executa o correto e finaliza.

A nova versão agora com o nome correto, copia o arquivo texto do site, compara sua versão, que agora esta OK e continuar normalmente.

Vc me pergunta, porque o executal esta com nome diferente quando é baixado e executado?. Por que dependendo da maquina, a descompactação ocorre muito rápida, antes mesmo do aplicativo fechar (END), e não consegue descompactar, com o nome diferente este problema foi resolvido.

Note que a verificação do nome da aplicação, tem que ser a primeira coisa a ser verificada ou a segunda se a aplicação verifica e impede execuções duplicadas e antes de abri o banco de dados.
Se o BD for aberto antes, tem que ter o cuidado de fechar as conexões antes de chamar o arquivo autoexecitavel para que sua finalização seja imediata.

Ha tb a necessidade de verificar sempre o caminho correto, para evitar erros com atalhos já criados.


Sei que existem, outras formas de fazer, mais esta funcionou sempre e nunca tive problemas, assim é minha favorita.



José Nildo
RICATOM 17/06/2010 13:33:39
#345110
Resposta escolhida
Eu basiei meu sistema de liveupdate neste exemplo:

http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=5162
ARNALDOCRUZ 18/06/2010 15:18:30
#345214
cara a ideia do txt é a usada por muitos, pode-se também escrever no registro do windows a versão do exe.

vc tem que ter 3 exe.

1 - O sistema em si
2 - O Sistema de download
3 - O sistema que atualiza

passos

sistema 2 verifica a versão do site com a versão atual, esta verificação vc pode colocar ao ligar o computador ou determinada hora, o idela é que seja uma vez por dia. preferencialmente ao ligar o computador., pois se o cara quiser ver + de uma vez basta reiniciar a maquina.

se for <> baixa o arquivo e descompacta para uma pasta atualizações

Ao abrir o Sistema 1 na SUBMain compara a versão o arquivo da pasta Atuliações com a versão do sistema que está abrindo.

se for <> executa o Sistema 2 que atualiza o sistema 1

e o arquivo pode ter o mesmo nome que não tem problema só precisa está em pastas diferentes do sistema 1

Exemplo abaixo - Na submais eu chamo esta função

If UCase(NMaq) <> [Ô]SERVANT[Ô] Then [ô]Quando o sistema é aberto na estação cliente
novoPath = Dir([Ô]\\SERVANT\USCOMERCIAL\Atualizacoes\USCOMERCIAL.EXE[Ô])
If novoPath = [Ô][Ô] Or IsNull(novoPath) Then
EstaAtualiza = 0
Exit Function
Else
DataLocal = CDate(FileDateTime([Ô]C:\USCOMERCIAL\USCOMERCIAL.exe[Ô]))
DataRemota = CDate(FileDateTime([Ô]\\SERVANT\USCOMERCIAL\Atualizacoes\USCOMERCIAL.EXE[Ô]))
If DataRemota > DataLocal Then
Caminho = Dir(App.Path & [Ô]\Atualizar.exe[Ô])
If Caminho = [Ô][Ô] Or IsNull(Caminho) Then
EstaAtualiza = 0
Exit Function
End If
DoEvents
EstaAtualiza = 1
Caminho = [Ô]C:\USCOMERCIAL\Atualizar.exe[Ô]
Shell (Caminho)
Else
EstaAtualiza = 0
Exit Function
End If
End If
Else [ô]Sistema aberto no servidor
novoPath = Dir([Ô]C:\USCOMERCIAL\Atualizacoes\USCOMERCIAL.exe[Ô])
If novoPath = [Ô][Ô] Or IsNull(novoPath) Then
EstaAtualiza = 0
Exit Function
Else
DataLocal = CDate(FileDateTime([Ô]C:\USCOMERCIAL\USCOMERCIAL.exe[Ô]))
DataRemota = CDate(FileDateTime([Ô]C:\USCOMERCIAL\Atualizacoes\USCOMERCIAL.exe[Ô]))
If DataRemota > DataLocal Then
Caminho = Dir(App.Path & [Ô]\Atualizar.exe[Ô])
If Caminho = [Ô][Ô] Or IsNull(Caminho) Then
EstaAtualiza = 0
Exit Function
End If
DoEvents
EstaAtualiza = 1
Caminho = [Ô]C:\USCOMERCIAL\Atualizar.exe[Ô]
Shell (Caminho)
Else
EstaAtualiza = 0
Exit Function
End If
End If
End If

TRTNCG 21/06/2010 13:51:13
#345375
Eu implementei em meu software um exemplo do sistema de atualização de software que tnha no site do Macoratti, deu certinho o grande problema é:

Gerei o exe que vai baixar os arquivos da NET para atualização ok. Enviei junto com o disco de instalação. Sendo que nosso exemplo do Macoratti o arquivos que irão ser baixados estão no exe do programa de atualização.

Criei 5 relatórios a mais certo, o programa de atualização que está instalado no cliente só iria baixar o exe certo e não os relatórios. O que eu queroa era por exemplo: gerar um arquivo TXT contendo os arquivos a serem baixados. Daí na ora da atualização ele iria ler essa lista de arquivos contidas no arquivo txt e baixar.
ANDPAG 21/06/2010 14:55:23
#345380
pessoal, uso o esquema de atualizar via net assim, fiz um projeto a parte que se chama liveUpdate, quando ele é acessado eu mato todos processos referentes ao sistema (TASKKILL.exe), depois baixo o arquivo para uma pasta isolada do sistema, e para finalizar eu checo as versões e atualizo se for necessário,,, é só isso, se precisar atualizar o banco de dados eu tb uso um arquivo .sql que tb envio para meu site... e atualizo o banco usando o comando (ISQL) para rodar o script.... Enquanto aos terminais vc faz com que seu sistema cheque sempre se ha uma nova versao na pasta de update, se houver vc manda uma mensagem para os usuarios, assim eles podem chamar a atualização quando acharem melhor....desse jeito esta funcionando legal no meu caso... abs a todos..
Tópico encerrado , respostas não são mais permitidas