Post by dieissonc » 01 Nov 2022, 13:57
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:
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()
}
Basicamente :
- 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.
Acredito que caso não tenha solucionado ainda, possa te servir ao menos de um começo, e caso já tenha solucionado, por gentileza compartilhe, pode nos ser útil também.
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:
[code]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()
}[/code]
Basicamente :
[list]Executa uma instância separa de um script ahk para deletar o executável.[/list]
[list]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).[/list]
[list]Após a verificação e tratamento, renomeia para o nome correto e executa a aplicação atualizada.[/list]
Acredito que caso não tenha solucionado ainda, possa te servir ao menos de um começo, e caso já tenha solucionado, por gentileza compartilhe, pode nos ser útil também.