为x86和x64体系结构注册.msi(安装项目)

时间:2018-10-08 12:36:52

标签: c# visual-studio setup-project regedit

我正在为生物特征捕获应用程序建立一个安装项目。

问题是,要使其在用户PC上正常工作,我需要在Regedit中注册.exe路径。

我已经通过定位“ Program Files(x86)”文件夹来做到这一点,如下所示,但是在32位PC中它不存在,因此该应用程序将无法启动。

enter image description here

我怎样做才能使其在32位和64位体系结构上都能正常工作?

2 个答案:

答案 0 :(得分:1)

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

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

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

TARGETDIR属性是在安装过程中计算的(此外,它可以被用户覆盖)。默认属性“ [ProgramFilesFolder]”是x86位置,但是随处可见。属性“ [ProgramFiles64Folder]”是您所需要的,但是仅在x64 OS上存在。

那么,您需要什么?

  • 查找将修补TARGETDIR的操作/步骤
  • 添加操作/步骤以使用“ ProgramFiles64Folder”(如果存在)

可能的this answer可以为您提供示例。

完成上述步骤后,应用程序将为x86 / x64操作系统选择普通的Program Files文件夹。

答案 1 :(得分:1)

几件事:

  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均为两种情况下的文件夹名称,并且您的可执行文件不在子文件夹中。