トップ回答者
WebアプリケーションでのFindWindowについて

質問
-
WebアプリケーションでFindWindowを使用して
MFCアプリケーションのウインドウハンドルを取得しようと思っています。
IIS 5.1の場合、IIS Adminサービスのデスクトップとの対話を許可し、
machine.configでユーザとパスワードを指定することで
何とか取得できる様になったのですが、
IIS 6.0の場合、同じ方法が使えないので困っています。
(IIS6.0なら互換モードを使用すれば動くのですが、できればIIS 7.0でも動かしたいとの事で)
アプリケーションプールでユーザとパスワードを指定して、
w3wp.exeを指定したユーザで起動する所まではできたのですが、
IIS Adminサービスの「デスクトップとの対話をサービスに許可」にチェックを入れても
FindWindowでウインドウハンドルを取得できません。
この現象の解決方法はありますでしょうか?
開発環境 :VS 2005(ASP.NET C#)
回答
-
サービスと MFC アプリのユーザー セッションが異なっているのではないでしょうか?
IIS 6.0 ということは Windows Server 2003 だと思いますが、
ターミナル サービスの関係で MFC アプリがセッション 0 以外で動作しているかもしれません。(サービスはセッション 0)
IIS 5.1 (XP ですね) の環境でも、ユーザーの管理切り替えをすると、たちまち動かなくなる可能性があります。
[HOW TO] Windows XP でユーザーの簡易切り替えをサポートするアプリケーションの作成方法
http://support.microsoft.com/kb/310153/ja
... FindWindow または FindWindowEx を使用する従来の方法は、異なるユーザー セッションで (異なるデスクトップ上で) 実行されている
アプリケーション インスタンスを検出できないため、ユーザーの簡易切り替えが有効になっている Windows XP システムでは正しい結果が得られません。...
IIS 7.0 でも動かしたいとのことですが、Vista & Windows Server 2008 以降はセッション 0 分離が導入されているため、
FindWindow のままでは確実に動かなくなります。
ユーザーの簡易切り替え: 支援技術 ベンダが注意すべき問題点
http://msdn.microsoft.com/ja-jp/library/cc421553.aspx
セッション 0 の分離 - Windows 7 対応アプリケーションの互換性
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
RPC やら名前付きパイプやらを使って、MFC アプリの方からサービスにウィンドウ ハンドルを伝えるという方法は取れませんか?- 回答としてマーク kou7 2010年4月26日 4:24
すべての返信
-
サービスと MFC アプリのユーザー セッションが異なっているのではないでしょうか?
IIS 6.0 ということは Windows Server 2003 だと思いますが、
ターミナル サービスの関係で MFC アプリがセッション 0 以外で動作しているかもしれません。(サービスはセッション 0)
IIS 5.1 (XP ですね) の環境でも、ユーザーの管理切り替えをすると、たちまち動かなくなる可能性があります。
[HOW TO] Windows XP でユーザーの簡易切り替えをサポートするアプリケーションの作成方法
http://support.microsoft.com/kb/310153/ja
... FindWindow または FindWindowEx を使用する従来の方法は、異なるユーザー セッションで (異なるデスクトップ上で) 実行されている
アプリケーション インスタンスを検出できないため、ユーザーの簡易切り替えが有効になっている Windows XP システムでは正しい結果が得られません。...
IIS 7.0 でも動かしたいとのことですが、Vista & Windows Server 2008 以降はセッション 0 分離が導入されているため、
FindWindow のままでは確実に動かなくなります。
ユーザーの簡易切り替え: 支援技術 ベンダが注意すべき問題点
http://msdn.microsoft.com/ja-jp/library/cc421553.aspx
セッション 0 の分離 - Windows 7 対応アプリケーションの互換性
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
RPC やら名前付きパイプやらを使って、MFC アプリの方からサービスにウィンドウ ハンドルを伝えるという方法は取れませんか?- 回答としてマーク kou7 2010年4月26日 4:24
-
MFCアプリのセッションIDを確認しましたが、
これが問題なく動いてはいけません。
0で動いているようでした。
XPのユーザの簡易切替機能を有効にして試してみましたが、
こちらは問題なく動くようです。
2人目以降でログオンしたユーザーで MFC アプリを起動すると、FindWindow できなくなるはずです。
何か手順が違っているのでしょうか?
・ユーザーの簡易切替機能を有効にする。
・1人目のユーザーでログオンする。
・ユーザーを切り替えて、2人目のユーザーでログオンする。
・2人目のユーザーのデスクトップで MFC アプリを起動する。
・タスク マネージャーの「列の選択」で「セッション ID」を有効にする。
・MFC アプリがセッション 0 以外で起動していることを確認する。
なんとなくですが、
これぞまさに Session 0 の分離なのですが。
IIS Adminサービスのデスクトップとの対話を許可しない状態
(MFCアプリは通常のデスクトップで動作し、
Webアプリはサービス用のデスクトップで動作している状態)に
なっているのではないかと思っております -
なるほど。
当方の理解不足でした。
確認したのは以下の手順でした。
・ユーザーの簡易切替機能を有効にする。
・1人目のユーザーでログオンする。
・タスク マネージャーの「列の選択」で「セッション ID」を有効にする。
・MFC アプリがセッション 0 で起動していることを確認する。
記載いただいた手順で、
セッション0以外で起動することを確認しました。
Vistaや2008はまだ実際に触った事がなかったので、
セッション0分離に関する話は今回初めて知りました。
今後のことを考えると、Web側でのウインドウハンドルの取得は
あきらめた方が良さそうですね。
ありがとうございました。