检测x86/x64并安装正确的.msi文件

4

我正在完成一款即将提交Windows Logo Program验证的应用程序。其中一个要求是x64兼容性,具体来说,Crystal Reports 2008必须在x64下运行。

我的问题是,Visual Studio 2008附带的基本版Crystal Reports 2008没有合并模块,并且必须使用提供的.msi安装程序进行安装。它们为x86和x64提供单独的安装程序。

那么,在安装过程中如何检测x86和x64,然后运行适当的Crystal msi呢?即使没有合并模块,这是否可能?

编辑:

这个:

IF PROCESSOR_ARCHITECTURE == x86 AND
   PROCESSOR_ARCHITEW6432 NOT DEFINED THEN
   // OS is 32bit
ELSE
   // OS is 64bit
END IF

似乎告诉我如何检测它(感谢MicSim)。 但是我该如何在MSI中执行此操作?这是一个自定义操作吗?然后,我如何触发x32和x64水晶报表所需的不同msi?

为什么x86水晶安装程序在WOW64下无法工作?您必须安装x64 Crystal才能与WOW64 x86应用程序配合使用。令人沮丧...

编辑2:

好的,现在如何手动触发您选择的msi呢?

4个回答

8
检测64位操作系统最简单的方法是使用VersionNT64属性。此属性可用于组件或自定义操作的条件(例如,Not VersionNT64条件仅对32位操作系统为真)。
至于在安装过程中安装其他MSI软件包,那就有点棘手了。Windows Installer一次只允许一个MSI在执行序列中运行。这意味着您必须在UI序列中使用自定义操作来安装Crystal Reports MSI(如果以静默模式运行MSI,则要小心跳过UI序列),或创建某种引导程序程序,该程序将按顺序运行Crystal Reports MSI和您自己的程序。
我从未创建过自己的引导程序,但InstallShield在其setup.exe中内置了引导程序程序;他们称以此方式安装的软件包为先决条件

VersionNT64支持Windows Installer v4。自Windows Installer v3.1起,支持Msix64,请参见https://dev59.com/UHE95IYBdhLWcg3wGaB_。 - KargWare

1

刚刚谷歌了一下:如果您有一个MSI项目,您可以像这里描述的那样检查属性。

关于检测进程和操作系统架构的更多信息,您可能想阅读此MSDN博客,其中介绍了“如何检测进程位数”的内容。


1

您可以通过自定义操作来触发Crystal Reports MSI,该操作执行[SystemFolder]msiexec。只需将“/ i [YourFolderWithCRMSI]msiname.msi”指定为参数即可。


您可能还想添加/q作为参数,这样就不会打扰客户了。 - Andrew Shepherd

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接