0

Windows 7 では、"MyComServer.exe" などのアウト プロセス COM サーバーがあります。と として登録しCLSCTX_LOCAL_SERVERますREGCLS_MULTIPLEUSE | REGCLS_SUSPENDED

インタラクティブ セッション (セッション番号 > 0) では、実行しているクライアントの数に関係なく、MyComServer.exe のインスタンスが 1 つしか実行されません。COM サーバーを使用して 5 つの Excel、3 つの Matlab、その他 7 つを実行しているとします。実行中の MyComServer.exe は 1 つだけです。これはいいです、これは私が意図したものです。

セッション 1、2、3 など、複数のセッションがアクティブな場合、MyComServer.exe の 3 つのインスタンスが表示されます。tasklist を使用すると、各インスタンスが異なるセッションで実行されていることがわかります。これも意図したとおりでいいです。

ただし、セッション 0 から使用すると、クライアントごとにインスタンスが表示されます。3 つの Windows サービスがすべてそれを使用しているとします。MyComServer.exe の 3 つのインスタンスが表示されます。tasklist を使用すると、3 つすべてがセッション 0 で実行されていることがわかります。セッション 0 のプロセスは、プロセス外の COM サーバーを共有できますか?

この問題を調査PostMessageすると、セッション 0 のプロセス間で機能しないことがわかりました。私が理解しているドキュメントを読むと、PostMessageセッションをまたぐことは想定されていません。つまり、セッション 0 のプロセスは、セッション 1 のプロセスにメッセージを投稿できません。 、セッション1のプロセスは同じセッションの別のプロセスにメッセージを投稿できますが、セッション0のプロセスは、ターゲットがセッション0でも実行されている場合でも、他のプロセスにメッセージを投稿できません.誰かがこれを確認できますか? Microsoft のドキュメントと矛盾しているようです。

ありがとう。

4

1 に答える 1

0

Vista 以降、セッション 0 はサービスとシステム プロセスのみをホストします。ユーザー アプリケーションは、セッション 1、2 などで実行されます。

PostMessageセッション 0 では機能しSendMessageません。セッションの境界を越えてメッセージを送信することはできません。セッション 0 内でのメッセージの送信に関しては、このセッションにはサービスとシステム プロセスしかないため意味がありません。

COM に関しては、セッション 0 の分離は、対話型ユーザー以外で実行されている COM+ サーバー アプリケーションおよび COM アウトプロセス アプリケーションにも適用されることに注意してください。セッション 0 分離、COM および COM+を参照してください。

セッション 0 の分離は、NT サービスに限定されません。また、対話型ユーザー以外で実行されている COM+ サーバー アプリケーションおよび COM アウトプロセス アプリケーションにも適用されます。そのため、最初にログインしたユーザーとは異なるターミナル サーバー セッションに存在するサービスに関連するすべての問題は、dllhost プロセス (COM+ または代理 COM dll) および COM サーバー アプリケーションにも適用されるようになりました。

于 2014-04-23T14:05:42.447 に答える