SelfReg 表
SelfReg 表包含有关需要自行注册的模块的信息。 安装程序在安装模块期间调用 DllRegisterServer 函数;它在卸载模块期间调用 DllUnregisterServer。 安装程序不自行注册 EXE 文件。
SelfReg 表包含以下列。
列 | 类型 | 钥匙 | 空 |
---|---|---|---|
文件_ | 标识符 | Y | N |
成本 | 整数 | N | Y |
列
-
File_
-
文件表的第一列中的外部键 指示需要注册的模块。
-
成本
-
注册模块的成本(以字节为单位)。 这必须是非负数。
言论
强烈建议安装包作者不要使用自我注册。 相反,它们应通过创作安装程序提供的一个或多个表来注册模块, 以实现此目的。 有关详细信息,请参阅 注册表表组。 由于自注册例程往往隐藏关键配置信息,因此拥有中央安装程序服务的许多好处都因自我注册而丢失。 避免自我注册的原因包括:
- 无法使用 DllUnregisterServer 安全地回滚使用自注册模块的安装,因为无法告知其他功能或应用程序是否使用了自注册密钥。
- 如果在自注册例程中执行类或扩展服务器注册,则使用播发的能力会减少。
- 安装程序会自动处理注册表表中用于每用户或每台计算机安装的 HKCR 密钥。 DllRegisterServer 例程目前不支持每用户 HKCR 密钥的概念。
- 如果多个用户在同一台计算机上使用自注册的应用程序,则每个用户必须在首次运行该应用程序时安装该应用程序。 否则,安装程序无法轻松确定是否存在正确的 HKCU 注册表项。
- 如果组件都指定为从源运行并在 SelfReg 表中列出,则可以拒绝对 DllRegisterServer 访问网络资源(例如类型库)。 这可能会导致在管理安装过程中组件安装失败。
- 自注册 DLL 更容易出现编码错误,因为对于每个 DLL,DllRegisterServer 所需的新代码通常不同。 请改用数据库中的注册表表来利用安装程序提供的现有代码。
- 自注册 DLL 有时可以链接到不存在或版本错误的辅助 DLL。 相比之下,安装程序可以使用注册表表注册 DLL,且不依赖于系统的当前状态。
注意
不能通过使用 SelfRegModules 和 SelfUnRegModules作来指定安装程序注册或注销自注册 DLL 的顺序。 请参阅 指定自注册的顺序。
验证