web-dev-qa-db-fra.com

Quelle est la meilleure façon de mettre à jour automatiquement une application Windows?

Google Chrome se met à jour automatiquement toutes les cinq heures . Je veux cloner cette fonctionnalité exacte dans ma propre application. Quelle est la meilleure façon de mettre en œuvre cette fonctionnalité sur Windows?

67
John Shedletsky

Pour reproduire ce comportement de mise à jour, vous avez besoin de deux choses:

  1. Une application de mise à jour qui vérifie régulièrement les mises à jour. Si une mise à jour est trouvée, elle doit l'installer automatiquement. La plupart des outils de création d'installation commerciale incluent de bonnes applications de mise à jour. Vous pouvez essayer d'écrire un programme de mise à jour vous-même, mais ce n'est pas aussi simple qu'il y paraît.

  2. Installations par utilisateur pour chacune de vos versions de produit. Une installation par utilisateur écrit les données uniquement dans le dossier de profil utilisateur (AppData, dossier itinérant, etc.) et HKEY_CURRENT_USER. Aucun fichier programme ou HKEY_LOCAL_MACHINE.

Des installations par utilisateur sont nécessaires pour que vous puissiez effectuer la mise à niveau en mode silencieux. Si l'installation se fait par machine, une version plus récente de Windows affichera l'invite d'élévation et l'utilisateur ne saura pas ce qui se passe.

Le programme de mise à jour

Certains programmes de mise à jour utilisent des services. Pour les mises à jour automatisées, ce n'est pas une vraie solution car l'installation du service nécessite des privilèges d'administrateur. Ainsi, votre processus d'installation et les mises à jour suivantes afficheront des invites d'élévation.

Une autre approche consiste à utiliser une application de mise à jour par utilisateur. Il ne nécessite aucune élévation et il peut être installé dans le dossier d'application. Ce type de mise à jour peut s'exécuter en tant que tâche planifiée ou à partir de votre application (exécutez-la au démarrage de votre application).

Dans les deux scénarios, vous devez considérer que le programme de mise à jour peut avoir besoin de se mettre à jour lui-même. Le processus qui effectue la mise à jour doit donc être un processus temporaire (par exemple une copie temporaire de l'application de mise à jour). Il devrait également fonctionner sans élévation. C'est pourquoi un service n'est pas une si bonne idée. Il devrait s'arrêter avant la mise à jour, utiliser un processus temporaire qui gère la mise à jour et recommencer une fois terminé.

Les autres éléments à considérer sont:

  • problèmes d'autorisations (si le processus de mise à jour a besoin de privilèges ou d'élévation)
  • emplacements de téléchargement
  • mécanisme de détection de mise à jour (comment le programme de mise à jour détecte si une nouvelle version doit être installée ou non)

Les mises à jour

Une idée fausse commune est que les mises à jour devraient être les fichiers d'application (comme l'application principale EXE). C'est rarement le cas car une mise à jour peut avoir besoin d'écraser plus qu'un simple fichier.

La plupart des mises à jour sont des packages d'installation (MSI par exemple) ou des correctifs (MSP). C'est la meilleure approche car ils gèrent l'intégralité de la logique de mise à jour:

  • détecter les applications en cours d'exécution
  • mettre à jour les ressources
  • mettre à jour les informations sur le produit (raccourcis, applet Programmes et fonctionnalités dans le Panneau de configuration, etc.)

Les packages d'installation simplifient également l'application Updater. Avec ce type de mises à jour, l'Updater n'a besoin que de détecter les mises à jour disponibles, de les télécharger et de les exécuter.

Les mises à jour fonctionnent de deux manières:

Windows Installer a une grande prise en charge pour les deux, vous pouvez donc utiliser packages MSI et correctifs MSP . Il prend également en charge les installations silencieuses, donc tout ce que votre programme de mise à jour doit faire est d'exécuter le package avec un paramètre de ligne de commande.

Ces packages prennent également en charge les installations par utilisateur ou par machine via la propriété ALLUSERS .

Distribution des mises à jour

Après avoir choisi un programme de mise à jour et certains packages de mise à jour, vous avez également besoin d'un mécanisme de distribution:

  • un moyen d'informer le programme de mise à jour que des mises à jour sont disponibles (par exemple un fichier d'informations sur les mises à jour sur votre serveur)
  • un moyen de détecter si une mise à jour est installée ou non (donc elle n'est installée qu'une seule fois)

Tout cela n'est pas très simple. C'est pourquoi de nombreux produits utilisent des mises à jour tierces. Même certains outils de création de configuration commerciale proposent des mises à jour pour vos packages.

Un programme de mise à jour personnalisé est principalement utilisé par les très grandes entreprises avec beaucoup de produits, car l'investissement en vaut la peine pour elles.

81
Cosmin Pirvu

Si vous voulez avoir exactement la même fonctionnalité, vous pouvez. Google l'a open-source.

https://github.com/google/omaha

27
user479870

Essayez winsparkle - https://github.com/vslavik/winsparkle . C'est une bibliothèque c ++.

3
Y.N