Jump to content
Meron95

Editado

Recommended Posts

bioshock

Já existem alguns snippets sobre este tema. No entanto, quando divulgas algum código deves ter atenção a explicar em que funções se aplica o mesmo. Será uma Class ou posso colocá-lo num objecto-controlo qualquer?

Quanto à Class não tenho a certeza, mas se colocar esse código num Button em princípio dar-me-ia um erro. O erro denominar-se-ia por (exemplo) "O ficheiro está a ser utilizado". Isto porque estarias a tentar eliminar o ficheiro enquanto trabalhavas nele.

IO.File.Delete(Application.StartupPath &  "\file.exe")

Depois, tens erros no código.

Supostamente, quando dizes algo como:

If oldversion = newversion Then

Nada deveria de fazer, pois se a versão antiga (oldversion) é igual (=) à "nova versão" (mais apropriado será dizer à versão do ficheiro que está no FTP) não vais realizar nenhuma tarefa, porque não há nada para actualizar.

Portanto, para não te deixar com dúvidas acerca da tua condição, terias duas opções:

1.

If Not oldversion = newversion Then
' blá-blá-blá-whiskas-saquetas
End If

2.

If oldversion <> newversion Then
' blá-blá-blá-whiskas-saquetas
End If

Share this post


Link to post
Share on other sites
bioshock

lamento mas estas completamente errado.

Se tu o dizes, quem sou eu para dizer que não.

Já viste que so executa código se o update.dat existir? Antes de me criticares vê o código ;)

Tens razão. Em vez de olhar para as fotos da Ana Malhoa, vou mas é ver o teu código.

Share this post


Link to post
Share on other sites
ribeiro55

Ana Malhoa é bom gosto? ;)

Código em sub é melhor e nao em module(apesar de ser facil adaptar pra module)

Não há diferença. No module também vai ser um sub, e o teu código não depende de instâncias base.

Se chamares o updater a partir da aplicação cujo executável vai ser actualizado, corres sim o risco de ver "O ficheiro está a ser utilizado", a menos que isto não seja um "updater" mas um "launcher / launcher updater".

Uso muitas vezes um updater que fiz há uns tempos, que é chamado da aplicação, e nunca directamente, pois consegue matar a aplicação "caller", esperar que morra completamente, fazer update e voltar a arrancar.

Hei-de disponibilizá-lo assim que conseguir, para comungar ideias, afinal de contas é disso que isto se trata :P


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Não é assim tão simples, pois ambos os executáveis possuem o mesmo nome e estão no mesmo sítio.

Nem pode ser substituído nem eliminado com código .NET, porque estaria sempre em execução.

Eu uso outro artifício externo ;)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

É exactamente um batch que corro até que o sistema se livre do processo que prende o ficheiro ;)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Mostro o meu método assim que tiver tempo para o documentar para a comunidade.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
bioshock

Eu possuo um algoritmo, que realizei durante o meu curso, para a actualização da aplicação. É algo bastante completo mas também robusto. Quando olho agora para o código vejo que tenho imensos erros, conheço outras formas de abordar o assunto, etc.

O teu código está incompleto e possui erros. Quando mencionei a Ana Malhoa estava a ser crítico. ;)

Tens realmente erros nesse excerto de código que não permite muito, permite apenas o download de um ficheiro e nada mais.

Mas e se eu quiser algo mais completo? Se eu precisar que a minha aplicação faça download de vários ficheiros que vão ser necessários para o funcionamento da próxima versão?

Uma aplicação que estou a reescrever terá a possibilidade de actualizações. Ainda me faltam uns bons passos até chegar à actualização (que será a última parte) e vou aproveitar algumas linhas referentes ao algoritmo que havia elaborado.

Aliás, até já o tenho escrito em pseudo-código.

Quanto ao batch, não é dessa forma que actuo pois não vejo necessidade na utilização desse método.

Share this post


Link to post
Share on other sites
ribeiro55
Quanto ao batch, não é dessa forma que actuo pois não vejo necessidade na utilização desse método.

A páginas tantas baralhei-me com os conceitos.

Eu criei há uns tempos um updater e um deployer.

O updater não precisa de batch nenhum, certo.

O deployer é que recorre a um batch para se auto-destruír.

No meu updater adoptei o método da interpretação de comandos.

Arrancas o updater de qualquer aplicação com o Process.Start e passas-lhe por parâmetro o URL do descritor e o nome do processo que o chamou.

A primeira coisa que faz é tentar matar o processo caller, para que possa reescrever o executável se necessário.

Com este morto, cria pastas e faz download de ficheiros de acordo com as instruções do descritor.

No final tenta arrancar o mesmo processo que matou.

O descritor é algo como:

MKDIR qqcoisa;

MKDIR qqcoisa\maisqqcoisa;

url.qqlado.com/ficheiros/coisas.txt qqcoisa\coisas.txt;

url.qqlado.com/ficheiros/maiscoisas.txt qqcoisa\maisqqcoisa\maiscoisas.txt;

url.qqlado.com/ficheiros/coisas.doc coisas.doc;


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
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

×
×
  • 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.