7
votes

Comment faire de l'interface graphique pour le service Windows?

J'ai écrit un service Windows et une interface graphique pour cela. Bien sûr, GUI dépend principalement du service. Y a-t-il un moyen pour l'interface graphique d'attendre le service? Parfois, j'ai besoin de recharger la configuration de service de l'interface graphique et de redémarrer le service.

Je pensais à 2 solutions: 1. Utiliser tout en vous dormant pour attendre le statut de contrôleur de service (bien sûr, la solution la plus simple: p) 2. Implémenter une interface inotifiFiProperTychanged quelque part (cela semble compliqué pour ce problème trivial).

Je me demandais s'il y a une façon plus élégante de le faire? Y a-t-il un événement que je manque quelque part?


0 commentaires

5 Réponses :


1
votes

Utilisez un Objet d'événement de noyau . Lorsque vous démarrez les deux applications, demandez-leur de créer ou d'ouvrir un objet événement nommé, puis attendez-le dessus. L'autre peut le signaler en renversant l'état permettant ainsi à l'autre application d'arrêter d'attendre et de fonctionner.


2 commentaires

C'est un très bon affichage plasma. :-)


hrmph. Mais je veux ce plasma tellement :) Correction du lien, acclamations.



1
votes

J'aurais probablement apparemment une telle séparée pour simplement sonder et voir lorsque le statut de votre contrôleur de service a changé, lorsque le changement se produit, tuez ce fil. Ensuite, simplement reproduisez le fil lorsque vous devez commencer à ré-sonder

sombrenight


0 commentaires

8
votes

Servicecontroller a une méthode WaitForStatus où vous lui transmettez un argument de type ServiceControlerstatus. Vous pouvez l'utiliser comme ceci:

controller.WaitForStatus(ServiceControllerStatus.Running);


3 commentaires

Seul des problèmes avec cela est qu'il vous indique lorsque le service est en cours d'exécution, pas lorsque le service s'est initialisé et qu'il est prêt à faire ce que vous voulez. Cela peut suffire pour la puissance, ce n'est peut-être pas.


Je ne suis pas sûr, mais je pense que le statut est ServiceControlStatus.Running lorsque le service est entièrement initialisé (après que la méthode OnStart a été appelée). Avant cela, c'est ServiceControlerstatus.Startpending.


C'est exactement ce dont j'avais besoin. Désolé de ne pas remarquer cette méthode. En dehors de cela, je suis ivre de beaucoup de café, je cherchais un événement: p (mon mauvais). Tout comme un ajout au cas - je devais utiliser la méthode d'actualisation () pour mettre à jour les données de service. Sinon, il l'a montré comme en cours d'exécution même après l'arrêt () (mais cela pourrait être connecté à Windows 7, j'utilise).




0
votes
ServiceController mysqlServiceController = new ServiceController();
mysqlServiceController.ServiceName = "MySql";
var timeout = 3000;

myServiceController.Start();

try
{
    //Wait till the service runs mysql      
    ServiceController.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, new TimeSpan(0, timeout, 0));
}
catch (System.ServiceProcess.TimeoutException)
{
    MessageBox.Show(string.Format("Starting the service \"{0}\" has reached to a timeout of ({1}) minutes, please check the service.", mysqlServiceController.ServiceName, timeout));
}

0 commentaires