使用 64 位 Windows Installer 程序包

当创建 64 位 Windows Installer 程序包或可调用 Windows Installer 来安装 64 位程序包的应用程序时,请执行以下操作:

  • 使用值为 200 或更高的 Windows Installer 数据库架构。 通过将 Page Count Summary 属性设置为整数 200,来指定版本 2.0 是安装程序包所需的安装程序的最低版本。 更低版本的 Windows Installer 拒绝尝试安装 64 位程序包。 对于 Arm64 平台上的 64 位程序包,Windows Installer 数据库架构的值必须为 500 或更高。
  • 在包摘要信息流的 Template Summary 属性中指明这是一个 64 位程序包。 如果要在 Intel64 处理器上运行程序包,请在“Template Summary”属性的平台字段中输入“Intel64”。 如果要在 64 位扩展处理器上运行程序包,请输入“x64”。 如果要在 Arm64 处理器上运行程序包,请输入“Arm64”。 不能将程序包标记为同时支持 Intel64 和 x64 平台,“Intel64,x64”的“Template Summary”属性值无效。 不能将程序包标记为同时支持 32 位和 64 位平台,“Intel,x64”或“Intel,Intel64”的“Template Summary”属性值无效。
  • 通过在 Component 表的 Attributes 列中设置 msidbComponentAttributes64bit 来标识每个 64 位组件。
  • 使用可选的条件语句,通过引用 VersionNT64 属性来检查 64 位操作系统的版本。 Windows Installer 将此属性设置为 64 位 Windows 版本,如果操作系统不是 64 位 Windows,则不定义 VersionNT64。 有关详细信息,请参阅在条件语句中使用属性
  • 使用可选的条件语句,通过引用 Intel64Msix64 属性来检查计算机的数值处理器级别。 Windows Installer 将这些属性设置为计算机当前的数值处理器级别,如果这不是基于 Itanium 的处理器,则不定义 Intel64 属性。 有关详细信息,请参阅在条件语句中使用属性
  • 使用 AppSearch 表AppSearch 操作对现有 64 位组件的注册表执行可选搜索。 要搜索现有的 64 位组件,请在 RegLocator 表的 Type 列中包含 msidbLocatorType64bit 位。 有关详细信息,请参阅搜索现有应用程序、文件、注册表项或 .ini 文件条目属性
  • 通过引用 64 位文件夹的 System64FolderProgramFiles64FolderCommonFiles64Folder 属性以及 32 位文件夹的 SystemFolderProgramFilesFolderCommonFilesFolder 属性,来获取系统文件夹的路径。
  • 验证应用程序在引用 64 位组件时是否使用了正确的 GUID。 如果特定组件有 32 位和 64 位版本,则这些组件应该具有不同的组件 ID GUID。
  • 确定在安装 64 位应用程序时是否需要定义任何新的环境变量。
  • 如果要安装 64 位 ODBC 驱动程序管理器,则承载该管理器的组件应命名为 ODBCDriverManager64。 必须在安装程序包中创作 ODBC 驱动程序管理器,并且必须包含名为 ODBCDriverManager64 的组件。 如有必要,将安装管理器。
  • 验证应用程序是否仅调用作为可执行文件运行的 32 位服务。 应用程序不应调用在 DLL 中运行的 32 位服务。
  • 如果应用程序同时安装了 32 位和 64 位版本的组件,请验证应用程序是否正确共享了 .ini 文件信息。
  • 验证应用程序是否仅将 32 位补丁应用到 32 位二进制文件,将 64 位补丁应用到 64 位二进制文件。
  • 考虑 32 位和 64 位版本的未来升级方案并维护升级代码。 有关详细信息,请参阅修补和升级
  • 当使用启动应用程序安装 64 位 Windows Installer 程序包时,请将启动应用程序编译为 64 位应用程序。
  • 要为受特定组件影响的注册表项禁用注册表反射,请在 Component 表的“属性”字段中设置 msidbComponentAttributesDisableRegistryReflection 位。 若要让应用程序同时具有 32 位和 64 位副本,这是必需的。 如果设置了此位,则 Windows Installer 对组件访问的每个键调用 RegDisableReflectionKey 函数。 此位适用于 Windows Installer 版本 4.0。 32 位系统上将忽略此位。 64 位版本的 Windows XP 和 Windows 2000 上将忽略此位。

注意

MsiGetComponentPath 函数的 lpPathBuf 参数返回的数值注册表根目录的值区分 32 位和 64 位操作系统上的组件。 有关详细信息,请参阅 MsiGetComponentPath 函数。

 

64 位自定义操作