我正在使用VS2008安装程序(以及自定义Orca操作)为我的.NET产品创建安装程序。
我刚刚发现我使用的第三方程序集之一是x86特定的(因为它包含一些本机代码);因此,x64客户在启动时遇到了崩溃,错误的是程序集不适合他们的平台。
我向这样的客户发送了这个第三方程序集的x64版本的副本,并告诉他只需将其复制到现有的x86版本上。它工作,甜蜜!所以现在我只需要让安装程序为我做这个。
这实际上看起来很重要:(。理想情况下,我只想要安装程序(可能是x86,因为它可以在两个平台上运行)包含此第三方程序集的x86和x64版本,并安装相应的换句话说,我想要一个让我的用户生活更轻松的安装程序。
我以为我已经解决了这个问题,使用了MSI条件语句等等。但显然没有......除非指定“x86”或“x64”,否则VS2008安装项目将无法编译。如果指定x86,则会出现编译错误,指出它不能包含x64程序集。如果指定x64,则无法在x86计算机上执行结果。该死!
之前一定有人遇到过这个问题。不幸的是谷歌没有用,所以我转向StackOverflow!
答案 0 :(得分:6)
当我在一年前调查这篇文章时,我得出的结论是,这是不可能的。值得注意的是,许多Microsoft提供的MSI文件都有单独的x86和x64版本 - 据推测,如果可能的话,它们只会提供单个文件。
答案 1 :(得分:3)
如果我理解正确,如果您在x86平台上进行安装,则要在x86上安装并使用不同文件(具有相同名称),则需要复制一个文件。
首先,您无法为2个不同的平台创建一个MSI,因为x64 MSI不能在x86平台上运行,而x86 MSI将在x64平台上使用WOW64安装。
另一方面,您可以创建一个包含2个不同版本文件的x86 MSI,并在安装过程中有选择地复制适当的文件。
最简单的方法是使用WIX(V3)而不是内置的VS2008 MSI生成器。 WIX让您可以更好地控制客户机器上安装的内容以及为不同平台生成不同安装程序的能力,以及完整的MSBuild支持作为额外奖励。 (有关详细信息,请参阅http://wix.sourceforge.net。)
如果您想知道WIX仍处于测试阶段,生成的MSI文件完全正常,我从未遇到过错误。 (我以开发设施项目为生。)
最后,如果x86安装程序在x64平台上运行,则可以使用VersionNT64属性进行检查。如果该属性存在,则表示您正在运行x64,否则您将在x86上运行。
希望这会有所帮助。
答案 2 :(得分:1)
通过使用两个功能来选择性地包含两组文件(当然,在单独的组件中,使用其个性化的文件标识符!),我取得了一些成功。
必须将安装标记为x32才能在x32和x64上安装。它将始终安装到x32目录,并将在很大程度上被视为在WOW下运行的32位应用程序。
使用VersionNT64属性,您可以确定是否存在Windows 64安装,并有条件地安装所需的文件。
我不确定VS2008安装项目中有多少此功能可用 - 我正在使用其他一些商业工具以这种方式设置安装程序。当然你也可以使用Orca来做这件事,虽然让它与商业工具一起工作并不是一件容易的事情,而且Orca更难。