J'écris une série de services Windows. Je veux qu'ils échouent si des erreurs sont lancées au démarrage (méthode OnStart()
). J'avais supposé que le simple fait de lancer une erreur dans OnStart()
le ferait, mais je trouve qu'à la place il "Démarre" et me présente un message indiquant "Le service a commencé, mais il est inactif. (Paraphrase). Comment puis-je gérer l'erreur afin qu'il ne parvienne pas réellement à démarrer le service?Gestion des exceptions au démarrage du service
Répondre
Sinon, appelez Stop depuis un nouveau thread.
ref [devnewsgroups] (
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)
(groupe de nouvelles allé)
Déplacez l'ensemble de votre logique de démarrage vers une méthode distincte et Lancez des exceptions (ou appelez OnStop) à partir de cette méthode séparée.
OnStart a quelques bizarreries au démarrage. J'ai trouvé que si OnStart() n'a pas plus d'une ligne dedans, alors je ne reçois pas le message "Le service a commencé et s'est arrêté. Certains services s'arrêtent automatiquement s'ils n'ont pas de travail à faire", et les exceptions lancées se terminent le traiter et se connecter au journal des événements de l'application. En outre, avec la méthode de démarrage séparée, vous pouvez utiliser une technique comme celle-ci pour le déboguer sans l'attacher. Si vous exécutez .NET 2.0 ou supérieur, vous pouvez utiliser ServiceBase.Stop pour arrêter le service à partir de OnStart http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx
Si la principale chose que vous voulez est pour la fenêtre Services pour signaler qu'il y avait une erreur, d'après ce que je J'ai essayé (.net 3.5 sur Windows 7), le seul moyen de le faire est de régler le ExitCode. Je recommande de le définir à 13816, car cela entraîne le message "Une erreur inconnue s'est produite". Voir the windows error codes.
L'exemple ci-dessous accomplit trois choses. 1 - La définition de ExitCode génère un message utile pour l'utilisateur final. Cela n'affecte pas le journal des applications Windows mais inclut un message dans le journal système. 2 - L'arrêt de l'appel entraîne l'apparition d'un message indiquant que le service s'est arrêté avec succès dans le journal des applications. 3 - le lancement de l'exception entraîne une entrée de journal utile dans le journal des applications.
protected override void OnStart(string[] args) {
try {
// Start your service
}
catch (Exception ex) {
// Log exception
this.ExitCode = 13816;
this.Stop();
throw;
}
}
13816 est étiqueté comme une erreur IPSEC donc il ne s'applique pas exactement, mais tout int non zéro est considéré comme une erreur par le gestionnaire de contrôle de service. Je crois que la signification du code dépend du service lui-même. – xr280xr
C'est un très bon point. Peut-être que le code 1064 serait meilleur. (ERROR_EXCEPTION_IN_SERVICE - Une exception s'est produite dans le service lors de la gestion de la demande de contrôle.) L'idée principale pour moi est d'afficher un message à l'utilisateur quelque peu utile, et surtout pas trompeur. – Sean
Les parties clés définissent le ExitCode et le lancer. Il n'y a pas besoin de 'Stop();' - le gestionnaire d'exceptions de ServiceBase fait cela. –
- 1. service de retard au démarrage du système
- 2. Gestion du problème des exceptions non gérées
- 3. Gestion des exceptions GetGlobalResourceObject
- 4. DB2 Gestion des exceptions
- 5. Python Gestion des exceptions
- 6. Client de service Web (.NET 2008), gestion des exceptions?
- 7. .NET PInvoke Gestion des exceptions
- 8. Gestion des exceptions de thread dans WCF
- 9. Pratiques de gestion des exceptions
- 10. Gestion des exceptions ASP.NET MVC
- 11. Problème de gestion des exceptions
- 12. Robuste gestion des exceptions Javascript
- 13. lambdas et gestion des exceptions
- 14. Silerlight MVVM Gestion des exceptions
- 15. Gestion des exceptions d'événements de contrôle ASP.NET
- 16. Blackberry - comment démarrer mon propre service au démarrage du téléphone?
- 17. Gestion des exceptions/gestion des ressources dans Jersey JAX-RS
- 18. Réutilisation du code dans la gestion des exceptions
- 19. Gestion des exceptions ASP.Net Ajax côté serveur
- 20. Services Web et gestion des exceptions de Compact Framework
- 21. Gestion des exceptions avec WPF et MVVM
- 22. C# Gestion des exceptions dans les classes
- 23. Gestion des exceptions dans les appels Ajax
- 24. Gestion des exceptions à partir de WS
- 25. Java gestion des exceptions - exception personnalisée
- 26. Modèles de gestion des exceptions de GCC
- 27. Gestion des exceptions de multithreading asynchrone?
- 28. Java Gestion des exceptions dans les "événements"
- 29. Gestion des exceptions globales Flex 3
- 30. Gestion des exceptions et messages conviviaux
le domaine de référence est allé – hultqvist
Internet Archive à la rescousse: https://web.archive.org/web/20070730021813/http://www.devnewsgroups.net/group/microsoft.public.dotnet. framework/topic50404.aspx –