Comment envoyer une commande personnalisée pour une .NET Service windows de .NET code?
Comme dans le lien suivant, on peut s'arrêter, démarrer, et à "arrêter, puis commencer à" un service en utilisant le code C#.
http://www.csharp-examples.net/restart-windows-service/
J'ai fait cuire un .NET service qui n'en œuvre OnStart
et OnStop
. Cependant, j'ai besoin de mettre en œuvre une "smart restart" fonctionnalité qui est plus compliqué que de juste arrêter et de redémarrer. J'ai besoin de garder le temps d'arrêt de quelques secondes tout au plus (mais Stop + Start peut prendre de quelques minutes dans ce cas, lorsque le fait proprement, et je dois le faire proprement), et d'avoir certaines parties du système, tandis que d'autres sont redémarrage/rafraîchissant.
Longue histoire courte avant de me sauter dans la mise en œuvre de cette OnSmartRestart
fonctionnalité, je veux faire en sorte qu'il est assez facile d'invoquer cet appel à partir d'une autre application en C#.
Cette caractéristique est importante, mais dangereux. Je veux le rendre assez caché, quelque peu sécurisé, aussi keep it simple, et assurez-vous que cela a un effet négligeable sur les performances de mon service Windows alors qu'il est l'accomplissement de ses tâches courantes et ne redémarre pas.
Si j'ai d'interrogation pour certains fichier ou ouvrir un port et de passer trop de CPU sur le faire, ce ne serait pas une bonne solution. J'ai aussi envie de garder ce aussi SIMPLE QUE POSSIBLE (désolé pour la répétition).
Vous devez vous connecter pour publier un commentaire.
Vous pouvez envoyer des "commandes" d'un service à l'aide de ServiceController.ExecuteCommand:
Vous aurez besoin d'ajouter une Référence à la System.ServiceProcess.dll de l'assemblée.
Le service peut réagir à la commande en remplaçant ServiceBase.OnCustomCommand:
Les moyens habituels de communication avec les processus externes dans windows sont:
Les deux premiers ont été exposés comme WCF donc, c'est le chemin à parcourir. Troisième ne semble pas pertinente à votre situation et il est vieux.
Si vous avez besoin pour exécuter vos commandes à partir de la même machine, vous pouvez utiliser des canaux nommés, mais le durcissement a été très difficile et pénible. Sinon utiliser WCF TCP nommé liaison.