Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 如何为32&;64个平台_Installation_Wix - Fatal编程技术网

Installation 如何为32&;64个平台

Installation 如何为32&;64个平台,installation,wix,Installation,Wix,我在一个基于WIX的安装程序上工作 安装程序分别构建32和64个平台。两种平台上的安装程序版本非常相似,但很少有条件的步骤(如避免在32位安装程序中注册x64本机DLL) 有没有办法将两个安装程序结合在一起?我对WiX的了解还不够肯定,但坊间证据表明不建议这样做。我想起了我看到的所有下载(MSDN和其他许多),其中您必须在32位和64位安装程序之间进行选择。事实上,现在我想起来了,我从来没有见过或听说过“通用安装程序”。这是不可能的。这是Windows Installer的一个限制,如果您想在不

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

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


有没有办法将两个安装程序结合在一起?

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

这是不可能的。这是Windows Installer的一个限制,如果您想在不使其两倍大的情况下执行此操作,则需要两个带有外部CAB文件的MSI和一个引导程序来执行正确的安装

如果您不需要MSI,请尝试。您可以很容易地基于操作系统体系结构进行有条件的安装

不管怎样,最近几周,我能找到的最好的回应是布莱尔:

标记为64位的MSI不会安装在32位系统上。没有什么 你能行

标记为32位的MSI无法将文件放入“64位目录” (它们将被重定向到32位“等效”文件夹)。你什么都不能做 做

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

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


在某种程度上,这是可能的。但是,你不能单独使用MSI。微软的.NET安装程序包就是一个例子;“完整安装”软件包支持x86位、x64位和ia64。然而,这个安装程序使用一个引导过程来完成它;它有一个单独的程序,确定要安装什么,然后再安装。在底层,您仍然需要32位MSI和64位MSI软件包

但是要注意;然后,安装程序引导程序的体系结构将决定它可以安装在什么上。如果它是基于x86的引导程序,那么它只能在安装了WOW64(Win2k8 R2的可移动选项)的32位窗口和64位窗口上工作,可能根本无法在ia64平台上工作

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


简而言之:可以,但不能使用MSI。

您可以尝试在组件的条件标记中使用
处理器架构
环境变量,仅注册特定架构需要注册的内容,这将在运行MSI时适用,而不是在构建MSI时。

检测64位操作系统的示例:

<Component Id="..." Guid="PUT-GUID-HERE">
  <Condition>NOT(%PROCESSOR_ARCHITECTURE = "x86")</Condition>
  ...
</Component>

不是(%PROCESSOR_ARCHITECTURE=“x86”)
...

检测32位操作系统的示例:

<Component Id="..." Guid="PUT-GUID-HERE">
  <Condition>%PROCESSOR_ARCHITECTURE = "x86"</Condition>
  ...
</Component>

%处理器体系结构=“x86”
...

如果您想了解有关在MSI中引用环境变量的更多信息,请参阅本页:

有关在何种情况下,
处理器体系结构
将返回什么的详细信息,请参阅本页:


然而,正如在这个答案的评论中所说的,这可能不是你真正想要的。但我认为(未经验证)您可以创建一个包含32位和64位MSI的引导程序,然后让引导程序根据操作系统体系结构选择在运行时应用哪个MSI,尽管我没有尝试过,也不知道具体如何操作,如果我发现,我一定会把答案贴出来。

谢谢你的回答。我同意大多数安装程序都有不同的版本,你知道为什么吗?对用户来说,减少担忧是有益的。我仍然很好奇这是否可能。我认为最可能的原因是,在32位和64位版本之间共享的文件很少(如果有的话),因此组合安装程序的大小至少是原来的两倍。所以-这是可能的,但是如果你想要64位的,下载32位的文件会很不方便,反之亦然。谢谢sascha,这非常有帮助!NSIS看起来也很酷,我希望我知道,如果以前,它可以让我们的安装程序简单得多:)那不完全是真的。。。我尝试在64位操作系统上使用x86编译在System32文件夹上安装,它总是在64位文件夹而不是32位文件夹上复制库。所以它不会自动重定向…这不会让您在32位软件包中混合使用64位和32位组件。这是MSI的规则/限制。@BobArnson嗯,从我的发现来看,这似乎是最接近的。