2010-11-28 3 views
0

Je voudrais affirmer en utilisant _ASSERTE dans un code de service Windows backend. Mais si je comprends bien, le comportement par défaut va bloquer le service en raison de la boîte de message.Assertions dans les services Windows

Quelle est la meilleure façon d'effectuer des assertions en toute sécurité dans un service Windows?

Editer: J'aurais dû mentionner que le code devrait toujours utiliser le comportement normal, s'il est exécuté en mode console; par exemple lors d'un test unitaire.

+0

Que voulez-vous que l'assertion fasse? C'est vraiment une solution spécifique au problème car certains services devraient échouer sur les assertions et certains devraient simplement enregistrer une erreur et certains devraient envoyer un courriel à la NASA et les alerter d'une invasion imminente de l'espace. –

+0

Je suppose que l'envoi de courriels à la NASA ne va pas bien avec Assertions;). Parce que, comme vous le savez, il est utilisé lors du test de la version de débogage de l'application. Je voudrais obtenir le bénéfice de base d'un assert; être averti (avec quelque chose d'évident, c'est difficile à ignorer) quand ASSERT échoue. Parce qu'il n'y aura pas de boîte de message pour permettre Ignorer le message, ou breaking..etc. Je pense que peut-être une option dans un fichier de configuration va spécifier comment agir sur les assertions échouées; arrête le service, ou pas. Mais le plus important, comme je l'ai dit, j'aimerais savoir que quelque chose a mal tourné une fois que cela se produit. – haggag

Répondre

1

Il vous suffit d'écrire votre propre fonction d'affirmation.

void assert(bool condition) 
{ 
    //Stop service and log failure to event log here ;) 
} 
+0

mmm, je pense que la journalisation dans le journal des événements n'attire pas l'attention autant que la boîte de message utilisée pour faire. – haggag

+0

@haggag: vous pouvez garder un processus normal pour afficher la boîte de message et lui envoyer des commandes du service. – ruslik

+0

@haggag: Vous avez spécifiquement demandé * non * d'afficher une boîte de message. Que voulez-vous que je fasse? : P En outre, s'il y a un échec d'assertion, cela indique généralement que quelque chose est horriblement mauvais avec le service et qu'il devrait se terminer. –