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 d’implémenter cette fonctionnalité sous Windows?

Pour répliquer 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, il convient de l’installer automatiquement. La plupart des outils de création de configurations commerciales incluent de bonnes applications de mise à jour. Vous pouvez essayer d’écrire vous-même un programme de mise à jour, 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 des données uniquement dans le dossier du profil utilisateur (AppData, dossier Roaming, etc.) et HKEY_CURRENT_USER. Aucun fichier programme ou HKEY_LOCAL_MACHINE.

Des installations par utilisateur sont requirejses pour que vous puissiez effectuer la mise à niveau en mode silencieux. Si l’installation est par machine, une version Windows plus récente affiche l’invite d’élévation et l’utilisateur ne sait pas ce qui se passe.

Le Updater

Certains programmes de mise à jour utilisent des services. Pour les mises à jour automatisées, cette solution n’est pas réelle, car l’installation du service nécessite des privilèges d’administrateur. Ainsi, votre processus d’installation et les mises à jour ultérieures afficheront des invites d’élévation.

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

Dans les deux scénarios, vous devez prendre en compte le fait que Updater peut avoir besoin de se mettre à jour. 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 à la fin.

Autres choses à considérer sont:

  • problèmes d’permissions (si le processus de mise à jour nécessite des privilèges ou une élévation)
  • emplacements de téléchargement
  • mécanisme de détection de mise à jour (la façon dont Updater 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 le fichier EXE de l’application principale). C’est rarement le cas car une mise à jour peut avoir besoin de remplacer plus qu’un 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, Updater doit uniquement détecter les mises à jour disponibles, les télécharger et les exécuter.

Les mises à jour fonctionnent de deux manières:

  • mises à jour majeures : l’ancienne version est complètement désinstallée avant que la nouvelle soit installée
  • mises à niveau mineures : l’ancienne version est corrigée

Windows Installer offre un excellent support pour les deux, vous pouvez donc utiliser des packages MSI et des correctifs MSP . Il prend également en charge les installations en mode silencieux. Tout ce que votre programme de mise à jour doit faire, c’est 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 .

Mise à jour de la dissortingbution

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

  • 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 (elle est donc installée une seule fois)

Tout cela n’est pas très facile. C’est pourquoi de nombreux produits utilisent des logiciels de mise à jour tiers. Même certains outils de création d’installations commerciales offrent des mises à jour pour vos packages.

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

Si vous voulez avoir exactement les mêmes fonctionnalités, vous pouvez. Google l’a ouvert.

https://github.com/google/omaha

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