AutoIt, mise à jour d'application
Sunday, 28. January 2007, 12:13:20
Beaucoup d’application comporte de nos jours un système de mise permettant de vérifier très rapidement s’il existe une version plus récente de l’application que nous utilisons.
A l’instar de AutoUpdateIt qui est très bien fait mais aussi complexe à comprendre nous allons maintenant réaliser un système similaire mais beaucoup plus simple.
En premier temps il faut savoir que nous allons avoir besoin d’un espace d’hébergement web permettant d’héberger un fichier d’approximativement 50ko (non je ne me suis pas trompé de mesure !).
Voyons maintenant le principe : contenir les informations de mise à jour dans un fichier à la structure d’un fichier de configuration, le télécharger localement et renseigner une interface graphique qui contiendra les informations locale et celles disponible au téléchargement. Cette interface graphique devra aussi permettre en une seule opération le téléchargement et le lancement de la mise à jour.
Prêt ? On attaque !
Alors en premier temps, voyons la structure de notre fichier de configuration :
[Stable] version=1.2.3 url=http://www.autoitscript.com/autoit3/files/beta/autoit/autoit-v3.2.1.14-beta-setup.exe [Beta] version=1.3.4 url=http://www.autoitscript.com/autoit3/files/beta/autoit/autoit-v3.2.2.0-rc3-setup.exe
Il s’agit donc d’un simple fichier INI dans une structure tout à fait normal. Nous renseignons les champs que nous avons besoin selon deux structures : stable et de test.
Initialisons maintenant une fonction pour télécharger ce dit fichier en un espace local :
$s_uri = "http://monserveur.monespace.be/"
$s_file = "fichier_ini_renomme.dat"
$s_localFile = @TempDir & "\test.ini"
$s_tempDownloadedFile = @TempDir & "\test"
Func _GetFile()
InetGet($s_uri & $s_file, $s_localFile, 1, 1)
While @InetGetActive
SplashTextOn("Télechargement", "Téléchargement en cours, veuillez patienter... " & _
"(" & @InetGetBytesRead & " bytes)", -1, -1, -1, -1, "Tahoma", -1, -1)
WinActivate("Téléchargement")
Sleep(3000)
SplashOff()
WEnd
$s_iniReadStable = IniRead($s_localFile, "Stable", "version", "ErrIniReadStable")
$s_iniReadBeta = IniRead($s_localFile, "Beta", "version", "ErrIniReadBeta")
$s_sizeStable = InetGetSize(IniRead($s_localFile, "Stable", "url", "ErrSizeStable"))
$s_sizeBeta = InetGetSize(IniRead($s_localFile, "Stable", "url", "ErrSizeStable"))
EndFuncComme vous pouvez le constater, le fichier de configuration ne se trouve pas présent ! Je l’ai renommé en fichier DAT qui est plus adéquat qui sera renommé par la suite en test.ini ou peu importe le nom que vous lui donnez.
De manière tout à fait similaire, récupérer le fichier qui nous intéresse :
Func _downloadFile($i_version); variable pour déterminer la version selon l'INI
; Ici deux choix : Stable ou Beta
; => _downloadFile("beta") téléchargera
; la version test (beta) du fichier
InetGet(IniRead($s_localFile, $i_version, "url", "ErrSizeStable"), $s_tempDownloadedFile & $i_version & ".exe", 1, 1)
While @InetGetActive
SplashTextOn("Télechargement", "Téléchargement en cours, veuillez patienter... " & _
"(" & @InetGetBytesRead & " bytes)", -1, -1, -1, -1, "Tahoma", -1, -1)
WinActivate("Téléchargement")
Sleep(3000)
SplashOff()
WEnd
SplashTextOn("Téléchargement", "Téléchargement terminé, veuillez patienter..." & _
-1, -1, -1, -1, "Tahoma", -1, -1)
Sleep(3000)
SplashOff()
_launchDownloadedFile($s_tempDownloadedFile & $i_version & ".exe")
EndFuncComme vous pouvez le voir, j’ai précisé une variable dans la fonction qui nous permettra par la suite de savoir s’il s’agit du fichier beta ou du fichier stable… N’oublions pas que l’on peut faire les deux par la même fonction.
Il nous faut donc distinguer l’acquisition des fichiers par une variable dans la fonction même.
Et votre instint à pu voir que cette fonction comportait aussi l’appel vers une autre fonction que voici :
Func _launchDownloadedFile($i_path) RunWait($i_path, @TempDir) EndFunc
Cette dernière va simplement lancer l’installation de la mise à jour. Si vous avez des paramètres à rentrer, c’est dans cette dernière qu’il faudra le faire (le mode Unattended ou Stealth des applications… Pourquoi pas !).
Construisons par la suite la GUI et le tour est joué :
Dim $s_uri, $s_file, $s_fileOpen, $s_iniReadStable, $s_iniReadBeta, $s_sizeStable, $s_sizeBeta
Dim $s_localFile, $s_tempDownloadedFile, $gui_MAJ, $lbl_VersionStable, $lbl_VersionBeta
Dim $lbl_VersionInstalleeStable, $lbl_VersioninstalleeBeta
$s_uri = "http://users.skynet.be/digital-nation/zlam/"
$s_file = "test.dat"
$s_localFile = @TempDir & "\test.ini"
$s_tempDownloadedFile = @TempDir & "\test"
#include <GUIConstants.au3>
$gui_MAJ = GUICreate("Mise à jour v0.2.209.alpha", 330, 253, 543, 246)
GUICtrlCreateGroup(" Version disponible : ", 10, 15, 310, 90)
GUICtrlCreateLabel("Version Stable :", 25, 40, 80, 20)
GUICtrlCreateLabel("Version Beta :", 25, 65, 70, 20)
$lbl_VersionStable = GUICtrlCreateLabel($s_iniReadStable, 130, 40, 100, 20)
$lbl_VersionBeta = GUICtrlCreateLabel($s_iniReadBeta, 130, 65, 100, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" Version installée : ", 10, 115, 310, 90)
GUICtrlCreateLabel("Version Stable :", 25, 140, 78, 17)
GUICtrlCreateLabel("Version Beta :", 25, 165, 70, 17)
$lbl_VersionInstalleeStable = GUICtrlCreateLabel(FileGetVersion("monApplication.exe"), 130, 140, 85, 17)
$lbl_VersioninstalleeBeta = GUICtrlCreateLabel(FileGetVersion("monApplication.exe"), 130, 165, 77, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$btn_Annuler = GUICtrlCreateButton("&Annuler", 230, 215, 90, 30)
$btn_Beta = GUICtrlCreateButton("&Beta", 125, 215, 90, 30)
$btn_Stable = GUICtrlCreateButton("&Stable", 15, 215, 90, 30)
GUISetState(@SW_SHOW)
While 1
$s_gui = GuiGetMsg()
Select
Case $s_gui = $GUI_EVENT_CLOSE OR $s_gui = $btn_Annuler
ExitLoop
Case $s_gui = $btn_Beta
_downloadFile("Beta")
Case $s_gui = $btn_Stable
_downloadFile("Stable")
EndSelect
WEnd
ExitIl ne manque plus que l’appel de la fonction pour initialiser le tout : _GetFile()
Et le tour est joué !
Il vous appartient maintenant à personnaliser. Je n’ai pas utilisé ici les variables de tailles, mais elles sont opérationnelles, je n’ai pas personnalisé les SplashTextOn non plus… Ou encore la manière d’installer. Toutes ces options vous appartiennent et libre à vous de les perfectionner.
Quelque chose d’utile par contre serait une comparaison de version installée et de version disponible et voir pour l’activation ou non du bouton de téléchargement et installation.