Auto-Update (Usando google drive)

Compartilhe seus scripts, funções, ferramentas e programas

Moderator: Gio

Post Reply
User avatar
juanmuscaria
Posts: 65
Joined: 29 Oct 2017, 10:53
Location: Brazil
Contact:

Auto-Update (Usando google drive)

Post by juanmuscaria » 27 Dec 2017, 15:26

Bom-dia,estava tentando arrumar uma forma de fazer meu programa se auto-atualizar e tive uma ideia de usar o google drive para isso.
Essa foi a função que criei:

Code: Select all

Update()
{
;ignore isso
IniWrite, 2.0, %A_WorkingDir%\Files\Config.ini, Global, Ver
;===============
Random,tmpfile,1,5
;Aqui ele vai baixar um arquivo .ini com as informações sobre versão e o link da atualização  (Troque pelo link do seu arquivo)
UrlDownloadToFile,https://drive.google.com/uc?authuser=0&id=1I9o6yDQuf_o1y1O-CA83Dodq23Do3VHN&export=download,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp
IniRead, NewVer,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp,00,Ver
;Aqui ele vai verificar se você esta usando a versão mais recente.
IfNotEqual,NewVer,2.0
{
        ;Aqui ele vai carregar o lang (ver link sobre a função do lang no final do tópico)
	lang := LoadLang("launcher","LOGO1")
	MsgBox, 262180, Update!, %lang%
	;Se Você clica em sim ele vai baixa a atualização
	IfMsgBox,Yes
	{
	      
	       ;Aqui ele vai ler o link da atualização do arquivo .ini
		IniRead, Link,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp,00,Link
		Random,tmpexe,1,5
                UrlDownloadToFile,%Link%,%A_WorkingDir%\Files\tmp\%tmpexe%_Download.exe
                ;Agora ele vai rodar o installer e vai fecha o app para poder instala a atualização
		run,%A_WorkingDir%\Files\tmp\%tmpexe%_Download.exe
		ExitApp
	}
	return
}
return
}
Assim devera estar o arquivo .ini:

Code: Select all

[00]
,Versão do programa
Ver=2.0
,Link do installer
Link=https://drive.google.com/uc?authuser=0&id=1ejXrw35gYDGFMSydnSIfWQVHjLVA-9sX&export=download
Agora vem um problema,você precisa instala o google drive em seu computador para poder editar o arquivo .ini e não ter que ficar mudando sempre o link no seu script,e o update pasta você deixar o mesmo nome e trocar o antigo pelo novo
Image



Agora você me pergunta:"Como uso isso?"
É bem simples,Só chamar essa função no topo do seu script dessa forma:

Code: Select all

;aqui ele chama a função logo (que eu uso nos meus scripts) que contem o "Update()"(mas você pode coloca o "Update()" no lugar)
Logo()
;Update()
;Seu script a baixo
;
;
;
;


;aqui as funções
Logo()
{
  Gui,New,AlwaysOnTop -Caption ToolWindow,Main
  Gui, Add, Picture,x0 y0 w800 h400, %A_WorkingDir%\Files\Img\Logo.png 
  Gui, show, w800 h400,Logo
  ;aqui ele chama o update
  Update()  
  Gui, Destroy
}
Update()
{
    
IniWrite, 2.0, %A_WorkingDir%\Files\Config.ini, Global, Ver
Random,tmpfile,1,2000
UrlDownloadToFile,https://drive.google.com/uc?authuser=0&id=1I9o6yDQuf_o1y1O-CA83Dodq23Do3VHN&export=download,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp
IniRead, NewVer,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp,00,Ver
IfNotEqual,NewVer,2.0
{
	lang := LoadLang("launcher","LOGO1")
	MsgBox, 262180, Update!, %lang%
	IfMsgBox,Yes
	{
		IniRead, Link,%A_WorkingDir%\Files\tmp\%tmpfile%_Download.tmp,00,Link
		Random,tmpexe,1,2000
        UrlDownloadToFile,%Link%,%A_WorkingDir%\Files\tmp\%tmpexe%_Download.exe
		run,%A_WorkingDir%\Files\tmp\%tmpexe%_Download.exe
		ExitApp
	}
	return
}
return
}
Espero que tenham gostado :)

PS:o motivo deu usar esse "splash screen"(Logo/tela de abertura) e que dependendo do computador ele pode demorar um pouco
PS2:O link do google drive deve estar na forma de download
Forma errada:https://drive.google.com/file/d/1WbL2wS ... qbEHj/view
Forma correta:https://drive.google.com/uc?authuser=0& ... t=download
para fazer isso,basta clica em baixar o arquivo e copiar rapidamente a URL de download


Link do LoadLang:https://autohotkey.com/boards/viewtopic ... 71&t=41783

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Auto-Update (Usando google drive)

Post by Gio » 28 Dec 2017, 11:32

Interessante. Obrigado por compartilhar :thumbup:

Em relação problema do link do arquivo, eu disponibilizo minha biblioteca de código de barras através do DropBox (ao invés do Google Drive) e percebi uma vez que tirei o arquivo existente e subi um atualizado, mas com o mesmo nome e na mesma conta, e assim o link do compartilhamento ficou o mesmo. Não sei se ainda funciona dessa forma e nem acho que (como qualquer serviço grátis) devamos confiar nisso para desenvolver aplicações pagas, mas por enquanto, pode ser uma solução interessante para que o atualizador não precise do arquivo .ini :beer:

User avatar
juanmuscaria
Posts: 65
Joined: 29 Oct 2017, 10:53
Location: Brazil
Contact:

Re: Auto-Update (Usando google drive)

Post by juanmuscaria » 28 Dec 2017, 20:22

Eu uso o google drive porque o UrlDownloadFile não funcionou no dropbox para mim,o ideal seria um FTB server porem nem todo mundo tem isso.
O motivo dele baixa um arquivo .ini e que esa foi a forma mais facil para verificar uma atualização (se tiver sugestão de uma forma melhor me fala).

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Auto-Update (Usando google drive)

Post by Gio » 29 Dec 2017, 14:23

Bom, o código a seguir baixa a minha biblioteca direto do dropbox para a área de trabalho sem problema. Demora alguns segundos, mas o arquivo aparece na mesma pasta que o script.

Code: Select all

URLDownloadToFile, https://www.dropbox.com/s/m5e6c2hy1faedkn/BARCODER.ahk?dl=1, %A_Desktop%/Barcoder.ahk
Return
Veja que mudei uma coisa na url que o dropbox me apresentou. Antes estava "dl=0" e eu coloquei "dl=1". Também é possível que o script não esteja conseguindo baixar por outro motivo, tipo as configurações de firewall ou a pasta escolhida. De qualquer forma, dá pra conseguir :beer:

RsTxSpyMaster
Posts: 8
Joined: 29 Sep 2018, 08:24

Re: Auto-Update (Usando google drive)

Post by RsTxSpyMaster » 21 Oct 2018, 12:25

Outra maneira utilizando o COM

Code: Select all

;version:=1.0.0

Pwb:= ComObjCreate("InternetExplorer.Application")
;Pwb.Visible := true
Pwb.Navigate("https://drive.google.com/file/d/_seu_endereço/view")
while pwb.busy or pwb.ReadyState != 4 ;Wait for page to load
	Sleep, 100

;Online:= Pwb.document.documentElement.innerText ;Get All text on page  <--+ confiavel porém precisa fazer limpeza do texto	
													
Online:=  Pwb.document.querySelector("div[class*='ndfHFb-c4YZDc-Wrql6b-V1ur5d']").innerText  ;inspeciona o elemento(^+i) e pega a class do texto que vc quer

Pwb.quit()
https://prnt.sc/l8o926
aí vc compara o "Online" com o "version" dentro do seu script...

Post Reply

Return to “Scripts e Funções”