2009-05-20 4 views
5

J'écris un service Windows dans .net 2.0.Comment arrêter un service dans la méthode OnStart?

Que dois-je faire dans la méthode OnStart() si, pour une raison quelconque, je ne veux pas que mon service démarre? Puis-je simplement appeler la méthode Stop() de la classe de base (ServiceBase)? J'ai essayé cela et j'obtiens quelques exceptions drôles d'accès de mémoire. Est-il nécessaire de démarrer un thread séparé pour appeler la méthode Stop()?

Répondre

8

Pourquoi voulez-vous faire cela? S'il y a une erreur, consignez-la dans le journal des événements et lancez une exception. Votre service ne sera pas lancé et l'utilisateur sera informé que quelque chose de mal est arrivé.

+0

En effet, si vous lancez une exception, le service ne démarrera pas. Windows Services gère tout cela pour vous. – Noldorin

+0

Il y a beaucoup de raisons pour lesquelles on ne voudrait pas qu'un service démarre! Alors peut-être vous ne demandez pas vraiment pourquoi, mais plutôt suggérer la réponse est de jeter une exception? Que diriez-vous de configurer ServiceBase.ExitCode - est-ce conseillé/nécessaire? – Rory

+1

@Rory: Ne pas démarrer un service est une chose différente du démarrage et de l'arrêt immédiat. Je suis contre le fait de commencer avec succès et d'arrêter tranquillement. ExitCode sera enregistré dans le journal des événements, vous pouvez donc envisager de le définir. Ce n'est pas obligatoire cependant. –

0

Utilisez un ServiceController et arrêtez-le via celui-ci, puis revenez immédiatement.

0

Vous pouvez utiliser Environment.FailFast(). Sachez simplement qu'il ignore tous les blocs try-catch-finally.

Questions connexes