DCOM服务的DCOM 激活模式和终端服务器

2026年09月27日 07:31
有1个网友回答
网友(1):

在作为远程客户的服务器运行时,终端服务器系统在所支持的 DCOM 激活/进程启动模式方面会有所限制。对于任一给定的 ClassID 或 AppID,Windows NT 的 DCOM 通常支持四种激活/启动模式。
作为激活方运行(默认):在终端服务器中,本地进程由客户会话启动。
作为指定/命名用户运行:在终端服务器中,本地进程始终由会话 0(控制台)启动。
作为 Win32 和 Windows NT 服务运行:在终端服务器中,服务由会话 0(控制台)启动。
作为交互用户运行:不能用在终端服务器中。
对于终端服务器,只有模式 1(“作为激活方运行“)才受完全支持。模式 2 和 3(“作为指定/命名用户运行”和“作为 Win32 和 Windows NT 服务运行”)在终端服务器系统上运行时会出现不同的行为,因此 Microsoft 不推荐或支持这样做。第四种模式(“作为交互用户运行”),在终端服务器上根本不能运行。
DCOM 与 Windows 2000 终端服务
Microsoft 的目标是确保上述问题在 Windows 2000 中能够解决。以下内容是对 Microsoft Windows® 2000 终端服务下激活模式及其工作机制的简要描述:
作为激活方运行:
本地激活
服务器在激活方所属的同一会话中被激活。这种行为在无论终端服务是否启用的情况下都完全相同。
远程激活:
启用终端服务后的激活规则与不启用时一样。然而,进程将在会话 ID 为 0 的窗口站中启动,而不是在用户对应的会话中启动。 这是为了保护远程调用的激活行为。为了说明这一行为方式的原因,不妨假设由对应于 Windows 2000 Server(已启用终端服务)上用户的会话启动激活过程的情况。如果用户注销,所有的窗口站及其进程就被杀死。如果用户是从服务器上的多个客户登录的,而又决定从一台客户机上退出,则用户其它会话的客户进程将无法看到它们的激活过程。因此,其它会话将失败。基于这一原因,所有进程都将在会话 0 的窗口站中启动。因为会话 0 永远不会被删除,远程激活过程就能够继续正常进行。
作为命名/指定用户运行:
应用程序通过注册表中的 AppID 被配置为作为指定用户运行。本地和远程激活的行为相同。
当启用了终端服务时,进程将在会话 0 的一个新窗口站中启动。在有多个用户使用服务器的情况下,后续请求将获得已有的同一个类对象。 呼叫方的 SID 或 LUID 对此没有影响。在单个用户使用服务器的情况下,新的激活请求始终获得一个新的窗口站。即使同一用户登录到交互式桌面,激活过程也不会共享交互窗口站。
作为 Win32 和 Windows NT 服务运行:
应用程序通过 AppID 集被配置为作为服务运行进程。
当启用了终端服务后,服务从本质上讲仍是全局的,不会在某一特定会话中启动。根据服务配置不同,它们要么在会话 0 的服务桌面上启动,要么在会话 0 的交互桌面上启动。
作为交互用户运行:
应用程序被配置为在交互用户的安全环境下运行。
如前所述,Windows NT Server 4.0,Terminal Server Edition 不支持这类服务器的远程激活,它只支持会话到会话的本地激活。在启用终端服务的状态下作为交互用户启动进程有两种方式,正处于研究之中。一种在当前会话之外的另一会话中激活进程的方式是使用会话“标志”。另一种可能的方式是使用呼叫方的安全凭据启动进程。Windows 2000 正式推出时会提供更详细的信息