[Tuto] Mise A jour Automatique de Votre programme

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

[Tuto] Mise A jour Automatique de Votre programme

#1

Message par timmalos » lun. 13 oct. 2008 18:22

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.

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#2

Message par timmalos » sam. 25 oct. 2008 13:20

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...
Modifié en dernier par TommyDDR le mar. 28 juin 2011 08:19, modifié 1 fois.
Raison : Trop de couleurs en code=AutoIt :x

Cyrille
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 21 avr. 2008 11:18
Status : Hors ligne

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

#3

Message par Cyrille » lun. 27 oct. 2008 10:54

Merci pour ce tuto, il va être très utile :D

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#4

Message par timmalos » ven. 14 nov. 2008 22:13

: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:

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#5

Message par Iste » jeu. 26 mars 2009 03:47

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 ^^
Signez ici

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#6

Message par timmalos » jeu. 26 mars 2009 18:43

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

Avatar du membre
Iste
Modérateur
Modérateur
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#7

Message par Iste » jeu. 26 mars 2009 20:16

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 :)
Signez ici

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#8

Message par GaRydelaMer » jeu. 26 mars 2009 20:54

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())
 

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#9

Message par timmalos » ven. 27 mars 2009 23:16

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é ;)

Drave
Niveau 4
Niveau 4
Messages : 53
Enregistré le : lun. 27 avr. 2009 08:47
Status : Hors ligne

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

#10

Message par Drave » mer. 17 févr. 2010 11:19

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 .
Un pti clique svp sa fait beaucoup pas de mal !
http://mon-zoo.jeuxcherche.com/myzoo.php?pseudo=drave

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#11

Message par timmalos » mer. 17 févr. 2010 13:12

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.

Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

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

#12

Message par Kikoolol » sam. 27 févr. 2010 19:26

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

Avatar du membre
timmalos
Modérateur
Modérateur
Messages : 1970
Enregistré le : dim. 18 mai 2008 14:16
Contact :
Status : Hors ligne

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

#13

Message par timmalos » dim. 28 févr. 2010 01:22

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.

benzo
Niveau 4
Niveau 4
Messages : 60
Enregistré le : mar. 07 août 2007 06:45
Status : Hors ligne

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

#14

Message par benzo » ven. 02 avr. 2010 13:03

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

Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 14:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Contact :
Status : Hors ligne

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

#15

Message par DJSIR » ven. 02 avr. 2010 14:30

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.
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin

benzo
Niveau 4
Niveau 4
Messages : 60
Enregistré le : mar. 07 août 2007 06:45
Status : Hors ligne

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

#16

Message par benzo » ven. 02 avr. 2010 14:44

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

vla
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 16 févr. 2013 09:56
Status : Hors ligne

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

#17

Message par vla » sam. 04 mai 2013 08:59

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
Scripts compilés en 32 bits, pour un ordinateur Windows 7 Familiale Premium 64 bits et un ordinateur Windows 7 Starter 32 bits.

vla
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 16 févr. 2013 09:56
Status : Hors ligne

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

#18

Message par vla » dim. 12 mai 2013 10:12

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.
Scripts compilés en 32 bits, pour un ordinateur Windows 7 Familiale Premium 64 bits et un ordinateur Windows 7 Starter 32 bits.

Bobi
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mer. 16 janv. 2019 19:44
Status : Hors ligne

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

#19

Message par Bobi » mer. 16 janv. 2019 20:46

Bonjour,

J'aurais besoin d'aide svp, je ne comprend pas, je n'arrive pas a faire fonctionner le programme, aucun nouveau fichier trouvé puis j'ai une redirection Google. Je pense avoir tout paramétrer comme il le fallait mais visiblement non.

Répondre