Question

Existe-t-il un cadre pouvant être utilisé pour permettre à un service Windows C # de rechercher automatiquement une version plus récente et de se mettre à niveau? Je peux certes écrire du code pour y parvenir, mais je recherche un framework déjà mis en œuvre et (surtout) testé.

[modifier] Voici un lien vers une question similaire contenant des liens vers des projets modernes contribuant à cette tâche: Bibliothèque de mise à jour automatique pour .NET?

Était-ce utile?

La solution

Le seul moyen de décharger des types est de détruire le domaine d'application. Pour ce faire, il serait nécessaire de séparer votre couche d'hébergement de votre code de service d'exécution, ce qui est assez complexe. (un peu comme faire de la chirurgie en trou de serrure)

Il peut être plus facile de: a) exécuter une tâche batch ou b) détecter les mises à jour en service, puis lancer un processus distinct qui arrête le service, met à jour les assemblys, puis le redémarre.

Si l'ancien vous intéresse, les modèles et pratiques MSDN folkloriques ont écrit un bloc de mise à jour d'application que vous avez adapté à votre service.

https : //web.archive.org/web/20080506103749/http: //msdn.microsoft.com/en-us/library/ms978574.aspx

Autres conseils

Je ne suis au courant d'aucun cadre facilitant la résolution de ce problème spécifique.

Cependant, vous pouvez essayer de séparer la logique métier du service du code de service réel en différents assemblys. Demandez à l'assembly de service de vérifier les mises à jour de l'assembly de logique métier à intervalles réguliers, copiez-le à partir d'une source distante si nécessaire, déchargez l'ancien assemblage BL (et éventuellement, supprimez-le), puis chargez de manière dynamique la nouvelle version (décharger l'ancien assemblage n'est pas une tâche triviale).

Une autre solution possible consiste à avoir un service séparé qui s'exécute, arrête l’autre, s’il existe une mise à jour, puis met à jour le service. Vous ne pouvez pas avoir une mise à jour de service elle-même car le fichier .dll en cours d’exécution ne s’arrêtera pas.

La séparation de la couche de logique métier serait une bonne option. Vous pouvez également réécrire le service principal afin de l'exécuter en réflexion par un service maître ou de contrôle. Ceci est similaire à la séparation de la logique métier, et il suffirait simplement d’arrêter un thread et de le redémarrer.

Je ne connais aucun framework connu qui fasse cela. Je l'ai fait moi-même, mais ce n'est pas un cadre public.

J'utilise WyBuild pour mettre à jour mes applications (y compris les services Windows) et c'est vraiment génial. Très facile à utiliser et très facile à intégrer aux applications existantes. C'est un très bon cadre de mise à jour automatique ...

http://wyday.com/wybuild/ aide / mises à jour automatiques / windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows -service.php

Notez qu'il s'agit d'un framework payant (la licence est par développeur, une version d'essai gratuite est incluse)

Au cas où quelqu'un d'autre le rechercherait; J'ai trouvé ce lien intéressant. Je n'ai pas implémenté cette solution, mais il semble que cela pourrait fonctionner pour moi.

http://www.eggheadcafe.com/articles/20041204.asp

Pourriez-vous clarifier votre question un peu? Je suis un peu confus, car pour autant que je sache, vous pouvez toujours écraser les DLL utilisées par le service. La copie et le redémarrage du service peuvent facilement être intégrés au processus de construction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top