安装可并行共享的 Win32 程序集

下面介绍如何创建一个 Windows Installer 包来安装 Win32 程序集。 该包在 Winsxs 文件夹中安装一个并行程序集,供应用程序共享使用。 安装该包后,在程序集清单文件中指定了对共享程序集的依赖关系的任何应用程序可全局使用该程序集。 安装程序不会在系统上全局注册并排程序集。

请注意,可以使用合并模块安装并行共享的程序集。

在继续之前,应了解如何创作一个不附带程序集的 Windows Installer 包。 有关如何创建简单安装的示例,请参阅安装示例

安装并行共享的程序集

  1. 定义一个包含 Win32 程序集的 Windows Installer 组件。 此组件可以包含应始终随程序集一起安装或删除的其他资源。 可以像为不附带程序集的安装创作组件一样来创作应用程序的所有其他组件。 在 Component 表中,为包含 Win32 程序集的组件添加一行。 为此组件代码输入有效的 Windows Installer GUID。 不要使用清单文件作为此组件的关键路径。
  2. FeatureComponents 表中添加一行,以便将组件与 Windows Installer 功能相关联。 有关信息,请参阅组件和功能。 Windows Installer 功能应该是用户可识别的应用程序功能的一部分。 当用户选择此功能或者应用程序因出错而调用此功能时,将激活该程序集。 如果程序集定义了其他某个功能,请在 Feature 表中为该功能的属性额外添加一行。 创作合并模块时不需要执行此步骤。
  3. 对于并行程序集,绑定和激活信息(例如 COM 类、接口和类型库)存储在清单文件而不是注册表中。 共享程序集将此信息存储在程序集清单中。 在支持并行程序集的系统上,安装程序将跳过有关 Extension 表Verb 表TypeLib 表MIME 表Class 表ProgId 表AppId 表中所输入组件的任何信息的处理。 可以将绑定和激活信息输入到这些表中,以供不支持并行程序集共享的系统使用。
  4. 并行安装不会全局注册程序集,如果在 SelfReg 表中输入了任何自行注册信息,安装程序将跳过自行注册组件的操作。 可以将自行注册信息输入到 SelfReg 表中,以便在不支持并行程序集共享的系统上自行注册组件。
  5. 将任何其他注册表信息(不包括组件的绑定和激活或自行注册)添加到 Registry 表RemoveRegistry 表Environment 表
  6. 由于这是一个共享程序集,因此不会生成 .local 文件。 不要在 IsolatedComponent 表中包含此组件的信息。 在支持并行共享的操作系统上,安装程序会跳过此组件的 IsolatedComponent 表。 如果你希望程序集在支持 .local 文件的系统上是专用的,请将信息添加到 IsolatedComponent 表。
  7. 若要启用并行共享,必须将 Win32 程序集安装到 Winsxs 文件夹中。 为此,可以将程序集的 MsiAssembly 表的 File_Application 列保留为 null。 这样,安装程序就会将该程序集安装到 WinSxS 文件夹,而不是安装到组件的文件夹。 在 MsiAssembly 表中为包含 Win32 程序集的组件添加一行。 在 MsiAssembly 表的 Attributes 字段中输入值 1,以指定这是一个 Win32 程序集。 对于共享程序集,请将 File_Application 字段留空。 将 MsiPublishAssemblies 操作添加到 InstallExecuteSequence 表AdvtExecuteSequence 表。 将 MsiUnpublishAssemblies 操作添加到 InstallExecuteSequence 表。
  8. 将行添加到组件的 MsiAssemblyName 表。 为清单的 assemblyIdentity 节中指定的每个名称和值对添加一行。 有关示例,请参阅 MsiAssemblyName 表