Vista以前のWindowsの以前のバージョンでは、Windowsサービスが現在ログインしているデスクトップユーザーと対話して、サービスから画面上の情報を簡単に表示できるようになりました。 Windows Vistaでは、デスクトップからサービスを分離するために、セキュリティのためにセッション0が追加されました。セッション0以外で実行されているアプリケーションとサービス間の通信方法は簡単ですか?これまで私はTCP/IPを使ってこの2つの間で通信することでこの問題を解決しましたが、それを行うにはちょっとした方法のようです。Windows Vistaセッション0とデスクトップとの間の通信方法は?
6
A
答えて
4
共有メモリまたは名前付きパイプを使用してIPCを容易にすることができます。概念的にはこれはTCP/IPに似ていますが、未使用のポートを見つけることについて心配する必要はありません。
hereのように、すべてのセッションでアクセスできるように、作成する名前付きオブジェクトに接頭辞 "Global \"が付いていることを確認する必要があります。
AFAIKサービスがデスクトップと直接対話する方法はありません。
3
実際、セキュリティ上の理由から、「デスクトップ」と直接通信することはできません。とにかく、複数のアクティブユーザー+リモートセッションを持つマシンに居住しているとき、「デスクトップ」とは何ですか?
問題を解決する一般的な方法は、RPCメカニズム(TCP/IP、IPC、それらの1つを介した.Net Remoting Channelsなど)を介して通信するサービスアプリケーションを使用することです。そのような痛みはありますが、そのメリットは価値があると思います。
1
サービスをデスクトップに話すには、RPCメカニズムの1つに悩まされています。 .NET remotingメカニズム(IpcServerChannel)は、この目的で実装するのが難しくありません。
また、.NETを使用すると、デスクトップアプリケーションはServiceController.ExecuteCommandでサービスに直接メッセージを送信できます。これらのコマンドは、ServiceBase.OnCustomCommandを介してサービスによって受信されます。これはさらに簡単であり、サービスを制御することが唯一の要件であれば、あなたが必要とするすべてのものになります。
関連する問題
- 1. Delphi 2009:VistaのWindowsサービスとデスクトップアプリケーションの通信方法
- 2. WCFデュプレックスサービスとセッション間通信
- 3. Windows上でC++とPHP間の通信方法は?
- 4. セッション間の通信
- 5. Windowsサービス間の通信方法
- 6. デルファイアプリケーションとWindows NTシステムドライバ間の通信
- 7. WCFサービスとホストアプリケーション間の通信方法
- 8. デスクトップJavaとWebアプリケーション間の通信(例: PHP
- 9. phpとboostライブラリIPCとの間の通信方法は?
- 10. Windowsとメインアプリケーションから呼び出されるDLL間の通信方法は?
- 11. 通話を受信したときのセッションの処理方法
- 12. ViewModels間の通信方法
- 13. Windows OS環境のC++アプリケーションとJavaアプリケーション間のプロセス間通信
- 14. デフォルトのデスクトップとWinlogonデスクトップの間でプロセスを切り替える方法は?
- 15. USBスキャナとの通信方法は?
- 16. WindowsサービスとWebサービス間のプロセス間通信
- 17. Windowsサービスの通信とスレッド
- 18. GUIとWindowsサービスの通信
- 19. バックグラウンドタスクとの通信方法?
- 20. アンドロイドとサーバー間の双方向通信
- 21. プロセス間の通信方法は?
- 22. ウィンドウ間の通信方法は?
- 23. 私のアプリケーションをWindowsの通信プログラムと見なす方法
- 24. JVMとネイティブライブラリ間の通信
- 25. PHPとJavascript間の通信
- 26. Task.Factoryとスレッド間の通信
- 27. フレックスモジュールとアプリケーション間の通信
- 28. PythonとWCF間の通信
- 29. 2つのプロセス間の通信方法
- 30. BESとの通信方法は?