2009-03-05 21 views
1

イベントを監視するWindowsサービスアプリケーション(GUIなし)を作成する必要があります。発生した場合は、標準のWindowsメッセージをアプリケーションに送信します。アプリケーションのハンドルは、アンロードされたDLLによってサービスに渡されるため、Windowsのメッセージが使用する方法です。Windowsサービスがユーザーのウィンドウにメッセージを送信するための特別な考慮事項はありますか?

問題は、サービスがVistaの別の画面または何かにある可能性があるので、SendMessageをウィンドウハンドルに使用するために特別な処理を行う必要があるかどうかです。これは可能なのでしょうか?もしそうなら、私は何をしなければなりませんか?

答えて

7

ユーザーインターフェイス特権の分離(UIPI):

のMicrosoft Windows Vista以降。 メッセージの送信は、ユーザ インタフェース特権分離(UIPI)の対象です。 プロセスのスレッドは、 メッセージを、より小さいプロセスまたは 同等の保全レベルのスレッドの スレッドのメッセージキューにのみ送信できます。

Source

あなたはおよそUser Interface Privilege Isolation (UIPI) hereを読むことができます。

これを回避するには、マニフェストファイルでuiAccessをtrueに設定します。また、VeriSignなどの署名機関の証明書でauthenticodeを使用してアプリケーションに署名していることを確認する必要があります。これはかなり高価になることがあります。


セッション0の分離:

また、あなたがセッション間のSendMessageを呼び出すことはできません、私の信念です。したがって、セッション0でサービスを実行している場合は、セッション> 0で実行されるプロセスと通信する別の手段を見つける必要があります。

Windows Vistaでは、Windows 2008 Server以降のすべてのサービスはセッション0で実行され、起動するすべてのアプリケーションはセッション> 0で実行されます。これはセッション0分離と呼ばれます。ここにはinformation all about session 0 isolationという良い文書があります。

メッセージを送信するプログラムのソースにアクセスできない場合は、サービスと通信するアプリケーションを作成し、メッセージをアプリケーションに中継するプロキシとして機能させることで回避できます同じセッションで


全体:

あなたは事前にVista上でアプリケーションを開発し、それが正常に動作している場合。 非常に高い機会がVistaで壊れる可能性があります。

+0

それが正しいかどうかにかかわらず、それは良い情報です。 –

+0

それは悪く聞こえる。明確化:これが役に立つかどうかを知るには、手元の主題について十分に分かっていませんが、情報が一般的に有用であると感じて+1を付けました。 –

+0

:)ありがとう、私はポスターがこれらの問題の両方を持つと思う。しかし、私は彼の問題の正確な詳細も持っていません。 –

関連する問題