web-dev-qa-db-fra.com

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

J'adore les applications capables de se mettre à jour sans aucun effort de l'utilisateur (pensez: Sparkle framework pour Mac). Existe-t-il un code/une bibliothèque que je peux utiliser pour le faire dans une application Qt, sans avoir à me soucier des détails du système d'exploitation?

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

Je pourrais intégrer Sparkle sur la version Mac, coder quelque chose pour Linux (uniquement pour un binaire autonome appartenant à l'utilisateur; je ne plaisanterai pas avec distribution packaging, si mon programme est déjà fourni), pour m'aider du côté de Windows, mais c'est horriblement douloureux.

46
F'x

OK, alors je suppose que je le prends comme une "voie non (multi-plateforme)". C'est dommage!

0
F'x

Ce n’est pas une solution complète, mais un outil multiplate-forme (Windows, Mac, Linux) permettant de créer des packages de mise à jour automatique et de les installer est disponible à l’adresse https://github.com/mendeley/Update-Installer . Cet outil ne traite pas de la publication des mises à jour ni de leur téléchargement.

Ceci a été écrit pour être utilisé avec une application basée sur Qt mais pour rendre le programme d'installation de mise à jour petit, autonome et facile à construire, le programme d'installation utilise uniquement les bibliothèques système standard (environnement d'exécution C++, pthreads/libz/libbz2 sous Linux/Mac, API Win32 sous Windows , Cocoa sur Mac, GTK avec repli sur Linux). Cela simplifie la fourniture de mises à jour comprenant de nouvelles versions de Qt et d'autres bibliothèques non système sur lesquelles votre application peut dépendre.

Avant d’envisager cela, je suggérerais:

  • Si vous ne construisez que pour deux plates-formes, envisagez d'utiliser des infrastructures de mise à jour automatique standard et bien testées pour ces plates-formes - par exemple. Sparkle sur Mac, Google's Omaha sur Windows ou sur des systèmes de mise à jour automatique intégrés aux infrastructures d'installation courantes (par exemple, InstallShield). Je n'ai pas essayé BitRock.
  • Sur Mac, le Mac App Store peut être une bonne option. Voir https://bugreports.qt.io/browse/QTBUG-16549 quoique.
  • Sous Linux, envisagez de créer un paquet .deb et un référentiel simple pour l'héberger. Une fois que les utilisateurs ont configuré un référentiel, les outils de mise à jour logicielle à l’échelle du système se chargent de rechercher et d’installer les nouvelles versions. Cependant, les étapes pour configurer un nouveau référentiel sont trop complexes pour de nombreux nouveaux utilisateurs Ubuntu/Debian. Ce que nous avons fait, et aussi ce que Dropbox et Google ont fait, est de créer un package .deb qui configure le référentiel dans le cadre de son installation.

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

  • Sous Windows Vista/7, si l'application est installée sur l'ensemble du système (par exemple, dans C:\Program Files\$ APPNAME), vos utilisateurs verront une effrayante invite UAC lorsque le programme de mise à jour essaiera d'obtenir les autorisations nécessaires pour écrire dans le répertoire d'installation. Cela peut être évité soit en installant dans un répertoire accessible en écriture (je suppose que c'est ce que fait Google Chrome), soit en obtenant un certificat Authenticode et en l'utilisant pour signer le fichier binaire du programme de mise à jour.
  • Sous Windows Vista/7, une application .exe ou DLL ne peut pas être supprimée si elle est utilisée, mais le programme de mise à jour peut déplacer le fichier .exe/DLL existant dans un répertoire temporaire et en planifier la suppression le le prochain redémarrage.
  • Sur Ubuntu, les référentiels tiers sont désactivés après les mises à jour de la distribution. Google contourne cela en créant un travail cron pour rajouter le référentiel si nécessaire.
21
Robert Knight

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

9
Linas

Prise sans vergogne: c'est une question relativement ancienne, mais j'ai pensé qu'il pourrait être utile de mentionner une bibliothèque que j'ai créée récemment, que j'ai nommée "QSimpleUpdater". En plus de vous avertir s'il existe une version plus récente, il vous permet de télécharger le journal des modifications dans n'importe quel format (HTML ou RTF, par exemple) et de télécharger les mises à jour directement à partir de votre application via une boîte de dialogue. 

Comme on peut s'y attendre d'un projet Qt, il fonctionne sur toutes les plateformes prises en charge par Qt (testé sous Windows, Mac et Linux).

Liens:

Capture d'écran:

enter image description here

6
Alex Spataru

Bien que cela fonctionne un peu différemment de Sparkle, BitRock InstallBuilde r contient un autoupdater écrit en Qt pouvant ê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.

3
Daniel Lopez

Vous pouvez utiliser UpdateNode qui vous donne toutes les possibilités de mettre à jour votre logiciel. Il utilise un client Qt multiplateforme et est gratuit pour Open Source!

UPDATE Nous venons de faire une analyse plus poussée à ce sujet et aimons beaucoup cette solution:

Avantages:

  • Gratuit pour Open Source !!! Même le client est Open Source: https://github.com/updatenode/unclient
  • Le client est déjà localisé dans plusieurs langues 
  • Très flexible en termes de mises à jour. Vous pouvez même mettre à jour des fichiers non binaires uniques.
  • Fournit en outre un moyen d'afficher des messages via le client.
  • Fichiers binaires et programmes d'installation prêts à l'emploi pour toutes les distributions Linux courantes, un seul binaire Windows, ainsi qu'un programme d'installation et une solution pour Mac (que je n'ai pas essayée, car je n'ai pas de Mac)
  • Service Web facile à utiliser, les statistiques de Nice et la vérification des mises à jour sont intégrées en quelques minutes

Les inconvénients:

  • Il me manque une gestion multi-utilisateur dans le service en ligne. Peut-être qu’ils le feront à l’avenir - je leur proposerai certainement cela dans leur portail de commentaires
  • Le client est uniquement un client graphique - vous devrez donc le réduire pour pouvoir fonctionner sans interface graphique (peut-être seulement nécessaire pour des personnes comme moi ;-))

En conclusion, comme cette solution est assez nouvelle, je pense qu’il ya beaucoup de potentiel ici. Je vais certainement l'utiliser dans mon projet et j'attends plus d'eux! Pouces vers le haut!

2
inspector

Le blogMélanger Cocoa et Qtpeut résoudre le problème pour la plate-forme Mac.

2
Rakesh Singh

J'ai trouvé WebUpdate très utile, bien que ce soit écrit avec les wxWidgets. Mais ne vous inquiétez pas, c'est une application séparée qui gère vos mises à jour. Les étapes pour l'intégrer sont assez simples - il suffit d'écrire deux fichiers XML et d'exécuter le programme de mise à jour. Et oui, c'est multi-plateforme.

L'avantage est qu'il téléchargera et décompressera/installera automatiquement tout ce dont vous avez besoin et ne fournira pas simplement une fenêtre contextuelle avec une notification concernant une nouvelle version et un lien pour le télécharger. Une autre chose que vous pouvez faire est des actions personnalisables.

La page principale du projet est ici , vous pouvez lire le docs ou consulter le tutoriel officiel _.

2
Roman Kruglov

J'ai développé une bibliothèque de mise à jour automatique qui fonctionne à merveille sous Mac OS X, Linux et pratiquement tous les Unix permettant de dissocier un fichier alors qu'il est toujours ouvert. La raison en est que j'ai simplement extrait le package téléchargé en plus de l'application existante. Malheureusement, comme je m'appuyais sur cette fonctionnalité, j'ai rencontré des problèmes sous Windows, car Windows ne vous permettait pas de dissocier un fichier ouvert.

La seule alternative que j'ai pu trouver est d'utiliser MoveFileEx avec l'indicateur de remplacement au redémarrage, mais c'est affreux.

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

2
cheez

Je vous suggère de lire sur le plugin et comment les créer et les utiliser. Si votre architecture d’application est modulaire et divisée en différents plugins Consultez l'utilitaire de mise à jour automatique de Google http://code.google.com/p/omaha/ . Nous utilisons ceci. 

1
Ankur Gupta

Thibault Cuvelier est en train de rédiger un tutoriel (en français) pour développer un programme de mise à jour. Je sais que les explications sont en français (et tout le monde ne comprend pas le français), mais je pense que cela peut être lu par un traducteur Web du type Google Translate . Avec cela, vous aurez un programme de mise à jour multi-plateforme, mais vous devez l'écrire vous-même.

Pour ce que je sais, la seule partie du programme de mise à jour qui est expliquée dans le tutoriel est la partie de téléchargement de fichier. Si cela peut vous aider, reportez-vous au tutoriel,Un updater avec Qt.

J'espère que ça aide.

1
Patrice Bernassola