• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

Auto-Updater

30 mensagens neste tópico

Boas pessoal,

estou a fazer um auto-updater que verifica o tamanho do ficheiro local "Nandinho.exe" com o tamanho do ficheiro no servidor exactamente com o mesmo nome.

Mas, não sei porquê, no debug aparece-me que o ficheiro no servidor não existe, quando, muito pelo contrário ele existe, pois até testes de eu já fiz com ele, digitando o endereço de download e sacando-o manualmente.

Alguém me podia dar uma mãozinha?

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Posta aqui o código que faz a gestão do ficheiro no servidor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não faço assim.

Eu faço assim:

Crio um ficheiro à parte em formato de texto, e nele coloco a versão do programa, no arranque coloco o programa a verificar esse ficheiro que está no servidor, e junto com ele uma pasta e dentro dela tudo que quero se seja actualizado. .exe .dll etc.

Depois com uma segunda aplicação (dei nome update.exe) fecho a aplicação principal e copio os ficheiros do servidor para a pasta do programa, e depois disso arranco com o programa de novo já actualizado.

Até é simples e funciona bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Weasel,

Só no vb6 é que era necessário 2 ficheiros para efectuar uma actualização. Podes fazer tudo só com um ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Weasel,

Só no vb6 é que era necessário 2 ficheiros para efectuar uma actualização. Podes fazer tudo só com um ficheiro.

Ai é? Como?

Eu já tive a ver os sites que me informas-te, o do CodeProject é unicamente para Intranet, como a descrição do projecto diz, e o outro até me agradou. Estou a lê-lo agora.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Weasel,

Só no vb6 é que era necessário 2 ficheiros para efectuar uma actualização. Podes fazer tudo só com um ficheiro.

Mas se tentares copiar um ficheiro (substituindo o original) que está a ser utilizado não consegues...pois o que está a ser executado está protegido pelo sistema...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas se tentares copiar um ficheiro (substituindo o original) que está a ser utilizado não consegues...pois o que está a ser executado está protegido pelo sistema...

Pois, foi isso que pensei quando lhe perguntei como é que ele fazia isso. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas outra vez...

Já consegui pôr mais ou menos isto a funcionar.

- Tenho o ficheiro Nandinho.exe que é o ficheiro principal da aplicação

- Tenho o ficheiro autoupdate.txt na pasta do programa que informa a versão actual do programa

- Tenho o ficheiro autoupdater.exe que saca o ficheiro Nandinho.exe (se existir versão mais recente, pois este exe só é activado caso exista tal versão) (e já agora gostaria que me ajudassem a não só sacar o ficheiro Nandinho.exe mas uma pasta inteira por exemplo, no caso de haver DLL's por exemplo

Código do Nandinho.exe

Imports System.IO
Public Class Form1

    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
        Dim FrasesDoNandinho(40) As String

        FrasesDoNandinho(0) = "Pois pah"
        FrasesDoNandinho(1) = "Fizes-te o trabalho de casa? Lê lá a tua resposta! Número!"
        FrasesDoNandinho(2) = "Poi"
        FrasesDoNandinho(3) = "Se calhar é melhor vires cá para baixo"
        FrasesDoNandinho(4) = "Epah, se cá nevasse, fazia-se cá ski"
        FrasesDoNandinho(5) = "Basofe? Basofe é o rio Mondego."
        FrasesDoNandinho(6) = "Os teus ídolos devem estar todos na cadeia!"
        FrasesDoNandinho(7) = "Isso é poinha da cobra!"
        FrasesDoNandinho(8) = "Chinita, tás grávido?"
        FrasesDoNandinho(9) = "Tanta conversa, isso deve ser por causa da gasolina da mota"
        FrasesDoNandinho(10) = "Pois, mas tu já tens cadastro."
        FrasesDoNandinho(11) = "Se eu fosse a ti não me punha nessa situação."
        FrasesDoNandinho(12) = "Mas percebes o preço das cebolas?"
        FrasesDoNandinho(13) = "Pois, como não tens o teste assinado, se calhar vou ter do to anular..."
        FrasesDoNandinho(14) = "Diogo, desmancha lá a barraca!"
        FrasesDoNandinho(15) = "Isso está em fase experimental, se houver perturbação da aula acaba-se até ao final do 2º período"
        FrasesDoNandinho(16) = "Falamos sobre isso no final da aula, ou no horário de atendimento mas tens de fazer marcação com uma semana de antecedência"
        FrasesDoNandinho(17) = "A tua filosofia é que é uma treta!"
        FrasesDoNandinho(18) = "Futebol não é desporto, é indústria."
        FrasesDoNandinho(19) = "Para se respirar é preciso saber bater os pés!"
        FrasesDoNandinho(20) = "Pão pão, queijo queijo."
        FrasesDoNandinho(21) = "Nem pão nem bolo!"
        FrasesDoNandinho(22) = "Oh, baixem lá as tampas todas!"
        FrasesDoNandinho(23) = "Tá bom, mas não chega!"
        FrasesDoNandinho(24) = "Epah, resolves isso com Ele (Deus)."
        FrasesDoNandinho(25) = "Tanta conversa, deve haver algum pneu furado."
        FrasesDoNandinho(26) = "Epah, há-des ver que isso não é bem assim!"
        FrasesDoNandinho(27) = "És mesmo tu? Pareces uma cópia."
        FrasesDoNandinho(28) = "Ontem fiz meia hora de piscina, só com os dedos dos pés."
        FrasesDoNandinho(29) = "Isso é muito relativo"
        FrasesDoNandinho(30) = "Comentários só por escrito!"
        FrasesDoNandinho(31) = "Prometeu era imortal, mas um dia morreu e ressuscitou."
        FrasesDoNandinho(32) = "Isso vai contra os princípios éticos!"
        FrasesDoNandinho(33) = "Uma falácia é um erro lógico pah"
        FrasesDoNandinho(34) = "Isso é tudo mentira, vocês estão-me a difamar"
        FrasesDoNandinho(35) = "Estou a deixar crescer a barba por uns dias. (não a cortava há 2 meses)"
        FrasesDoNandinho(36) = "Ainda não tens bem definido o conceito de bem e mal, isso está muito escuro."
        FrasesDoNandinho(37) = "Secalhar é melhor ires lá para fora."
        FrasesDoNandinho(38) = "A natação é apenas competição, não conta como desporto!"
        FrasesDoNandinho(39) = "Já te disse que os teus ídolos estão na cadeia, porque têm comportamentos idênticos."
        FrasesDoNandinho(40) = "Vais ter 11 no comportamento, é que vens para aqui com o capacete e essas coisas."


        Dim rnd As New Random
        Dim result As Byte = rnd.Next(0, 40)
        MsgBox(FrasesDoNandinho(result), , "Nandinho")
    End Sub

    Private Sub tmrTime_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrTime.Tick
        lblTime.Text = TimeOfDay.TimeOfDay.ToString
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim aPath As String = Application.StartupPath()
        Dim versao As String = File.ReadAllText(aPath & "\autoupdate.txt")
        My.Computer.Network.DownloadFile("http://ivopereira.110mb.com/autoupdate.txt", aPath & "\autoupdate1.txt")
        Dim versaoautoupdate As String = File.ReadAllText(aPath & "\autoupdate1.txt")

        If versao <> versaoautoupdate Then
            Shell(aPath & "\autoupdater.exe")
            MsgBox("O teu Nandinho vai agora ser actualizado.", MsgBoxStyle.Information)
            File.Delete(aPath & "\autoupdate1.txt")
            Me.Close()
        Else
            MsgBox("A versão do teu Nandinho está em dia.", MsgBoxStyle.Information)
            File.Delete(aPath & "\autoupdate1.txt")
        End If

        File.Delete(aPath & "\asneiras.txt")
        My.Computer.Network.DownloadFile("http://ivopereira.110mb.com/asneiras.txt", aPath & "\asneiras.txt")
        Dim pessoas As Integer = File.ReadAllText(aPath & "\asneiras.txt")
        lblUsado.Text = "Usado " & pessoas & " vezes"
        pessoas += 1
        File.WriteAllText(aPath & "\asneiras.txt", pessoas)
        My.Computer.Network.UploadFile(aPath & "\asneiras.txt", "ftp://ivopereira.110mb.com/asneiras.txt", "user", "pass")
        File.Delete(aPath & "\asneiras.txt")



        File.Delete(aPath & "\autoupdate1.txt")
    End Sub

End Class

Código do autoupdater.exe

Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim aPath As String = Application.StartupPath
        File.Delete(aPath & "\Nandinho.exe")
        My.Computer.Network.DownloadFile("http://ivopereira.110mb.com/Nandinho.exe", aPath & "\Nandinho.exe")
        File.Delete(aPath & "\autoupdate.txt")
        My.Computer.Network.DownloadFile("http://ivopereira.110mb.com/autoupdate.txt", aPath & "\autoupdate.txt")
        MsgBox("Actualização concluída!", MsgBoxStyle.Exclamation, "Nandinho Auto-Updater")
    End Sub
End Class

Ainda tou a fazer testes com isto, o problema é que, quando faço o Build, não sei porquê no Nandinho.exe a MsgBox que era suposto aparecer (e que aparece no Debug), simplesmente teima em não aparecer, e inicia o programa normalmente.

__________________________________________________________________________________________________________________________________

Esqueçam, a parte acima já resolvi. Às vezes pequenas distracções podem fazer muita porcaria. :P Tinha dois locais de Release do projecto  :-[

Bom, agora a outra pergunta: Como é que posso fazer auto-update de uma pasta inteira?

E já agora, não sabem nenhum host que permita ter ficheiros .exe lá? É que no meu host não sei porque o ficheiro vem corrupto ou o que é... abre uma caixa da linha de comandos em vez do programa :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá pessoal parece que tem havido algum diálogo mas só agora consegui ler o e-mail.

Bom em parte parece que não percebi … o update não é para ser feito através de um servidor na Internet ? Se sim a informação que enviei está correcta.

De qualquer maneira existem métodos que permitem substituir o ficheiro com ele a correr e depois é necessário apenas reiniciar a aplicação. Este é um deles http://windowsclient.net/articles/appupdater.aspx mas existem outros com recurso a API’s. Se quiserem um exemplo posso também arranjar. No entanto o clickonce existe para isso mesmo. Aqui está outro exemplo de clickonce http://visualbasic.about.com/od/usingvbnet/a/clkone01.htm

No exemplo que tens de update não é recomendável por diversas razões: tempo de descarga, necessidade de substituição sempre do ficheiro e ainda, a pior de todas, caso não consigas fazer o download apagas o ficheiro e depois não consegues o arranca-lo enquanto não tiveres net. Nada recomendável!

Existem vários host que permitem colocar exe’s mas se quiseres manter o teu sistema (usando dois ficheiros) faz o seguinte:

1 – Coloca o ficheiro renomado no servidor (ex_ por exemplo)

2 – Faz o download para junto do exe

3 – Verifica se o ficheiro está na realmente disponível no disco

4 – Apaga o ficheiro principal

5 – Renomeia o ficheiro descarregado

6 – Lança o programa

É ainda recomendável passar um parâmetro para que o ficheiro principal não arranque directamente. Isto evita que se faça o bypass ao ficheiro de update.

Se precisares de alguma ajuda com o código é só dizer!

jpaulino

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, realmente precisava. Referis-te aí em cima que:

No exemplo que tens de update não é recomendável por diversas razões: tempo de descarga, necessidade de substituição sempre do ficheiro e ainda, a pior de todas, caso não consigas fazer o download apagas o ficheiro e depois não consegues o arranca-lo enquanto não tiveres net. Nada recomendável!

Gostaria que me ajudasses num melhor código para tal. Pois tenho andado às voltas com isto, e tive de puxar um pouco pela minha cabeça para fazer isto. :P eheh

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

>> Gostaria que me ajudasses num melhor código para tal

Queres utilizar o clickonce, ou através de um ficheiro exe auxiliar ou autoupdate (só com um ficheiro utilizado api's) ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem o sistema que falo é dentro de uma rede interna (trabalho num local com +20 computadores e o servidor)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá pessoal!

A pedido de várias familias aqui fica um pequeno exemplo de um autoupdate com um só executável http://rapidshare.com/files/97836986/UpdateSolution.zip

Para experimentarem basta compilar com uma versão superior, copia-lo para outro lado, voltar a alterar a versão, preencher os dados no incio do código, voltar a compilar e experimentar.

Qualquer dúvida não hesitem ...

PS: Está para ir buscar a um servidor se quiserem experimentar via net é só fazer algumas pequenas alterações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha, desculpa. Não percebi como passar aquilo para ir buscar os ficheiros à internet...

EDIT: olha se eu te mandar o projecto, não me podes integrar isso lá, para eu conseguir perceber melhor a estrutura? :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

>> olha se eu te mandar o projecto, não me podes integrar isso lá, para eu conseguir perceber melhor a estrutura?

Ok, mas de momento apenas tenho o VS2005 instalado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obviamente que não dá!

Queres que coloque aqui algum código mais explicado ou preferes esperar até segunda/terça. Acho que vou criar uma versão mais pro (se calhar também vou precisar)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obviamente que não dá!

Queres que coloque aqui algum código mais explicado ou preferes esperar até segunda/terça. Acho que vou criar uma versão mais pro (se calhar também vou precisar)

Esquece -.-'

Esqueci-me da parte do VS2005 :confused: sim, eu posso esperar nas boas... isto é um projecto assim na brincadeira que eu tou a fazer com um colega meu a quem estou a ensinar a programar :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok assim que estiver terminado eu envio-te (ou melhor coloco aqui).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu colega k venha aki ao forum k o ppl ajuda-o. Ctg ele não se safa :cheesygrin::confused: na brinca.

Olha, se quiseres fazer assim uma cena mais elaborada. Tipo, update de dll's e outros ficheiros, podes sempre meter a info numa xml, e ler a partir de um servidor. Quero fazer uma cena dessas, mas como são vários ficheiros, eh assim k tenciono fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora