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



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

在交互式会话中,会话号> 0,无论有多少客户端正在运行,只有一个MyComServer.exe实例运行。假设我正在使用我的COM服务器运行5个excel, 3个matlab和其他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中。有人能证实一下吗?这似乎与微软文档不一致。

谢谢。

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

PostMessageSendMessage在会话0中不工作。不可能跨会话边界发送消息。至于在会话0中发送消息,这是没有意义的,因为这个会话中只有服务和系统进程。

关于COM,您应该注意到会话0隔离也适用于COM+服务器应用程序和运行在交互用户之外的任何其他情况下的COM进程外应用程序。参见会话0隔离,COM和COM+:

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

相关内容

最新更新