注册正在运行的 EXE 服务器

启动可执行 (EXE) 服务器时,它应调用 CoRegisterClassObject,在所谓的类表(与正在运行的对象表不同的表)中为服务器注册 CLSID。 在类表中注册服务器时,允许服务控制管理器 (SCM) 确定不需要重新启动该类,因为服务器已在运行。 仅当类表中未列出服务器时,SCM 才会检查注册表以获取适当的值,并启动与给定 CLSID 关联的服务器。

CoRegisterClassObject 传递给该类的 CLSID,以及指向其 IUnknown 接口的指针。 随后使用此 CLSID 调用 CoGetClassObject 的客户端将检索指向其请求的接口的指针,只要出于安全原因不禁止这样做。 (有关多个实例创建和激活函数的描述,请参阅实例创建帮助程序函数。)

如果以下所有情况属实,类对象的服务器应调用 CoRevokeClassObject 以撤销类对象(删除其注册):

  • 没有对象定义的现有实例。
  • 类对象上没有锁。
  • 向类对象提供服务的应用程序不受用户控制(对显示器上的用户不可见)。

安装即服务应用程序

安装时注册类

在 ROT 中注册对象

自注册