如何实现32&的单一安装程序64个平台

时间:2009-12-17 14:49:14

标签: installer wix

我在基于WIX的安装程序上工作。

安装程序分别构建到32和64个平台。两个平台上的安装程序版本非常相似,但很少有条件步骤,例如避免在32位安装程序中注册x64本机dll。

有没有办法将两个安装程序统一到一个?

4 个答案:

答案 0 :(得分:28)

无法做到。这是Windows Installer的一个限制,如果您想在不增加两倍的情况下执行此操作,那么您将需要两个带有外部CAB文件的MSI和一个执行正确安装的引导程序。

如果您不需要MSI,请尝试NSIS。您可以非常轻松地基于OS体系结构进行条件安装。

无论如何,最近几周this has been also asked on the WiX-users list多次,我能找到的最好的答案就是布莱尔的这个答案:

  

标记为64位的MSI不会安装在32位系统上。没有   你可以做。

     

标记为32位的MSI根本无法将文件放入“64位目录”   (它们将被重定向到32位“等效”文件夹)。你没事   做。

     

MSI不能标记为32位和64位。你也无能为力。

     

“正确”方法是生成两个MSI,一个用于32位平台和   另一个用于64位平台。如果,他们可以共享相同的外部cab文件   你需要将它们一起运送以节省空间。如果你这样做,你可以使用   bootstrapper用你的CAB提取适当的一个并安装它。

答案 1 :(得分:3)

在某种程度上是可能的。但是,你无法单独使用MSI。一个例子是Microsoft的.NET安装程序包; “完整安装”软件包具有x86位,x64位和ia64支持。但是,此安装程序使用引导过程来执行此操作;它有一个单独的程序,可以确定要安装的内容,然后安装它。在下面,您仍然需要32位MSI和64位MSI包。

但要注意;然后,安装程序引导程序的体系结构将确定可以安装的内容。如果它是基于x86的引导程序,那么它只适用于安装了WOW64的32位窗口和64位窗口(Win2k8 R2的可移动选项),并且在ia64平台上可能根本不起作用!

提供单独的安装程序真的太简单了,实际上不值得捆绑它们。您将使安装程序大小增加一倍或三倍,这可能会关闭一些客户。如果它是一个内部工具,那么确实没有缺点 - 让原始msi可用允许更多(远程)安装选项。

简而言之:是的,你可以,但不是MSI。

答案 2 :(得分:1)

我不太了解WiX肯定会说,但轶事证据表明不建议这样做。我想起了我看到的所有下载(MSDN和许多其他人),你必须在32位和64位安装程序之间进行选择。实际上,现在我想起来,我从未见过或听说过“通用安装人员”。

答案 3 :(得分:1)

您可以尝试在组件的条件标记中使用PROCESSOR_ARCHITECTURE环境变量来仅注册需要为特定体系结构注册的内容,这将在MSI运行时应用...而不是在构建时。

检测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,这取决于操作系统体系结构,尽管我没有尝试过这个并且不会我知道该怎么做,如果我发现,我肯定会发布答案。