会话0中的进程可以共享一个进程外的COM服务器吗?

时间:2014-03-17 14:38:41

标签: com session-0-isolation

在Windows 7中,我有一个进程外的COM服务器,说“MyComServer.exe”。我将其注册为CLSCTX_LOCAL_SERVERREGCLS_MULTIPLEUSE | REGCLS_SUSPENDED

在交互式会话中,会话编号> 0,无论运行多少个客户端,我的MyComServer.exe只运行一个实例。假设我正在使用我的COM服务器运行5个excels,3个matlabs和7个其他人,我只看到1个MyComServer.exe正在运行。这很好,这就是我的意图。

如果多个会话处于活动状态,比如会话1,2和3,那么我会看到3个MyComServer.exe实例。使用任务列表我可以看到每个实例都在不同的会话中运行。这也很好,就像我想的那样。

但是,如果我在会话0中使用它,我会看到每个客户端的实例。假设我有3个Windows服务全部使用它,然后我看到3个MyComServer.exe实例。使用任务列表我看到它们中的所有3个都在会话0中运行。会话0中的进程可以共享一个进程外的COM服务器吗?

调查此问题我注意到PostMessage在会话0中的进程之间不起作用。阅读我理解的文档PostMessage不应该跨会话,这意味着会话0中的进程无法发布会话1中的进程的消息我注意到,虽然会话1中的进程可以将消息发布到同一会话中的另一个进程,但会话0中的进程无法将消息发布到任何其他进程,即使目标也是如此也在会话0中运行。有人可以确认一下吗?它似乎与Microsoft文档不一致。

感谢。

1 个答案:

答案 0 :(得分:0)

从Vista开始,会话0仅承载服务和系统进程。用户应用程序在会话1,2等中运行。

PostMessageSendMessage在会话0中不起作用。无法跨会话边界发送消息。至于在会话0中发送消息,它没有意义,因为此会话中只有服务和系统进程。

关于COM,您应该注意到会话0隔离也适用于COM +服务器应用程序和在交互式用户以外的任何其他地方运行的COM进程外应用程序。见Session 0 isolation, COM and COM+

  

会话0隔离不仅限于NT服务。它还适用于COM +服务器应用程序和在交互式用户以外的任何其他地方运行的COM进程外应用程序。因此,与第一个登录用户的不同终端服务器会话中的服务相关的所有问题现在也适用于dllhost进程(COM +或代理的COM dll)和COM服务器应用程序。