我在一个基于WIX的安装程序上工作。
安装程序分别构建为32和64个平台。两个平台上的安装程序版本非常相似,但很少有条件步骤,比如避免在32位安装程序中注册x64原生dll。
有没有办法把这两个安装器合并为一个?
发布于 2009-12-18 05:53:11
在某种程度上,这是可能的。不过,您不能仅使用MSI来完成此任务。微软的.NET安装程序包就是一个例子;"full install“包具有x86位、x64位和ia64支持。但是,此安装程序使用引导过程来执行此操作;它有一个单独的程序来确定要安装的内容,然后进行安装。在下面,您仍然需要32位MSI和64位MSI包。
不过要注意,您的安装程序的引导程序的体系结构将决定它可以安装在什么位置。如果它是一个基于x86的引导程序,那么它只能在安装了WOW64的32位窗口和64位窗口上工作( Win2k8 R2的一个可移除选项),并且可能根本不能在ia64平台上工作!
提供单独的安装程序真的简单得多,不值得将它们捆绑在一起。您将使安装程序的大小加倍或三倍,这可能会让一些客户望而却步。如果它是一个内部工具,那么就没有什么不好的地方了--有了原始的msi,就可以有这么多(远程)安装选项。
所以简而言之:是的,你可以,但不能使用MSI。
发布于 2009-12-17 23:06:06
我对WiX的了解还不够确切,但轶事证据表明不推荐这样做。这让我想起了我看到的所有下载(MSDN和其他许多),其中必须在32位和64位安装程序之间进行选择。实际上,现在我想起来了,我从来没有见过也没有听说过“通用安装程序”。
发布于 2013-02-08 02:08:12
您可以尝试在组件的条件标记中使用PROCESSOR_ARCHITECTURE
环境变量,只注册需要为特定体系结构注册的组件,这将适用于构建时为run...not的组件。
检测64位操作系统的示例:
<Component Id="..." Guid="PUT-GUID-HERE">
<Condition>NOT(%PROCESSOR_ARCHITECTURE = "x86")</Condition>
...
</Component>
检测32位操作系统的示例:
<Component Id="..." Guid="PUT-GUID-HERE">
<Condition>%PROCESSOR_ARCHITECTURE = "x86"</Condition>
...
</Component>
如果您想了解更多关于在MSI中引用环境变量的信息,请参阅此页面:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx#Access_Prefixes
有关在哪种情况下PROCESSOR_ARCHITECTURE
将返回什么内容的更多信息,请参阅此页面:https://superuser.com/q/396267/117857
然而,正如这个答案的注释所述,这可能不是你真正想要的。但我认为(未经验证)您可以创建一个包含32位和64位MSI的引导程序,然后让引导程序根据操作系统体系结构选择在运行时应用哪个MSI,尽管我还没有尝试过,也不知道具体如何做,如果我找到了答案,我肯定会发布答案。
https://stackoverflow.com/questions/1922259
复制相似问题