Olá, boa tarde.
Existe algum código ou alguma explicação sobre algum código de auto updater do hk?
Tenho um código que constantemente preciso ficar atualizando, porém as pessoas precisam ficar sobrescrevendo a cada atualização.
Como posso fazer uma validação sobre isso?
Atualmente faço da seguinte forma.
Coloco uma versão na aplicação.
faço uma requisição get na internet, para pegar a versão na internet, e comparo.
Quando está diferente, ele não deixa continuar com a aplicação e pede para a pessoa sobrescrever.
No caso, gostaria de uma luz para entender como posso fazer a atualização automática do código, sem ser necessário a pessoa baixar manual.
Auto Updater
Moderator: Gio
Re: Auto Updater
Boa tarde.
Certo, a parte de comparar versões para saber se tem atualizações novas parece estar boa (pelo menos a descrição corresponde ao que é feito normalmente). Mas porque o script atualizador não baixa e sobreescreve automaticamente o arquivo do script em atualização? Você já tem um servidor FTP ativo com um link de onde se possa baixar a versão mais recente? Tanto URLDownloadToFile e FileMove permitem sobreescrever arquivos no destino (logo você pode em tese baixar direto no lugar do arquivo antigo ou baixar em uma pasta temporária e depois movimentar pra lá). Você pode tentar também baixar em outro lugar e antes de mover, checar a integridade do novo arquivo e depois deletar o arquivo antigo com FileDelete (para que não seja necessário sobreescrever) antes de mover o novo para a posição do antigo.
Teste todas as possibilidades. E se esses comandos estiverem simplesmente falhando, tente primeiro pedir privilégios de administrador para o script atualizador. Você pode fazer isso colocando essas linhas no começo dele:
Também pode ser que o computador do cliente tenha alguma antivírus ou outra proteção ativada que impeça download e/ou movimentação de arquivos .exe. Se for esse o caso, pode valer a pena investigar o que está bloqueando a rotina. Pode ser que você esteja simplesmente tentando colocar o arquivo em uma pasta mais protegida do computador (costuma ser mais tranquilo colar arquivos na área de trabalho do que na pasta arquivos de programas, por exemplo). Mas também pode ser que seja um bloqueio mesmo (antivírus, etc). Alguns bloqueios podem ser evitados e outros não. Mas nesse caso cabe ao cliente ou ao seu TI adicionar as exceções corretas ao antivírus dele. Mas em último caso você pode oferecer suporte remoto, caso seja um cliente pequeno.
Atualmente faço da seguinte forma.
Coloco uma versão na aplicação.
faço uma requisição get na internet, para pegar a versão na internet, e comparo.
Quando está diferente, ele não deixa continuar com a aplicação e pede para a pessoa sobrescrever.
Certo, a parte de comparar versões para saber se tem atualizações novas parece estar boa (pelo menos a descrição corresponde ao que é feito normalmente). Mas porque o script atualizador não baixa e sobreescreve automaticamente o arquivo do script em atualização? Você já tem um servidor FTP ativo com um link de onde se possa baixar a versão mais recente? Tanto URLDownloadToFile e FileMove permitem sobreescrever arquivos no destino (logo você pode em tese baixar direto no lugar do arquivo antigo ou baixar em uma pasta temporária e depois movimentar pra lá). Você pode tentar também baixar em outro lugar e antes de mover, checar a integridade do novo arquivo e depois deletar o arquivo antigo com FileDelete (para que não seja necessário sobreescrever) antes de mover o novo para a posição do antigo.
Teste todas as possibilidades. E se esses comandos estiverem simplesmente falhando, tente primeiro pedir privilégios de administrador para o script atualizador. Você pode fazer isso colocando essas linhas no começo dele:
Code: Select all
if not A_IsAdmin ; Exigir permissão de nivel administrativo (necessário para manipular o IE através de comandos COM).
{
Try
{
Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+
}
msgbox, 0x10, Erro, O acesso administrativo é necessário para a execução do aplicativo.
ExitApp
}
Também pode ser que o computador do cliente tenha alguma antivírus ou outra proteção ativada que impeça download e/ou movimentação de arquivos .exe. Se for esse o caso, pode valer a pena investigar o que está bloqueando a rotina. Pode ser que você esteja simplesmente tentando colocar o arquivo em uma pasta mais protegida do computador (costuma ser mais tranquilo colar arquivos na área de trabalho do que na pasta arquivos de programas, por exemplo). Mas também pode ser que seja um bloqueio mesmo (antivírus, etc). Alguns bloqueios podem ser evitados e outros não. Mas nesse caso cabe ao cliente ou ao seu TI adicionar as exceções corretas ao antivírus dele. Mas em último caso você pode oferecer suporte remoto, caso seja um cliente pequeno.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: Auto Updater
Boa noite.
Obrigado @Gio
#EDIT
Estou utilizando o GITHUB como repositório das minhas atualizações.
Acredito que seja uma boa para quem pensa em realizar procedimentos como esses.
Vou testar essa situação utilizando o google drive.
Muito obrigado pelo esclarecimento!
Obrigado @Gio
#EDIT
Estou utilizando o GITHUB como repositório das minhas atualizações.
Acredito que seja uma boa para quem pensa em realizar procedimentos como esses.
Vou testar essa situação utilizando o google drive.
Muito obrigado pelo esclarecimento!
Gio wrote: ↑16 Sep 2022, 15:58Boa tarde.
Atualmente faço da seguinte forma.
Coloco uma versão na aplicação.
faço uma requisição get na internet, para pegar a versão na internet, e comparo.
Quando está diferente, ele não deixa continuar com a aplicação e pede para a pessoa sobrescrever.
Certo, a parte de comparar versões para saber se tem atualizações novas parece estar boa (pelo menos a descrição corresponde ao que é feito normalmente). Mas porque o script atualizador não baixa e sobreescreve automaticamente o arquivo do script em atualização? Você já tem um servidor FTP ativo com um link de onde se possa baixar a versão mais recente? Tanto URLDownloadToFile e FileMove permitem sobreescrever arquivos no destino (logo você pode em tese baixar direto no lugar do arquivo antigo ou baixar em uma pasta temporária e depois movimentar pra lá). Você pode tentar também baixar em outro lugar e antes de mover, checar a integridade do novo arquivo e depois deletar o arquivo antigo com FileDelete (para que não seja necessário sobreescrever) antes de mover o novo para a posição do antigo.
Teste todas as possibilidades. E se esses comandos estiverem simplesmente falhando, tente primeiro pedir privilégios de administrador para o script atualizador. Você pode fazer isso colocando essas linhas no começo dele:
Code: Select all
if not A_IsAdmin ; Exigir permissão de nivel administrativo (necessário para manipular o IE através de comandos COM). { Try { Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+ } msgbox, 0x10, Erro, O acesso administrativo é necessário para a execução do aplicativo. ExitApp }
Também pode ser que o computador do cliente tenha alguma antivírus ou outra proteção ativada que impeça download e/ou movimentação de arquivos .exe. Se for esse o caso, pode valer a pena investigar o que está bloqueando a rotina. Pode ser que você esteja simplesmente tentando colocar o arquivo em uma pasta mais protegida do computador (costuma ser mais tranquilo colar arquivos na área de trabalho do que na pasta arquivos de programas, por exemplo). Mas também pode ser que seja um bloqueio mesmo (antivírus, etc). Alguns bloqueios podem ser evitados e outros não. Mas nesse caso cabe ao cliente ou ao seu TI adicionar as exceções corretas ao antivírus dele. Mas em último caso você pode oferecer suporte remoto, caso seja um cliente pequeno.
Re: Auto Updater
Tive uma situação semelhante na empresa que trabalho, porém, aqui não utilizo um servidor na nuvem para atualizar, mas sim uma base de dados.
A parte do código que acabei montando(peguei alguns códigos no forum mas não me recordo exatamente de quem, portanto não vou poder dar créditos dessa vez) é essa:
Basicamente :
A parte do código que acabei montando(peguei alguns códigos no forum mas não me recordo exatamente de quem, portanto não vou poder dar créditos dessa vez) é essa:
Code: Select all
update_software := "ToolTip, Atualizando " software " para versão " sql[2, 3]
. "`nSleep, 2000"
. "`nFileDelete," A_ScriptFullPath "`nsleep 1000"
. "`nFileMove,"
. SubStr( A_ScriptFullPath, 1 , -4 ) "_new.exe,"
. A_ScriptFullPath ", 1`nsleep 1000"
. "`nLoop {"
. "`n Sleep, 500"
. "`n If fileExist( """ A_ScriptDir "\" software "_new.exe"" )"
. "`n Break"
. "`n Else If ( A_Index > 20 ) {"
. " ;REMOVI O TRATAMENTO DE FALHA AO ATUALIZAR, PQ UTILIZA UM MÉTODO INTERNO QUE NÂO VAI TE AGREGAR EM NADA"
. "`n Exitapp"
. "`n }"
. "`n}"
. "`nRun, " A_ScriptFullPath
. "`nExitapp"
async( update_software ) ; executa a atualização assíncrona
ExitApp
async( Script ) {
shell := ComObjCreate("WScript.Shell")
exec := shell.Exec( A_AhkPath " /ErrorStdOut *")
exec.StdIn.Write( script )
exec.StdIn.Close()
}
- Executa uma instância separa de um script ahk para deletar o executável.
- Gera um novo executável com a nova versão com "_new" ao final do nome(não utilizei o mesmo nome direto pois faço um tratamento de erros para ter certeza que foi deletado).
- Após a verificação e tratamento, renomeia para o nome correto e executa a aplicação atualizada.