2008-09-26 9 views
18

Lors de la création d'une fonction de mise à jour automatique pour une application .NET WinForms, comment met-elle à jour les DLL et n'affecte pas l'application en cours d'exécution?Mise à jour automatique pour l'application WinForms

Étant donné que l'application est en cours d'exécution pendant le processus de mise à jour, les DLL ne seront pas verrouillées (car ces DLL devront être remplacées au cours de la mise à jour).

+0

duplication possible de [Mise à jour automatique d'une application Windows] (http://stackoverflow.com/questions/4769615/automatic-update-a-windows-application) –

+4

@PeterMortensen Comment exactement une question qui a été posée dans 2008 un duplicata d'une question posée en 2011? Surtout quand il apparaît que celui-ci contient de meilleures informations – Kris

Répondre

17

Habituellement, vous téléchargez les nouveaux fichiers dans une zone séparée. Ensuite, arrêtez et redémarrez et au démarrage vous cherchez et utilisez les nouveaux fichiers si vous les trouvez. Toujours garder une dernière version de travail connue sur le côté afin que l'utilisateur puisse revenir à quelque chose qui fonctionne vraiment si le téléchargement cause des problèmes.

ClickOnce est une bonne technologie de Microsoft qui le fait pour vous et vous pouvez l'utiliser directement à partir de Visual Studio 2008.

+0

alors utilisez click une fois au lieu du bloc de l'application de mise à jour? –

+0

Vous pouvez regarder les deux et décider lequel fonctionne le mieux pour vous. ClickOnce fonctionne juste hors de la boîte, mais vous avez un contrôle limité sur elle. L'utilisation du bloc d'application Updater demande plus d'efforts, mais vous avez plus de contrôle car vous pouvez toujours modifier le code source. –

4

Si vous publiez via ClickOnce, tout cela tend à être manipulés pour vous. Il a ses propres avantages et inconvénients, mais généralement plus facile que d'essayer de tout coder vous-même.

Les deux Wikipedia et 15seconds ont des informations sur l'utilisation correcte ClickOnce, comment cela fonctionne, etc.

Comme d'autres l'ont dit, ClickOnce est pas aussi flexible que rouler votre propre solution, mais il est beaucoup moins compliqué. Il a une petite courbe d'apprentissage au début, mais avec tout ce qui est intégré à Visual Studio et à l'utilisation de Wizards, il ne faut pas attendre longtemps pour trouver une solution qui fonctionne. Au fur et à mesure que les déploiements deviennent plus complexes (au-delà des prérequis ou du code d'application à mettre à jour) et que vous devez effectuer de nombreuses tâches de post-installation ou de pré-installation, WiX vous offre une solution hybride entre Windows Installer et ClickOnce, le coût de la flexibilité étant une courbe d'apprentissage beaucoup plus raide.

La seule raison pour laquelle j'essaie d'éviter les installateurs personnalisés est que vous finissez par voie de passer trop de temps à essayer de l'obtenir juste pour gérer un tas de différents « What If » scénarios ...

5

I avoir une application «lanceur» séparée qui vérifie les mises à jour via un service Web. S'il y a des mises à jour, il les télécharge et exécute ensuite mon application, qui se trouve dans un assemblage séparé. Les autres alternatives utilisent des choses comme ClickOnce, ou télécharger les fichiers dans une zone séparée et redémarrer l'application, comme quelqu'un d'autre mentionné. Soyez cependant averti de ClickOnce, mais ce n'est pas aussi flexible que ça en a l'air. Et si vous déployez sur un système qui nécessite d'élever votre programme à un niveau de sécurité supérieur, vous risquez de rencontrer des problèmes si vous n'avez pas de certificat pour votre application installée. J'ai trouvé très difficile d'obtenir des réponses directes sur Internet à des choses comme la gestion des certificats quand il s'agit de ClickOnce. Si vous avez une application complexe, vous pouvez simplement lancer votre propre programme de mise à jour, ce que j'ai dû faire.

+0

Pourquoi utiliser un service Web pour rechercher des mises à jour? webclient est plus rapide non? –

7

Vous devrez arrêter votre application et la redémarrer, comme d'autres personnes l'ont déjà commenté.

J'ai écrit un code open-source pour faire exactement cela en mode transparent - y compris une application de mise à jour externe pour faire la mise à jour froide réelle. Voir http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

Le code est à http://github.com/synhershko/NAppUpdate (sous licence Apache 2.0 licence)

Questions connexes