service windows s'arrête et démarre immédiatement, mais il ne devrait pas
Je suis de la création d'un service windows et après l'installation du service, il s'arrête et commence immédiatement, mais il ne devrait pas être. Auparavant, j'ai été faire les erreurs que le service ne répond pas à la commande de démarrage, en temps opportun, alors j'ai pris le code d'initialisation et de les mettre dans un thread, et maintenant je suis ici:
protected override void OnStart(string[] args)
{
this.EventLog.WriteEntry("ATNotifier Started");
ThreadPool.QueueUserWorkItem(WaitOnEmailsChanged);
ThreadPool.QueueUserWorkItem(Init, "IP");
}
La waitonemailschanged thread crée simplement un filesystemwatcher à regarder pour voir si le fichier de paramètres (document xml) est changé, et les charges dans les données de ce fichier, si ce qui se passe. Pour le moment, c'est juste attend indéfiniment (ce qui est le cas général, qui ne sera changé quelques fois dans l'année), aucun des modifications sont apportées au document xml.
L'Init thread fait toutes sortes de choses, y compris la création et le démarrage d'un Système.Les minuteries.Objet Timer dont Écoulé méthode est la viande du service.
Je ne comprends pas pourquoi il faudrait commencer puis d'arrêter immédiatement. Je tiens également à noter que l'eventviewer montre pas de journaux à partir de cette application.
edit> j'ai essayé de créer " bon " fils, avec les mêmes résultats, et j'ai supprimé tout sauf la création et le démarrage de la minuterie comme suit:
protected override void OnStart(string[] args)
{
this.EventLog.WriteEntry("ATNotifier Started");
m_Timer = new System.Timers.Timer(90000.0); //1.5 mins
m_Timer.Elapsed += new ElapsedEventHandler(m_Timer_Elapsed);
m_Timer.Start();
}
et je suis toujours le même message. C'est presque comme si le Démarrage n'est jamais appelé.
OriginalL'auteur Steven Evers | 2009-02-17
Vous devez vous connecter pour publier un commentaire.
Il peut être arrêté de façon inattendue si votre principale thread se termine sur une exception.
OriginalL'auteur Alex Reitbort
Le code que vous avez posté ne fait pas de sens pour moi. Pourquoi créer un gestionnaire d'événements avant de créer votre Minuterie?
Ne faut pas que ces deux lignes soient échangés?
OriginalL'auteur toad
Le problème s'est avéré être que le Journal des événements.WriteEntry a été de lancer une erreur parce qu'il n'y a pas de EventSource associés. voir http://msdn.microsoft.com/en-us/library/xzwc042w.aspx
OriginalL'auteur Steven Evers
Aussi loin que je puisse me rappeler, vous devez signaler au gestionnaire de service que le service a démarré avec succès - dans le cas contraire, la méthode OnStart sera de retour, et si le changement de statut n'a été signalé, le service gestionnaire de supposer que la cessation de service, sans réellement réussir à chargement lui-même.
Des rapports de votre service comme ayant démarré avec succès est fait IIRC par le Service de la classe de base, il faut donc ajouter les lignes suivantes à la partie inférieure de la
OnStart
méthode:OriginalL'auteur Fritz H
Pool de threads threads threads d'arrière-plan; ils ne pourront pas suivre un processus vivant. Je soupçonne que vous avez besoin d'un "bon" fil...
Essayer:
new Thread(SomeCode).Start();
ou similaire.OriginalL'auteur Marc Gravell