2015-03-05 1 views
0

J'ai vu qu'il existe de nombreuses technologies qui facilitent la mise à jour automatique pour l'utilisateur (comme winsparkle). Le problème que nous avons est que nous voulons être en mesure de mettre à jour automatiquement notre application de bureau (C#/C++) sans invite.Comment mettre à jour automatiquement mon application Windows SANS inviter l'utilisateur à le faire?

Si les utilisateurs ont la possibilité de ne pas mettre à jour cela rend nos vies infernales (plus de 10 000 installations doivent être mises à jour environ une fois par mois).

Nous installons actuellement notre application via WIX et la réinstallation d'une nouvelle version écrase complètement ce qui existait auparavant. Cela fonctionne bien mais nous aimerions ne même pas avoir à exécuter le nouveau programme d'installation, donc l'idée de la mise à jour automatique.

J'ai regardé clickonce mais depuis notre application est à la fois une icône de barre d'état/Windows Forms et un service Windows, il semble installer un service via ClickOnce est quelque peu irréalisable.

Des suggestions?

+0

Pas clair - si vous ne voulez pas inviter l'utilisateur - que ne le faites pas ... Ou y a-t-il des raisons réelles de le faire qui ne sont pas couvertes dans le message? –

+0

Vous cherchez un produit qui le fait déjà, ou pour une méthodologie de conception pour construire le vôtre? On ne sait pas non plus si "nous installons actuellement notre application via WIX et si la réinstallation d'une nouvelle version écrase complètement ce qui existait auparavant" est un problème pour vous. Si vous installez avec un package MSI, vous devez mettre à jour avec une mise à jour MSI, un correctif (fichier .msp) ou une autre mise à jour. Il semble que vous utilisez une mise à niveau majeure. Patch peut être ce dont vous avez besoin. – PhilDW

+0

[ClickOnce] (https://msdn.microsoft.com/en-us/library/s22azw1e.aspx) pourrait vous aider dans ce cas. – Kurubaran

Répondre

2

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

1) Une demande de mise à jour qui vérifie les mises à jour régulièrement. Si une mise à jour est trouvée, elle devrait l'installer automatiquement. La plupart des outils de création d'installations commerciales 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 que ça en a l'air.

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

Des installations par utilisateur sont requises afin que vous puissiez exécuter la mise à niveau silencieusement. 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.

Updater

Certains updaters utilisent les services. Pour les mises à jour automatiques, 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 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 peut être installé dans le dossier de l'application. Ce type de programme de mise à jour peut s'exécuter en tant que tâche planifiée ou depuis votre application (l'exécuter au démarrage de votre application). Dans les deux cas, vous devez tenir compte du fait que le programme de mise à jour doit être mis à jour automatiquement. 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 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é.