VSPackages 必须通知 Visual Studio 它们已经安装并且需要加载。 此过程是通过在注册表中写入信息来完成的。 这是安装程序的典型作业。
注释
在 VSPackage 开发期间使用自注册是一种接受的做法。 但是,Visual Studio 行业合作伙伴(VSIP)计划合作伙伴不能使用自注册作为设置的一部分交付其产品。
Windows Installer 包中的注册表项通常记录在注册表中。 还可以在注册表表中注册文件扩展名。 但是,Windows Installer 通过编程标识符(ProgId)、类、扩展和谓词表提供内置支持。 有关详细信息,请参阅 数据库表。
确保您的注册表项与适合您选择的并行策略的组件正确关联。 例如,共享文件的注册表项应与该文件的 Windows Installer 组件相关联。 同样,特定于版本的文件的注册表项应与该文件的组件相关联。 否则,为一个版本的 Visual Studio 安装或卸载 VSPackage 可能会破坏其他版本中的 VSPackage。 有关详细信息,请参阅 支持多个版本的 Visual Studio。
注释
管理注册的最简单方法是使用同一文件中的相同数据进行开发人员注册和安装时注册。 例如,某些安装程序开发工具可以在编译时使用.reg格式的文件。 如果开发人员为自己的日常开发和调试维护.reg文件,则可以自动将这些文件包含在安装程序中。 如果无法自动共享注册数据,则必须确保安装程序的注册数据副本是最新的。
注册非托管 VSPackage 包
非托管 VSPackage(包括 Visual Studio 包模板生成的 VSPackage)使用 ATL 样式的 .rgs 文件来存储注册信息。 .rgs 文件格式特定于 ATL,通常不能由安装程序编写工具原样使用。 VSPackage 安装程序的注册信息必须单独维护。 例如,开发人员可以保持.reg格式的文件与 .rgs 文件更改同步。 .reg文件可以与 RegEdit 合并,以供开发工作或安装程序使用。
注册托管 VSPackage
RegPkg 工具从托管 VSPackage 读取注册属性,并且可以将信息直接写入注册表,也可以写入安装程序可以使用的.reg格式化文件。
注释
RegPkg 工具不可再发行,不能用于在用户的系统上注册 VSPackage。
为什么 VSPackages 不应在安装时进行自注册
VSPackage 安装程序不应依赖于自注册。 首先,仅在 VSPackage 本身中保留 VSPackage 的注册表值似乎是个好主意。 鉴于开发人员需要可用于其例行工作和测试的注册表值,因此避免在安装程序中维护注册表数据的单独副本是有意义的。 安装程序可以依赖 VSPackage 本身来写入注册表值。
虽然在理论上很好,但自我注册有几个缺陷,使它不适合 VSPackage 安装:
正确支持安装、卸载、安装回滚和卸载回滚,要求您通过调用 RegPkg,为每个自注册的托管 VSPackage 编写四个自定义操作。
您的并行副本支持方法可能要求您为每个受支持的 Visual Studio 版本编写四个自定义操作,以调用 RegSvr32 或 RegPkg。
无法安全地回滚具有自注册模块的安装,因为无法告知其他功能或应用程序是否使用了自注册密钥。
自注册 DLL 有时链接到不存在或版本错误的辅助 DLL。 相比之下,Windows Installer 可以使用注册表表注册 DLL,且不依赖于系统的当前状态。
自注册代码可能会被拒绝访问网络资源(例如类型库),如果一个组件既被指定为从源运行又在 SelfReg 表中列出。 这可能会导致在管理安装期间组件安装失败。