安装即服务应用程序
除了作为本地服务器可执行文件 (EXE) 运行之外,COM 对象还可以将自身打包为在被本地或远程客户端激活时作为服务应用程序运行。 服务支持许多有用的用户界面集成的管理功能,包括本地和远程启动、停止、暂停和重启,以及建立可在特定用户帐户和窗口工作站下运行的服务器的功能。
通过确定 AppID 项下的 LocalService 值并执行标准服务安装,安装编写为服务的对象供 COM 使用。
类也可以配置为在被远程客户端激活时在特定用户帐户下运行,而无需作为服务应用程序编写。 为此,该类将安装一个用户名和密码,供 SCM 启动其本地服务器进程时使用。
以这种方式配置类时,除非 COM 代表实际激活请求启动进程,否则使用此 CLSID 调用 CoRegisterClassObject 将失败。 换句话说,配置为作为特定用户运行的类可能不会在任何其他标识下注册。
用户名取自类的 APPID 项下的 RunAs命名值。 如果用户名为“Interactive User”,则类代码在当前登录用户的安全上下文中运行,并连接到交互式窗口工作站。
否则,从只有计算机的管理员和系统可用的注册表的隐藏部分检索密码。 然后,用户名和密码用于创建运行类代码的登录会话。 以这种方式启动时,类代码使用自己的桌面和窗口工作站运行,并且不与交互式用户或其他用户帐户中运行的其他类共享窗口句柄、剪贴板或其他用户界面元素。
使用 LocalService 或 RunAs 注册的服务器可以在正在运行的对象表中注册对象,以允许任何客户端连接到该对象。 为此,服务器调用 IRunningObjectTable::Register 时必须设置 ROTFLAGS_ALLOWANYCLIENT 标志。 引用可执行文件的 AppID 的注册表的 AppID 部分必须具有设置此位的服务器的可执行文件名称。 “激活即激活器”服务器(未注册为 LocalService 或 RunAs)可能无法向此标志注册对象。
相关主题