VSPackage 注册

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 表中列出,则可以拒绝对网络资源(例如类型库)的访问。 这可能会导致在管理安装期间组件安装失败。