私はWin32_VolumeChangeEventを処理し、USBディスクデバイスの到着をイベントログとSQLデータベースに記録するWindowsサービスを用意しています。この追加コンポーネントは、ログイン時にユーザーセッションに読み込まれる非表示のUI(WinForms)です。これは、USBキーなどに関する会社のポリシーをユーザーに思い出させるメッセージボックスを表示します。AFAIK、これはサービスができないインタラクティブモードで長時間実行する。C#イベントのIPC全体
アーキテクチャ上、この小さなもののv1はUIコンポーネントがデバイス挿入用のWndProcメッセージを処理した後、IPC(名前付きパイプ)を介してデバイス識別子をWMIメソッド/ EventLogの書き込みを処理するサービスに渡したすべてのユーザーがローカル管理者権限を持っているわけではないため)。これは、UI要素の欠点が、プロセスが終了し、もはやデバイスの挿入を検出していないことを意味する。
現在のバージョンでは、サービスがWin32_VolumeChangeEventsを処理し、デバイスから必要な詳細を取得してから、EventLogとSQLにログを記録します。すべては抜群で、完璧に機能します。私はポップアップを表示するUIをトリガする最良の方法は何ですか?
私はIPCでのイベントに関するアイデアを探していますので、UIコンポーネントのイベントを購読してサービス内で起動することができますが、役に立った私はまた.net2に拘束されているので、WCFは画像から外れています(しかし、あなたがそのようにしたいなら、私はp/invokeを恐れません)。
So.どうしますか?リンク、思考、言葉遣い、擬似コード、実際のコード...すべてが評価されます。私はベストプラクティスであると信じているものに固執しようとしていますが、プログラミングはちょっとした芸術形式で、ベストプラクティスは誰かのホラーストーリーかもしれません。
だからあなたは何をしますか?私が明確にする必要がある場合私に教えてください:)
これは、WCFでは比較的簡単です。なぜあなたは.NET 2に制約されていますか? .NET 3.0と3.5は.NET 2のスーパーセットであり、実際に別のバージョンではなく、コアアセンブリを変更しないことはご存じですか? –
私たちは.net 3のインストールの良いクライアント側のカバレッジを持っていませんが、私たちは.net 2のインストールのほぼ完全なカバレッジを持っています。ネットを押すことは現時点では選択肢ではありません。 – dotalchemy