为 x86 和 x64 架构注册 .msi(安装项目)

Register .msi (setup project) for both x86 and x64 architectures

我正在为生物识别捕获应用程序构建安装项目。

问题是,要在用户的 PC 上运行,我需要在 Regedit 中注册 .exe 路径。

我已经通过定位 "Program Files (x86)" 文件夹来完成此操作,如下所示,但在 32 位 PC 中它不存在,因此应用程序将无法启动。

我该怎么做才能让它同时适用于 32 位和 64 位架构?

MSI 安装不需要可执行文件注册。

它只能将信息放入与application removal, etc相关的Windows注册表中。

默认情况下,MSI 安装程序会将所有文件放入单个根文件夹(例如,MS Office 将放入 "C:\Program Files\Office" 或类似的文件夹)。要配置目标安装文件夹,请使用 TARGETDIR property.

TARGETDIR 属性 是在安装期间计算的(此外 - 它可以被用户覆盖)。默认 属性 “[ProgramFilesFolder]” 是 x86 位置,但它无处不在。 属性“[ProgramFiles64Folder]”是您所需要的,但它只存在于 x64 OS 上。

所以,你需要什么:

  • 找到 action/step 将修补 TARGETDIR
  • 在使用"ProgramFiles64Folder"之前添加action/step(如果存在)

可能this answer可以帮你举例。

完成上述步骤后,您的应用程序将 select 用于 x86/x64 操作系统的正常 Program Files 文件夹。

几件事:

  1. 单独的体系结构需要单独的 MSI: https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

因此,如果您确实需要两种不同的构建,一种使用 64 位代码,另一种使用 32 位代码,那么您需要使用 Visual Studio 安装项目设置来单独构建 MSI。 32 位的一个主文件夹将是应用程序文件夹目录属性中的 ProgramFilesFolder,64 位的将使用 ProgramFiles64Folder。

  1. 在这两种情况下,您需要的注册表项都是 [TARGETDIR]Your.exe,这将起作用,因为 TARGETDIR 在这两种情况下都是文件夹的名称,并且您的可执行文件不在子文件夹。