Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] Mise à jour automatique

Bonjour à tous !

Je suis en pleine conception de QEvel, et je voudrais mettre en place une mise à jour automatique du programme qui fonctionne sur les plateformes Linux, Mac et Windows.
J'aimerai bien développer un ensemble de classes Qt permettant de mettre à jour simplement un logiciel, mais je n'ai pas envie de réinventer la roue (surtout si au final la mienne est carré) :P.
Je pense que cela serait faisable avec du SOAP ou simplement des fichiers xml (permettant de connaitre la dernière version du logiciel) accessibles en http.
Est ce que vous connaissez des outils, librairies ou autres permettant de gérer tout ca ?


PS : J'ai mis en ligne un site parlant de QEvel. Il n'y a pas grand chose pour l'instant, mais est ce que vous pouvez me dire ce que vous en pensez (avis, conseil) ? Il est disponible ici : www.qevel.org en anglais, et la : fr.qevel.org en français.

Réponses

  • Salut,

    J'utilise QHttp pour faire ça sur mon appli.
    Dans un fichier ascii sur un espace web j'ai les versions de mes plugins et de l'appli principale.
    avec QHttp je download ce fichier, je l'ouvre et le compare avec les versions de l'appli et plugins locaux.
    Ensuite, si des versions postérieures existent sur le site tu renomment en .bak ton appli.exe et tes plugins, ensuite tu télécharges les fichiers plus récents et tu les mets aux bons endroits (à la place des anciens) et tu relances l'appli.
    Cette technique marche car tu as le droit de renommer ton appli.exe en appli.bak même si cette appli et lancée, de même pour les dlls. Par contre pas le droit de les effacer.

    romain
  • Merci pour cette réponse.
    roms18 said:
    Cette technique marche car tu as le droit de renommer ton appli.exe en appli.bak même si cette appli et lancée, de même pour les dlls. Par contre pas le droit de les effacer.
    Je ne savais pas qu'il était possible de modifier le nom d'une application durant son exécution. Est ce que cela marche avec tous les systèmes d'exploitation ? Mais si ca marche, ca ne change pas l'application qui est en train de tourner (enfin je pense), il faut quand même redémarrer le logiciel. Il faut donc exécuter un programme externe qui soit capable de relancer l'application principale. Ou alors je n'ai pas tout compris.

    Il y a d'autres choses à gérer, tels que la mise à jour des fichiers de configuration ou de la base de registre, et je dois certainement en oublier d'autres.

    Je pense alors qu'il serait possible de voir la choses différemment : le logiciel principal ne ferait que télécharger un fichier exécutable qui se chargerait lui même de la mise à jour (en ayant en ressource les nouvelles versions de l'application et des plugins).
    La mise à jour se ferait alors de la manière suivante :
    - le programme principal regarde dans un fichier xml récupéré depuis internet la dernière version disponible du logiciel
    - si l'application est à jour (ou si il n'est pas possible de récupérer le fichier xml) :
    - elle ne fait rien et continue son exécution normale
    - sinon :
    - il télécharge alors le programme de mise à jour (dont l'url est donnée dans le fichier xml)
    - le programme principal lance le programme de mise à jour (en lui passant en paramètre le(s) nom(s) du(es) fichier(s) de configuration, ou les emplacements dans le registre) et s'arrête
    - le programme de mise à jour détecte la version du programme principal ainsi que de ses plugins (à l'aide des fichiers de configuration, ou du registre)
    - le programme de mise à jour sauvegarde l'ensemble des fichiers qu'il va modifier
    - il met à jour tout ce qui est nécessaire
    - si la mise à jour s'est bien déroulée :
    - le programme de mise à jour supprime les copies de sauvegarde
    - il affiche un message à l'utilisateur lui indiquant le bon déroulement de la mise à jour
    - si la mise à jour ne s'est pas bien déroulée (impossible de modifier les fichiers de configuration, la base de registre, ...) :
    - le programme de mise à jour rétablie l'ancienne configuration (à l'aide des sauvegardes)
    - il affiche un message d'erreur indiquant pourquoi la mise à jour na pas pu se faire
    - il lance l'application principale puis se ferme

    Je ne suis pas sur du tout que tout cela soit bien pensé.
    Ta solution ne m'a pas l'air mauvaise, c'est juste que je ne vois pas comment relancer l'application principale une fois la mise à jour terminée.
  • Salut,

    rien ne t'empêche de relancer ton appli à l'aide de QProcess en detached() et quitter ton soft ensuite.
    Je pense que cela doit marcher.

    romain
  • Pas faux, je n'y avait pas pensé (il faut quand même faire attention aux applications qui sauvegardent des paramètres à la fermeture).
    A tu déjà testé sur linux ou mac le fait de modifier le nom de l'application ou d'une librairie pendant qu'elle tourne ?
  • non jamais désolé

    A toi de tester ;)
  • Adrien13 said:
    Je ne savais pas qu'il était possible de modifier le nom d'une application durant son exécution. Est ce que cela marche avec tous les systèmes d'exploitation ?
    la réponse est non
    selon le système, les fichiers (executables et objets partagés (dll)) sont ouverts pendant l'exécution d'une application et les modifier provoque un crash
  • Merci pour ces réponses.
    Il me semble avoir déjà fait quelque chose de semblable (j'avais recompilé une application pendant qu'elle tournait), ce qui avait provoqué un crash, mais je n'en suis pas certain.
    Je testerai quand même des lors que je m'attaquerai à la conception du module de mise à jour.

    Encore merci.
  • Je pense que, quoiqu'il en soit, c'est toujours une sage précaution d'arrêter une application avant d'effectuer une mise à jour!
  • Nicolas SOUCHON said:
    Je pense que, quoiqu'il en soit, c'est toujours une sage précaution d'arrêter une application avant d'effectuer une mise à jour!
    Je pense aussi la même chose.
  • Pas mal d'application utilise un autre binaire (genre updater_monapp et équivalent). C'est à lui que tu peux confier cette tâche.
  • Merci pour la réponse.
    Je me servirai donc d'une application externe.
Connectez-vous ou Inscrivez-vous pour répondre.