49 votes

Comment activer les mises à jour automatiques dans une application multiplate-forme Qt?

J'aime les applications qui sont en mesure de mettre à jour eux-mêmes, sans aucun effort de l'utilisateur (tel que l' Éclat de cadre pour Mac). Est-il un code/bibliothèque je peux tirer pour ce faire, dans une application Qt, sans avoir à vous soucier de l'OS de détails?

Au moins pour Windows, Mac et l'utilisateur appartenant à des binaires Linux.

J'ai pu intégrer l'Éclat sur la version Mac, code quelque chose pour Linux cas (seulement pour les autonomes, l'utilisateur appartenant binaire; je ne plaisante pas avec la distribution de l'emballage, si mon programme est jamais emballé), et trouver quelqu'un pour m'aider sur le côté Windows, mais c'est horriblement douloureux.

21voto

Robert Knight Points 809

Ce n'est pas une solution complète, mais un multi-plateforme (Windows, Mac, Linux) un outil pour la création de packages pour l'auto-mises à jour et les installer est disponible à https://github.com/mendeley/Update-Installer. Cet outil ne permet pas de traiter avec la publication de mises à jour ou de les télécharger.

Ceci a été écrit pour une utilisation avec un Qt en fonction de la demande, mais pour faire la mise à jour de l'installateur de petites, autonome et facile à construire, le programme d'installation utilise uniquement le système standard de bibliothèques C++ runtime, pthreads/libz/libbz2 sur Linux/Mac, de l'API Win32 de Windows, Cocoa sur Mac, GTK avec repli sur Linux). Cela simplifie la livraison des mises à jour qui incluent de nouvelles versions de Qt et d'autres non-système de bibliothèques que votre application peut dépendre.

Avant d'examiner ce que, je dirais:

  • Si vous êtes seulement à la construction de deux plates-formes, envisager l'utilisation de standards et éprouvées de mise à jour automatique des cadres pour ces plates-formes - par exemple. De l'éclat sur Mac, Google Omaha sur Windows ou de mise à jour automatique des systèmes intégrés populaire installer des cadres (par exemple. InstallShield). Je n'ai pas essayé de BitRock.
  • Sur Mac, le Mac App Store peut être une bonne option. Voir https://bugreports.qt-project.org/browse/QTBUG-16549 cependant.
  • Sur Linux, pensez à créer une .paquet deb et un simple référentiel pour l'accueillir. Une fois que les utilisateurs disposent d'un référentiel mis en place, à l'échelle du système logiciel de mise à jour des outils prendra soin de vérifier et installer les nouvelles versions. Les étapes de la mise en place d'un nouveau référentiel sont cependant trop complexe pour de nombreux nouveaux Ubuntu/Debian utilisateurs. Ce que nous avons fait, et aussi de ce que Dropbox et Google ont fait, c'est d'en créer un .paquet deb, qui fixe le référentiel dans le cadre de l'installation du package.

Quelques autres notes sur la création d'un programme de mise à jour:

  • Sur Windows Vista/7, si l'application est installée à l'échelle du système (par exemple. dans C:\Program Files\$NOM) de vos utilisateurs verront un effrayant invite UAC lors de la mise à jour tente d'obtenir des autorisations d'écriture sur le répertoire d'installation. Ceci peut être évité, soit par l'installation d'un utilisateur du répertoire accessible à tous (je suppose que c'est ce que Google Chrome ne) ou par l'obtention d'un certificat Authenticode et de l'utiliser pour signer le programme de mise à jour binaire.
  • Sur Windows Vista/7, une application .exe ou DLL ne peut pas être supprimé si en cours d'utilisation, mais la mise à jour peut se déplacer à l'existant .exe/DLL dans un répertoire temporaire et un calendrier pour la suppression au redémarrage suivant.
  • Sur Ubuntu, 3e partie dépôts sont désactivés après la distribution des mises à jour. Google travaille autour de ce par la création d'un cron job d'ajouter à nouveau le référentiel si nécessaire.

9voto

Linas Points 442

Plug sans vergogne : Fervor , une application automatique multiplateforme simple (basée sur Qt) inspirée de Sparkle.

3voto

nonchalant Points 788

J'ai développé une auto-updater bibliothèque qui fonctionne à merveille sur Mac OS X, Linux et à peu près toutes les machines Unix qui permet de supprimer le lien d'un fichier lorsque le fichier est ouvert. La raison étant que j'ai simplement extrait les paquets téléchargés sur le dessus de l'application existante. Malheureusement, parce que je comptais sur cette fonctionnalité, j'ai couru dans des problèmes sur Windows que Windows ne vous permet pas de dissocier un fichier ouvert.

La seule alternative que j'ai pu trouver est d'utiliser MoveFileEx avec la remplacer en cas de redémarrage du pavillon, mais qui est terrible.

Cependant, le fait de renommer le répertoire de travail de l'application fonctionne sur Windows 7 et Windows XP. Je n'ai pas essayé de Windows Vista encore.

3voto

Daniel Lopez Points 2176

Bien que cela fonctionne un peu différemment de Sparkle, BitRock InstallBuilde contient un autoupdater écrit en Qt qui peut être utilisé indépendamment (disclaimer, je suis le développeur BitRock original). C'est une application commerciale, mais nous avons des licences gratuites pour les projets open source.

2voto

Rakesh Singh Points 162

La publication de blog Mixing Cocoa and Qt peut résoudre le problème pour la plate-forme Mac.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X