.NET application console en tant que service Windows
J'ai l'application de la console et souhaitez l'exécuter en tant que service Windows. VS2010 a un modèle de projet qui permettent d'attacher la console de projet et créer un service Windows.
Je voudrais ne pas ajouter séparés projet de service et, si possible, intégrer le code de service dans l'application de la console de garder l'application de la console comme un projet qui pourrait exécuter en tant qu'application console ou en tant que service windows si exécuté, par exemple, à partir de la ligne de commande à l'aide de commutateurs.
Peut-être que quelqu'un pourrait proposer la bibliothèque de la classe ou de l'extrait de code qui pourrait rapidement et facilement transformer application console c# pour le service?
- Pourquoi ne pas simplement créer un service temporaire du projet et de la copie sur les bits qui font un service?
- Vous pouvez essayer de Topshelf topshelf-project.com
- Vous pouvez essayer la technique décrite ici: einaregilsson.com/2007/08/15/...
- hein? Je ne suis pas sûr. à propos de cette.
- Un très simple étagère supérieure alternative: runasservice.com
- Je suis après comment utiliser TopShelf sur un Service Windows (.Net), projet qui n'est pas une application Console. Dois-je convertir mon projet pour une application Console?
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude d'utiliser les éléments suivants techinque pour exécuter la même application comme une application console ou en tant que service:
Environment.UserInteractive
est normalement vrai pour console application et faux pour un service. Techically, il est possible d'exécuter un service à l'utilisateur en mode interactif, de sorte que vous pouvez vérifier un commutateur de ligne de commande à la place.J'ai eu beaucoup de succès avec TopShelf.
TopShelf est un package Nuget conçu pour le rendre facile à créer .NET applications Windows qui peut fonctionner comme la console d'applications ou de Services Windows. Vous pouvez rapidement raccorder des événements tels que votre service de Démarrer et d'Arrêter des événements, configurer à l'aide de code par exemple, pour régler le compte de qui elle s'exécute, configurer des dépendances sur d'autres services, et de configurer la façon dont il récupère les erreurs.
À partir du Gestionnaire de paquets de la Console Nuget):
Reportez-vous à la des exemples de code pour commencer.
Exemple:
TopShelf prend également en charge de l'entretien de l'installation, ce qui permet d'économiser beaucoup de temps et supprime le code réutilisable à partir de votre solution. Pour installer votre .exe comme un service que vous venez d'exécuter les opérations suivantes à partir de l'invite de commande:
Vous n'avez pas besoin de brancher une ServiceInstaller et tout ce qui - TopShelf fait tout pour vous.
Alors, voici la solution complète:
*InstallUtil.exe peuvent généralement être trouvés ici: C:\windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
Programme.cs
MyService.cs
MyServiceInstaller.cs
Vous pouvez utiliser
Et il apparaîtra int la liste de service. Je ne sais pas, si cela fonctionne correctement. Un service est généralement écouter plusieurs événements.
Il y a plusieurs service wrapper cependant, que peut exécuter n'importe quelle application comme un service réel. Par Exemple, les directives de Microsoft SrvAny de la Win2003 Kit De Ressources
J'entends votre point de vouloir un assemblage à l'arrêt de code à répétition mais, Il serait plus simple et de réduire la répétition de code et de le rendre plus facile à réutiliser votre code dans d'autres façons à l'avenir si...... vous de le casser en 3 sous-ensembles.
Alors les deux très très mince/projets simples:
Start()
etStop()
méthodes et l'application de console a une boucle. Court de l'utilisation d'un framework comme TopShelf, c'est la meilleure optionTout d'abord je incorporer la console de l'application de la solution dans le service windows solution de référence et il.
Puis-je faire de la console de l'application du Programme de la classe public
J'ai ensuite créer deux fonctions au sein de l'application console
Puis dans le service de windows lui-même, je instancier le Programme et l'appel de Démarrer et d'Arrêter les fonctions ajoutées dans le Démarrage et OnStop. Voir ci-dessous
Cette approche peut également être utilisée pour une application windows /windows service hybride
Peut-être vous devriez définir ce dont vous avez besoin, autant que je sache, vous ne pouvez pas exécuter votre application en tant que Console ou d'un Service en ligne de commande, dans le même temps. Rappelez-vous que le service est installé et vous devez démarrer dans le Gestionnaire des Services, vous pouvez créer une nouvelle application qui démarre le service ou démarre un nouveau processus de l'exécution de votre application console. Mais comme vous l'avez écrit
Une fois, j'étais dans votre position, en tournant une application console dans un service. Tout d'abord vous devez le modèle, dans le cas où vous travaillez avec VS Express Edition. Voici un lien où vous pourrez faire vos premiers pas: C# Windows Service, cela a été très utile pour moi. Ensuite, à l'aide de ce modèle, ajouter votre code pour les événements souhaités du service.
À améliorer votre service, il y a une autre chose que vous pouvez faire, mais ce n'est pas rapide et/ou plus facilement, est à l'aide de domaines d'application, et la création de dll pour charger/décharger. Dans l'un vous pouvez démarrer un nouveau processus avec l'application de console, et dans une autre dll, vous pouvez simplement mettre la fonctionnalité, le service a à faire.
Bonne chance.
Vous avez besoin de séparer les fonctionnalités d'une classe ou des classes et de le lancer via l'une des deux talons. La console de talon ou de service stub.
Que sa plaine de voir, lors de l'exécution de windows, la multitude de services qui constituent l'infrastructure ne sont pas (et ne peut pas directement) présente la console de windows de l'utilisateur. Le service a besoin de communiquer avec l'utilisateur dans un non graphique manière: par l'intermédiaire de la SCM; dans le journal des événements, à certains fichier journal etc. Le service sera également besoin de communiquer avec windows via le gds, sinon il va obtenir de l'arrêt.
Il serait évidemment possible de disposer de certaines application console qui peut communiquer avec le service, mais le service a besoin pour fonctionner de manière autonome, sans l'exigence de l'interface d'interaction.
La Console de talon peut très utiles pour le débogage de services de comportement, mais ne doit pas être utilisé dans un "productionized" environnement, ce qui, après tout, est le but de la création d'un service.
Je n'ai pas lu entièrement mais cet article semble pinte de bière dans la bonne direction.
- Je utiliser un service de classe qui suit le modèle standard prescrite par
ServiceBase
, et de virer de bord sur les aides facile F5 de débogage. Cela permet de maintenir le service de données défini dans le service, ce qui les rend faciles à trouver et leur durée de vie facile à gérer.J'ai l'habitude de créer une application Windows avec la structure ci-dessous. Je n'ai pas de créer une application de console; de cette manière, je n'ai pas une grosse boîte noire sauter sur mon visage chaque fois que je lance l'application. Je reste dans le débogueur où toute l'action est. J'utilise
Debug.WriteLine
de sorte que les messages aller à la fenêtre de sortie, qui les quais de bien et reste visible après l'application se termine.J'ai l'habitude de ne pas la peine d'ajouter le code de débogage pour s'arrêter; je viens d'utiliser le débogueur à la place. Si j'ai besoin de déboguer l'arrêt, je fais le projet d'une application console, ajouter un
Stop
transitaire méthode, et de l'appeler après un appel àConsole.ReadKey
.