安装时注册类

如果某个类随时可供客户端使用(和大多数应用程序一样),通常可以通过安装和安装程序进行注册。 这意味着将应用程序相关信息放入注册表,包括实例化对象的方式和位置。 必须为所有 CLSID 注册此信息。 其他信息可选。 Regsvr32 等工具使编写安装时注册服务器的安装程序变得简单。

如果不依赖系统默认值,注册表中有两个重要项:CLSID 和 AppID。 这些项的重要信息包括如何实例化对象。 可以将对象指定为进程内、进程外本地或进程外远程。

AppID 密钥下有多个值,用于定义特定于该应用程序的信息。 其中包括 RemoteServerNameActivateAtStorage,这两者都可用于允许客户端创建对象,客户端没有服务器位置的内置知识。 (有关远程实例化的详细信息,请参阅查找远程对象实例创建帮助程序函数。)

还可以将服务器作为服务安装,或在特定用户帐户下运行。 有关详细信息,请参阅作为服务安装应用程序

不是服务或在特定用户帐户下运行的服务器或 ROT 对象可以称为“激活即激活器”服务器。 客户端的安全上下文和窗口工作站/桌面必须与这些服务器的相应设置匹配。 尝试连接到远程服务器的客户端被视为具有 NULL 窗口工作站/桌面,因此仅在此实例中比较服务器安全上下文。 (有关 SID 的详细信息,请参阅 COM 中的安全性。)当进程首次连接到分布式 COM 服务时,COM 会缓存进程的窗口工作站/桌面。 因此,COM 客户端和服务器不应在调用 CoInitializeCoInitializeEx 后更改进程的窗口工作站或线程桌面。

当类注册为进程内时,COM 会自动将创建其类对象的 CoGetClassObject 调用传递给 DllGetClassObject 函数,类必须实现该函数来为调用对象提供指向其类对象的指针。

在可执行文件中实现的类可以指定 COM 应执行其进程,并等待进程通过调用 CoRegisterClassObject 函数来注册其类对象的 IClassFactory 接口。

COM 注册表项

安装即服务应用程序

注册正在运行的 EXE 服务器

注册组件

在 ROT 中注册对象

自注册