2010-11-28 7 views
0

バックエンドのWindowsサービスコードで_ASSERTEを使用することを主張したいと思います。しかし、私が理解しているように、メッセージボックスのためにデフォルトの動作はサービスをハングします。Windowsサービスのアサーション

Windowsサービスでアサーションを安全に行うには、どのような方法が最適ですか?

編集: コンソールモードで実行している場合、コードは通常の動作を使用する必要があります。例えばユニットテストされているとき。

+0

アサーションに何をしますか?アサーションでいくつかのサービスが失敗し、エラーをログに記録するだけでなく、NASAに電子メールを送信し、差し迫った宇宙侵攻を警告する必要があるサービスもあるため、実際問題特定の解決策です。 –

+0

NASAに電子メールを送るのは、アサーションではうまくいかないと思う。ご存じのように、アプリケーションのデバッグバージョンのテスト中に使用されます。私は主張の基本的な利益を得たいと思います。いくつかのASSERTが失敗したときに通知を受け取ります(何か明白な、無視するのは難しい)。メッセージを無視することができるメッセージボックスがないか、または破損しているなどの理由があります。おそらくコンフィギュレーションファイルのオプションのように、失敗したアサーションに対処する方法を指定すると思います。サービスを停止するかどうかを決定します。しかし、最も重要なことは、私が言ったように、私は何かが間違っていたことを知りたいと思います。 – haggag

答えて

1

あなた自身のアサート機能を書くだけです。

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

mmm、私はイベントログへのロギングは、メッセージボックスのように注意を喚起しないと思います。 – haggag

+0

@haggag:メッセージボックスを表示し、サービスからコマンドを送信するための通常の処理を続けることができます。 – ruslik

+0

@haggag:メッセージボックスを表示するよう特に指定していません。あなたは私に何をして欲しいの? :Pさらに、アサーションの失敗がある場合、通常、何かがサービスにひどく間違っていて、終了する必要があることを示します。 –

関連する問題