多くのネットワーク通信を行う Windows サービスを作成しています。ユーザー (ログオンしている場合) に例外/エラーを通知する方法が必要です。サービスにデスクトップとの対話を許可するのは悪い習慣であることはわかっていますが、エラーが発生したことをユーザーに通知する別の方法はありますか? 私はイベント ログを認識していますが、システム トレイからの通知バブルやユーザーの注意を引くものを表示できるようにしたいと考えています。
6 に答える
監視のためだけに、イベントログと別のアプリケーションの使用を検討してください。電子メールまたはMSMQの使用を検討することもできます。
通常、サービスが通知できるセカンダリ アプリがあります。たとえば、システム トレイ アイコン (ugh) を使用して、何か重要なことが発生したときにバルーン (ダブル ugh) をポップアップさせることができます。アプリ自体も、サービスの設定用のインターフェイスを提供できます。
別のアプリを使用してこのアプリケーションと対話し、エラーについてユーザーに通知するのはどうですか? このようにして、ユーザーに「オプション」を与えることができます。アラート、電子メールなどをオフにすることができます
Growlのような既存の通知アプリを利用できます:http ://www.growlforwindows.com/gfw/ 。これにより、ユーザーは「オプトイン」できます。
「デスクトップとの対話」オプションに代わるものを提供する必要があります。VistaおよびWin7ではサポートされなくなりました。特権の高いアカウントで実行されるUIへのアクセスを制限されたユーザーに与えることは、セキュリティ上のリスクが大きすぎると見なされていました。これについての詳細を見つけるためにグーグル「セッション0分離」。
サービスとUIアプリ間の相互作用を設定するには、.NETでサポートされているプロセス相互運用メカニズムの1つを使用する必要があります。単純なメッセージパッシングには、ソケットまたは名前付きパイプのいずれかを使用します。パイプ名には、すべてのセッションで表示される「グローバル」プレフィックスが必要です。より複雑な対話については、RemotingまたはWCFを使用できます。
ユーザーがデスクトップアプリを実行または強制終了しないことを決定する可能性に対処するようにしてください。EventLogクラスでエラーをログに記録する必要があります。
この問題を解決するために、ユーザーが自由に開始および停止できる Windows フォーム アプリケーションを作成しました。もちろん、Windows サービスは 24 時間年中無休でバックグラウンドで実行されています。アプリケーションが開始されると、アプリケーションは Windows Communication Foundation (WCF) を使用して、現在のステータス (アクティブかどうか、接続されているクライアントの数、収集されたバイト数など) をサービスに照会します。この情報はユーザーに表示されます。アプリケーション内。
タスク マネージャーの動作を模倣しようとしたのでSystem.Windows.Forms.NotifyIcon
、システム トレイにアイコンを表示するアプリケーションのメイン フォームにも を追加しました。アプリケーションが開いている場合、システム トレイ アイコンが表示されます。ユーザーはアプリケーションを最小化してタスク バーに表示したり、アプリケーションを完全に非表示にしたりできます。トレイ アイコンは、ユーザーがアプリケーションを閉じたときにのみ消えます。トレイ アイコンは、アプリケーションを再度開くためのダブルクリックと、機能にすばやくアクセスするためのポップアップ メニューもサポートしています。
いずれにせよ、私が言いたいのは、サービスとフロントエンド アプリケーションが通信する最も簡単な方法は WCF だということです。人々は、WCF に関連する想定される「急な」学習曲線について議論するでしょうが、私はそれを経験しませんでした。WCF は、プロセス間通信を開発するための非常に効率的な方法であることがわかりました。このビデオを見て、WCF プログラミング パラダイムを理解することができます。