Jump to content

[Resolvido] Atualizar aplicação


D3POD
 Share

Recommended Posts

Boas, estou a criar uma aplicação que irei precisar de atualizar de forma automática.

O que pretendia era usar o servidor da empresa. A aplicação verificava no servidor qual a versão que este continha e atualizava se esta fosse mais recente que a instalada. Pretendia que esta atualização fosse obrigatória por exemplo uma vez por semana.

Já procurei no amigo Google e aparecem muitos exemplos, mas acabei por ficar baralhado com tantas formas e com alguns exemplos com muito código que acaba por confundir as coisas.

Alguém me pode explicar ou tem um exemplo simples de como posso fazer isto?

Sei que existe o clickonce, mas pelo que li não é bem o que pretendo.

Cumprimentos,

D3POD

Link to comment
Share on other sites

Uma possibilidade um básica é criar um ficheiro config que contêm a versão da aplicação e a localização da origem/fonte (servidor) onde sao depositadas as novas versões.

Depois quando a aplicação é iniciada faz a validação dos ficheiros config: local vs fonte.

Se for para atualizar então deve ser chamada uma aplicação auxiliar que copia os ficheiros todos da fonte para a diretório atual e a aplicação atual deve encerrar.

Claro que existe ainda a questão dos privilégios: aplicar impersonation?

Bem isto é mesmo uma base que pode ser melhorada ao longo do tempo.

Link to comment
Share on other sites

Boas, Se não me engano, no visual estudio tens uma ferramenta que te permite inserir o nome e informaçoes sobre a aplicação, inclusive a versão. Se conseguires utilizar esses dados como uma variavel, podes compara-la com a versão guardada da base de dados, entendes? Ou então criars tu mesmo uma constante no codigo com a versão.

Não sei se é um metodo muito profissional, mas acho que resulta.

no inicio do do programa:

versao_instalada = 1.0.0;
if(versão_instalada != versao_atual)
{
atualizarprograma();
}

o atualizarprograma() abriria o exe à e fechava a aplicação principal. e exe depois fazia o download dos arquivos novos para o diretorio atual.

Edited by alpharroba
Link to comment
Share on other sites

Obrigado a todos desde já.

No que toca a fazer a comparação da versão isso não me preocupa muito, pois como já foi dito a cima, posso fazer de várias formas e nem é assim tão complicado.

O problema está mesmo em executar essa atualização de forma automática para não ter intervenção do utilizador.

bioshock o teu tutorial está muito bom, mas pelo que percebi não explica como correr a atualização, que é ai que estou pendurado...

Cumprimentos,

D3POD

Link to comment
Share on other sites

Correr a actualização? Se te referes a verificar a versão podes fazê-lo sempre que o utilizador inicia a tua aplicação. A forma de validar a versão está mencionada no tutorial.

EDIT: Acho que percebi. Quando questionas sobre o facto de correr a actualização precisas, como está identificado no tutorial, de ter uma aplicação auxiliar. O tutorial refere-se a uma aplicação auxiliar, não é a própria aplicação principal a fazer o processo de actualização pela simples razão que não podes substituir (caso precises) o ficheiro .exe dessa aplicação enquanto estás com ela aberta.

Edited by bioshock
Link to comment
Share on other sites

O que queres dizer com o com automático?

Ao usares o "tutorial" acima, que usa uma aplicação á parte para verificares se a tua aplicação principal está actualizada (que é a melhor opção na minha opinião, e evita muitos 'problemas'), ou seja, quando a tua aplicação principal inicia, no evento Load do teu Form, assumo que seja aplicação WinForms, dás inicio á aplicação que verifica o update, e nessa aplicação é que pões o código que é preciso (alguns exemplos nesse artigo) caso haja actualizações, depois, se houver, terminas a aplicação principal, substituis os ficheiros que foram actualizados (tudo feito pela aplicação auxiliar) e dás inicio á aplicação actualizada, e fechas a auxiliar.

EDIT: tinha a página aberta mas não actualizei antes de postar, acho que não faz mal visto que não é exactamente igual ao post de cima...

Edited by He B Te My
Link to comment
Share on other sites

Acho que já percebi onde está a minha confusão...

Basicamente, eu tenho que confirmar de alguma forma a versão atual do programa e comparar com um ficheiro que exista no servidor onde está a atualização (isto se houver uma atualização).

Se houver, então baixo os ficheiros e substituo pelos existentes na pasta da aplicação, correto?

O meu problema estava nesta substituição, pois não estava a ver como a aplicação iria funcionar ao substituir o ficheiro.exe, achava que teria que haver mesmo uma execução por parte do programa para fazer a atualização.

Obrigado pela vossa ajuda 😉

Link to comment
Share on other sites

Exacto, a ideia era verificares o ProductVersion do teu .exe com a versão do producto mais recente, se for mais recente, procedes com a actualização.

Isto tudo deve ser feito numa aplicação auxiliar como foi falado em cima, pois não poderás substituir o teu .exe enquanto estiveres a executá-lo.

Claro, tu baixas os ficheiros que precisares de actualizar, substituis pelos antigos e executas o programa actualizado no fim, não te esqueças ao actualizar a aplicação actualizares a versão também! 😛

Link to comment
Share on other sites

Só mais um esclarecimento...

Se tenho um ficheiro.exe com a versão 1.0.1, basta substituir pelo ficheiro mais atual por exemplo o 1.0.3 e iniciar a aplicação?

Não é necessário correr o aplicativo (como é normal numa instalação do zero? Em que aparece as condições de licença, etc)?

Link to comment
Share on other sites

Tu é que sabes, se achares que for preciso, corre a instalação, mas aí tás a perder um bocado da "automação" que pediste neste código, porque isso vai requerer user input, se não mudares as condições de licença entre as actualizações não será necessário mostrar na minha opinião.

Link to comment
Share on other sites

Eu faço assim, coloco um ficheiro de texto com o número da versão do programa no dropbox (pode ser em qualquer lado, eu apenas uso o dropbox porque é gratis)

WebClient ver = new WebClient();
int versao = 1200
//Versão 1.2.0.0

	 try
	 {
		 string v= ver.DownloadString("https://www.dropbox.com/link_do_ficheiro");
		 int x = Convert.ToInt32(v);
		 if (x > versao)
		 {
//Caso seja só para trocar ficheiros sem ser o exe principal então isto funciona diretamente, caso seja para trocar o exe do programa então é preciso criar uma aplicação que incia quando passar por aqui e depois fecha esta janela.
// Vai fazer atualização,copia ficheiros do servidor e cola na pasta do programa
		 }
		 else
		 {
			 //Não existe nehuma versão nova
		 }
	 }
	 catch
	 {
		 MessageBox.Show("Erro ao detetar atualizações!", "Erro");
	 }

é o mesmo sistema que uso no PT BASIC, só que não é automatica porque não tenho servidores onde por as coisas, eu mando o utilizador ao site do programa para it atualizar.

Link to comment
Share on other sites

Post acima, tens o conceito bem explicado, só uma nota para quem ler isto e estiver a pensar em usar o dropbox para este fim, provavelmente não vai conseguir desta maneira a não ser que tenha o 'Public' diretório que apenas contas criadas em 2012 ou anterior o têm, podem no entanto usar qualquer outro serviço que vos dê um link para o conteúdo 'cru', ou seja, apenas texto, além do que vocês precisam dum link fixo, e ao partilhar vai-vos ser dado um novo link se me recordo bem.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.