安装程序选择基于CPU架构的MSI(x86 32位,64位64位等)

问题描述:

我有一个安装程序(Visual Studio安装项目),其中uses DIFxApp and an Orca transform to install drivers。问题是有两个DIFxApp合并模块 - 一个用于x86,另一个用于x64。如果我引用它们,则安装只适用于64位机器,而仅引用x86版本允许我在32位机器上安装。安装程序选择基于CPU架构的MSI(x86 32位,64位64位等)

看起来好像唯一的解决方案是创建两个MSI(一个用于x86,一个用于x64),每个引用正确的合并模块。我的问题是,我应该如何创建一个安装程序,根据目标机器的处理器来选择安装哪个MSI?

我已经与NSIS有点合作,所以它可能是最简单的去那条路线。其他可能性是Inno-SetupdotNetInstaller

类似的问题(但答案不足):

+0

为什么不让用户选择正确的MSI?在Windows世界中,为32位和64位版本分开安装是非常常见的。 – 2010-11-08 21:14:17

+0

@ 0xA3:因为客户需要一个统一的安装程序。此外,我觉得最好自动化所有可能的事情,以便用户尽可能少地安装。 – Pat 2010-11-08 21:18:27

如何制作一个小程序(发射器),其检测操作系统类型(64 0R 32位,应该很容易) 。小程序根据检测结果启动正确的安装程序。该程序不应该有任何窗口,并具有与安装程序相同的图标。给客户所有三个文件,installer.exe(程序),inst32.msi和inst64.msi。如果这对客户来说太多了,那么只需将它们压缩到自动解压缩zip文件,即可自动启动installer.exe。

+0

是的,这是一个有效的解决方案,但这是一个已被其他人解决的问题,我宁可不要重新发明*。 – Pat 2010-11-08 22:56:05

+0

在这种情况下,我建议使用inno setup,非常容易使用http://www.jrsoftware.org/isinfo.php。就我个人而言,我认为inno setup比nsis更容易。 – arifwn 2010-11-08 23:05:16

+0

我已安装并正在查看IS。我愿意尝试,但我不知道从哪里开始。对我的原始问题的一个很好的答案将明确地通过选择基于CPU的文件或另一个文件。 – Pat 2010-11-08 23:07:35

如果你决定去与NSIS:

!include "x64.nsh" 
${If} ${RunningX64} 
    MessageBox MB_OK "running on x64" 
${Else} 
    MessageBox MB_OK "running on x86" 
${EndIf} 

您可以使用自定义操作来检测操作系统,然后调用正确的安装程序。

我在这里给出一个例子:single-msi-to-install-correct-32-or-64-bit-c-application