Page 1 sur 1

[Tuto] Mise A jour Automatique de Votre programme

Posté : lun. 13 oct. 2008 19:22
par timmalos
En raison d'un grand nombre de demandes, j'ai décidé de creer ce tuto.
Il vous apprendra à:

-Vérifier au lancement du programme si l' utilisateur possède la dernière version.
-Créer un programme qui va faire l'update tout seul
► Afficher le texteATTENTION

Les 2 parties sont assez reliées, je vais donc vous proposer un script complet de la première partie, je vais vous l'expliquer, puis je vous montrerai toutes les améliorations possibles.

La manière la plus simple de vérifier si le programme en cours d'execution est la dernière version est la suivante:
:arrow: Lors de l'installation de votre programme, il faudra inscrire dans le registre ou par un fichier ini la version qui est installée:
Par exemple:

Code : Tout sélectionner

RegWrite("HKLM\Software\Gwall", "Version","REG_SZ","10.0.2008")

ou

IniWrite("parametres.ini","Version","Version_en_cours","10.0.2008")
 

:arrow: A chaque nouvelle version, il vous suffit d' uploader sur votre ftp un fichier ressemblant à ceci:
► Afficher le texteFichier
version: La version de votre nouveau programme
adresse: C'est l'url ou l'utilisateur sera envoyé, ca peut etre l'adresse de l'executable ou une page de telechargement en .html
maj:petite amélioration, le programme ne fera pas la meme action si votre mise
a jour est majeure ou mineur (type: majeur/mineur)



:arrow: A chaque lancement de votre programme, ou quand l'utilisateur clique sur un bouton, on va vérifier sur un serveur Internet qu'une version plus evoluée n'est pas en ligne.

Pour cela, on va utiliser le code suivant:
:!: Le code suivant est amélioré pour afficher a l'utilisateur l'action en cours :!:
:!: Il pourrait etre reduit a beaucoup plus simple, si vous en avez le besoin n'hesitez pas à demander en répondant à ce sujet :!:
:!: La variable $b_Download_UpdateDat est utile pour tester le script en local uniquement :!:
► Afficher le texteCode
Quand ce petit bout de script aura fini de s'executer, il y a 2 solutions:
Soit une mise a jour est detectée, il va lancer qq chose(en fonction de majeure/mineure) puis le programme continue a tourner
Pour toutes les autres solutions, le programme continue a tourner et aucune action n'est entreprise




---------------------------------------------------------------------------------
Voila pour la 1ere partie, la 2eme viendra une autre fois
Elle utilise l'exemple fourni dans Autoit, l'utilitaire qui permet de telecharger les dernieres versions d'autoit
---------------------------------------------------------------------------------



J'espère que vous avez tout compris, dans le cas echeant n'hesitez pas a poser des questions.

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : sam. 25 oct. 2008 14:20
par timmalos
Voila la 2ème partie codée: Quand le script de mon post precedant verifie la mise a jour, au lieu d'envoyer directement l'utilisateur sur Internet, vous pouvez utiliser un petit programme qui installera tout seul. Ce post fait suite a plusieurs demandes sur le forum.
Le script que je vous propose vient tout droit du code autoit present lors de l'installation d'Autoit (fait par Bob Saunder) et la version que je vous propose est simplifiée et ne gère pas les versions bétas.
► Afficher le texte
Vous n'avez que quelques lignes a changer:


Global Const $s_Title = 'Telechargement de la Dernière Version'
Global Const $s_Version = '2.7'
Global Const $s_DatFile = 'http://tim.malossane.free.fr/update.dat'
Global Const $b_Download_UpdateDat = 1
Global Const $s_DatFile_Local = @ScriptDir & '\au3_update.dat'
Global Const $s_Au3UpReg = 'HKLM\SOFTWARE\******'

ca marche de la meme facon que la première partie du tutoriel, avec le .dat, la verification de la version dans le registre, etc...

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : lun. 27 oct. 2008 10:54
par Cyrille
Merci pour ce tuto, il va être très utile :D

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : ven. 14 nov. 2008 22:13
par timmalos
:arrow: 1er Code Modifié et Mis A jour
:arrow: 2ème Code Simplifié et retirement de l'include all.au3, pour ne pas perturber.
:arrow: J'en ai profiter pour retirer tous les messages pour garder le tuto propre. Vous pouvez bien entendu poster si il y a encore des soucis.

J'ai du mal a tout expliquer etant donné la complexité, je ne sais pas si je dois encore retirer certaines choses, mais dans un autre temps , ca peut interesser certaines personnes d'avoir des scripts complets.
Si vous avez d'autres questions n'hesitez pas

Excusez moi des erreurs, j'aurai du reverifier avant :oops: ...Mea Culpe :roll:

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : jeu. 26 mars 2009 03:47
par Iste
Salutations,

J'avais regardé ce script quand j'ai voulu faire mon systeme de MAJ, mais je l'avais trouvé un peu compliqué.
Maintenant que je re regarde, il est juste complet, mais :

-Es-ce vraiment utile d'utiliser une clef registre ? C'est pas tres propre dans le cadre d'un logiciel qui se balade beaucoup. De plus, autoit nous insite a faire plein de petit executable. De quoi vite inonder le registre. De meme, pas besoin d'ini, on peut ecrir la version en dur dnas le script

-A quoi sert le .dat ? De ce que j'ai compris du script, il s'agit juste d'un fichier redigé comme un ini. Peut-on m'expliquer ?

-Pourquoi une fonction _CompareVersions si compliquée ? Je pars du principe que l'user a obligatoirement une inferieur ou egale a celle hebergée. Donc soit c'est identique, on fait rien, soit ca l'est pas, on met a jour

Sinon, voici le code que j'utilise au debut de mes script pour les MAJ
► Afficher le texte
Et le logiciel de MAJ upé a coté de mon info.txt
► Afficher le texte
(info.txt se presente sous la forme "version|importance|adresse du maj.exe" (ex :"5|3|http:// ... /maj.exe"))

Voila, merci d'avance de bien vouloir m'eclairer ^^

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : jeu. 26 mars 2009 18:43
par timmalos
Bonjour a vous ,) Bien entendu je susi ravi de repondre a vos questions, et j'espere que je n'oublierai rien:

-Es-ce vraiment utile d'utiliser une clef registre ? C'est pas tres propre dans le cadre d'un logiciel qui se balade beaucoup. De plus, autoit nous insite a faire plein de petit executable. De quoi vite inonder le registre. De meme, pas besoin d'ini, on peut ecrir la version en dur dnas le script


Ces Exemples ont été piochés dans un Logiciel que j'ai codé qui pèse plus de 300 ko seul, il est donc complet et il m'a été difficile de recuperer seulement les informations utiles pour un tutoriel sur la mise a jour. Dans le cas de mon logiciel, il etait bien plus simple d'utiliser une clef de registre. Pourquoi ne pas le mettre dans un fichier? Car la mise a jour devait etre presque obligatoire, et comme ce script permet de mettre tres souvent a jour un logiciel il suffit de changer une clef dans le registre lors de l'installation faite avec InnoSetup pour tout mettre a jour. ->>> Facilités, Apres c'est a vous de choisir encore une fois ce n'est qu'un Exemple.


-A quoi sert le .dat ? De ce que j'ai compris du script, il s'agit juste d'un fichier redigé comme un ini. Peut-on m'expliquer ?
C'est Exact, l'extension est en .dat car j'ai coutume de mettre cettre extension pour un fichier provisoire, car ce .dat qui est enfait un .ini est le fichier qui va etre mis sur le Serveur Distant (par exemple http://***.free.fr/logiciel/date.dat)

Le Programme va se connecter a internet, telecharger ce fichier, et en l'analysant va savoir si la version qui est sur le net est plus evoluée que celle presentement installée. C'est la base du système.

-Pourquoi une fonction _CompareVersions si compliquée ? Je pars du principe que l'user a obligatoirement une inferieur ou egale a celle hebergée. Donc soit c'est identique, on fait rien, soit ca l'est pas, on met a jour


Tout simplement car la fonction _CompareVersions sert a comparer des versions du type 3.14.15657 Inferieur à 3.14.15700 Ou encore 1.2 Superieur à 1.1 et pas seulement une comparaison simple de 3 Inferieur à 4.

Voila donc, si d'autres questions n'hesitez pas

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : jeu. 26 mars 2009 20:16
par Iste
Merci pour les réponces ^^

Bon alors, pour les clef registre je suis pas bien convaincu, mais comme je fais que de petit script, je peux pas trop savoir. Donc j'en prend note ;)

Pour le .dat ok, ca m'avait perturbé ^^'

Sinon, pour comparer deux versions, meme si je vois pas reelement l'interet de savoir si la version utilisée est plus recente ou plus ancienne, je dois avouer que ca peut etre utile. J'ai donc longuement etudier ta fonction (j'ai eu du mal a la comprendre ^^') mais en fait elle est pas si compliquée que ca.
► Afficher le textema propre fonction
Voila, encore merci, j'espere que ca pourra me servir le jour ou je ferais de vrais gros script :)

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : jeu. 26 mars 2009 20:54
par GaRydelaMer
Bonsoir

Une autre idée plus rapide car la fonction existe déja.

Utiliser une date, date de compilation par exemple. En dur une constante avec la date "2009/03/26 14:05:00" et sur le serveur web au moment de la compilation du programme avec les directives au wraper tu créer et tu lance un petit programme qui ajoute la date du jour dans le fichier .DAT.

pour comparer la fonction _DateDiff()

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_After=EcrireDateVersion.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Date.au3>
Global Const $dateVersionUser = "2009/03/25 10:00:00"

; télécharger le fichier .DAT et IniRead()
;......InetGet() 
$dateVersionServeur = "2009/03/26 20:00:00"

$iDiff = _DateDiff('s', $dateVersionUser, $dateVersionServeur)
MsgBox(4096, "", "Nombre de secondes: " & $iDiff)
If $iDiff < 0 Then
    MsgBox(0, "", "Version à jour", 5)
Else
    MsgBox(0, "", "Version pas à jour", 5)
    ;_download & Install
EndIf

;;;; à compiler avec ce nom, sinon pense à le changer dans le 1er programme
;EcrireDateVersion.exe
;;;
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Date.au3>
$INI = "chemin vers le fichier .DAT"
IniWrite($INI, "Version", "Date", _NowCalc())
 

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : ven. 27 mars 2009 23:16
par timmalos
Le Soucis c'est qu'il n'y a pas de nouvelles versions tous les jours !


Voila mon point de vue :

A chaque lancement du logiciel, le bout de script va verifier si la version est a jour sur internet en comparant la clef sur le registre et celle obetnue du .dat

3 Cas de figure,

-soit on a 3.14.24 sur l'ordinateur et 3.14.24 sur le .dat, alors on ne fait rien, le programme est a jour
-soit on a 3.14.24 sur l'ordinateur mais 3.14.25 sur le .dat, alors c'est une mise a jour MINEURE pas oblitatoire, car la fonction _compareversion peut facilement etre adaptée pour qu'on trouve si c'est une version mineure ou majeure
-soit on a 3.14.24 sur l'ordinateur mais 4.1 sur le .dat, alors c'est une mise a jour MAJEURE Obligatoire...


Voilà pourquoi la fonction _compareversions est si detaillée, car elle peut permettre, en partant sur sa base de creer moultes choses, et comme ceci est une aide il me semble interessant de la laisser comme tel.


Pour l'heure, c'est exactement le meme systeme, sauf qu'on complique un peu car on choisit pas de mettre Version 1 ou 2 mais il faut utiliser l'Udf Date.au3 pour trouver la difference des datse, etc... Et pour le traitement c'est plus compliqué egalement, donc je susi pas tenté ;)

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : mer. 17 févr. 2010 11:19
par Drave
Salut a tous, tout d'abord je trouve ton tutoriel SUPER mais il faudrait ajouter quelque chose : Une liste de serveur ftp car moi je n'en connait aucun et sans cela je ne peut pas continuer mon programme .

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : mer. 17 févr. 2010 13:12
par timmalos
Effectivement, il faut trouver un hebergement.
Soit il faut payer, je conseille la premiere offre de 1&1 (20 € / An)
Soit tu utilise un service gratuit, meme avec pub ici ca ne te derangera pas, il y a bien sur free.fr mais il faut un peu tricher (tu commande un offre bas débit, tu ne payes que ce que tu consommes, mais vu que tu ne consommes rien ca ne coute rien) ce qui te permet d'avoir un compte et un ftp.

Soit tu utilise un site de depot de fichier. Il en existe quantité.
Je peux te conseiller le mien ;) http://usb-online.fr tu te crée un compte, et à chaque mise a jour tu remplace le fichier .dat par le nouveau, qui aura une adresse qui ressemble à http://usb-online.fr/file-view-XXXX.html ( va bientot être raccourci, dès que je me reoccuperai de mon site.

Je peux également te donner un accès à l'un de mes ftp free.fr gratuits que je n'utilise plus sur lequel tu pourrai poser ton fichier.

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : sam. 27 févr. 2010 19:26
par Kikoolol
Bonjour à tous !
Tout d'abord un grand bravo pour ce tuto !
Mais j'aurais encore une question.
Une fois que l'on à détecté qu'une nouvelle version est disponible, et que l'on à l'adresse du nouveau .exe à télécharger. Comment télécharger le nouveau .exe, et le remplacer par celui exécuté ?

Merci

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : dim. 28 févr. 2010 01:22
par timmalos
Pour le telechargement, voir InetGet et dérivés , ou alors le 2eme script du tuto qui est censé te montrer le telechargement du fichier justement.

Si ton fichier ne contient qu'un executable et que tu veux le mettre a jour directement, il va falloir passer par la fonction AutoDelete (http://www.autoitscript.fr/forum/viewto ... f=21&t=452) pour supprimer l'ancien executable.

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : ven. 02 avr. 2010 14:03
par benzo
super tuto :D

Par contre si je ne souhaite pas effectuer la mise à jour , donc je clique sur la msgbox "non" il télécharge quand même le fichier
ca doit se jouer la dedans mais comment rajouter la condition?

Code : Tout sélectionner

If _CompareVersions($s_ReleaseVer, $version) Then;On compare ici les versions, marche pour n'importe quel systeme de version avec des points "."
            $msgversion = MsgBox(4 + 64, "Une nouvelle Version est Disponible", "Souhaitez vous la télécharger?")
            If    $s_ReleaseMaj = "majeur" then
                    _Start($s_ReleaseAdr)
                    ExitLoop
                Else
                    _Start($s_ReleaseAdr)
                    ExitLoop
            EndIf
        Else
                    ExitLoop
            
        EndIf
    EndIf

WEnd
merci d'avance

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : ven. 02 avr. 2010 15:30
par DJSIR
Déja, premièrement, il faut consulter l'aide. C'est toujours utile d'avoir le code retour des boutons.

Ensuite, un petit :
If $msgbox = #Oui# Then
..
EndIf

Remplace #Oui# par le code retour de ton bouton.

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : ven. 02 avr. 2010 15:44
par benzo
En fait j'avais déjà testé ca :

Code : Tout sélectionner

 If _CompareVersions($s_ReleaseVer, $version) Then;On compare ici les versions, marche pour n'importe quel systeme de version avec des points "."
            $msgversion = MsgBox(4 + 64, "Une nouvelle Version de  est Disponible", "Souhaitez vous la télécharger?")
            if $msgversion=6 then
If $s_ReleaseMaj = "majeur" then
                    _Start($s_ReleaseAdr)
                    ExitLoop
                Else
                    _Start($s_ReleaseAdr)
                    ExitLoop
            EndIf
        Else
           
            Exitloop
        EndIf
    EndIf
endif
WEnd

 
et ca marche lol
mais faut le rajouter ....dur :P

en tout cas merci d'avoir répondu aussi vite

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : sam. 04 mai 2013 09:59
par Utilisateur 4989 supprimé
Bonjour à tous,
j'ai voulu moi aussi utiliser ce système de mise à jour, mais j'ai du faire une erreur quelque part puisque ça ne marche pas.
Voici ce que j'ai fais :
► Afficher le textemon script AutoIt
Et sur mon hébergeur :

Code : Tout sélectionner

[Nom de mon logiciel]
version=1.1
adresse=http://ADRESSE_D_UNE_PLATEFORME_D_HEBERGEMENT/maj/NOM_DE_MON_LOGICIEL.exe
maj=mineur

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : dim. 12 mai 2013 11:12
par Utilisateur 4989 supprimé
N'ayant aucune réponse à mon dernier message depuis plusieurs semaines (la date du message n'est plus bonne parce que je l'ai édité pour mettre à jour le code que j'ai testé), j'ai galéré pour chercher des moyens détournés pour arriver à faire ce système de mise à jour, et j'y suis arrivé ! Tout seul.
Problème résolu pour ma part.

Re: [Tuto] Mise A jour Automatique de Votre programme

Posté : mer. 22 juil. 2020 17:02
par dopi
Bonjour,

J’essaie également de le mettre en place, mais sans succès.

Code : Tout sélectionner

Global Const $s_DatFile = 'http://www.site.fr/dl/prog/update.dat';l'adresse ou vous avez mis votre .dat
Global Const $s_DatFile_Local = @ScriptDir & '\au3_update.dat'; a peu d'importance, il vaut mieux ne pas toucher
Global Const $b_Download_UpdateDat = 1;0 pour tester en local

$version = Iniread("\version.ini", "SCRIPT_VERSION", "VERSION", "1")
;Cette ligne va aller chercher la version du logiciel en cours d'utilisation

If $b_Download_UpdateDat Then
    SplashTextOn("", "Vérification de la Version...Veuillez patienter", 450, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
    $inetget = InetGet($s_DatFile, $s_DatFile_Local, 1);Commande qui va recuperer en ligne le fichier.dat pour pouvoir l'analiser après
    SplashOff()
Else
    FileCopy(@ScriptDir & '\update.dat', $s_DatFile_Local) ; to test locally
EndIf

Fichier update.dat sur le FTP:

[SCRIPT_VERSION]
VERSION =2
adresse=http://www.site.fr/MAJ_prog.exe
maj=majeur

Et mon fichier INI (version.ini) :

[SCRIPT_VERSION]
VERSION =1

Une idée ?
Merci :)