3

特定のイベントの発生とディスク アクティビティを監視する Windows サービスを構築しています。このようなイベントが発生した場合、私の計画は、クライアント アプリを介してユーザーにイベントを警告し、必要に応じて修復を提供することです。クライアント アプリとサービス コンポーネントの両方を (ほとんど) 完成させました。

つまり、CreateProcess を介して Windows サービスからクライアント アプリを起動し、ユーザーに情報を提供する方法を探しています。ただし、サービスはクライアントアプリのファイル/フォルダーを認識して実行することさえできないようです。これは、サービスが実行されている資格情報が原因であるか、サービス レベルの制限が原因であると思われますが、詳細に入る前にアドバイスを求めたいと考えています。

それで、最初の明白な質問... 私はこれについて明確に考えていますか? アーキテクチャの計画は適切ですか、それとも別の方法を検討する必要がありますか? すでに完了した作業をやり直したくはありませんが、計画とプロセスがしっかりしていることを確認したいのは明らかです。

質問 2、このモデルで直面する制限は何ですか? このレベルのアクセスを許可するサービス アカウントはありますか?

私は明らかに今これに苦労しているので、どんな考えや援助も大歓迎です!

ありがとう、クリス

4

3 に答える 3

4

他の人が既に述べたように、サービスから直接アプリケーションを (簡単に) 起動することはできないため、問題を回避する最も簡単な方法は、ログイン時に開始され、ログインしているユーザーの資格情報で実行されるプロセスを作成することだと思います。たとえば、システム トレイにあるアプリで、サービスへの名前付きパイプまたはネットワーク ポートを開きます。サービスがユーザーに警告する必要がある場合、サービスはそのチャネルにメッセージを送信し、クライアント プロセスは独自の UI を表示するか、アプリケーションを起動できます。パイプまたはポートを使用したプロセス間通信は、セッション 0 プロセスの制限に対処する最も簡単な方法です。

于 2011-09-29T20:56:34.623 に答える
3

Windows サービスは Vista 以降のユーザー セッションにアクセスできないため、そのセッションで実行可能ファイルを開始することはブロックされます。詳細については、Microsoft からホワイト ペーパーをダウンロードできます: Impact of Session 0 Isolation on Services and Drivers in Windows .

于 2011-09-29T18:28:36.580 に答える
3

Vista 以降、サービスはセッション 0 で実行され、ユーザーのデスクトップは常に別のセッションになります。したがって、ユーザーのデスクトップでサービスを開始するには、一生懸命に取り組む必要があります。

それはできますが、かなりトリッキーです。詳細はこちら: http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and- later.aspx?wa=wsignin1.0

于 2011-09-29T18:36:25.773 に答える