如何使VS2008 x86安装程序在x64上安装x64程序集?
我正在使用VS2008安装程序(加上自定义的Orca操作)为.NET产品创建安装程序。
我最近才发现我正在使用的第三方程序集之一是x86特定的(因为它包含一些本机代码);因此,x64客户在启动时崩溃,并出现关于装配不适用于其平台的错误。
我向该客户发送了该第三方程序集的x64版本的副本,并告诉他只需将其复制到现有的x86版本中即可。很好,太好了!因此,现在我只需要让安装程序为我执行此操作即可。
实际上,这似乎很简单:(。理想情况下,我只希望安装程序(将是x86,因为它可以在两个平台上运行)同时包含此第三方程序集的x86和x64版本,并安装适当的版本。换句话说,我想要一个安装程序,使我的用户的生活变得轻松。
我以为我已经使用MSI条件语句和所有这些方法解决了这个问题。但是显然没有。除非指定" x86"或者" x64",否则VS2008安装项目将无法编译。如果指定x86,则会出现编译错误,指出它不包含x64程序集。如果指定x64,则结果无法在x86计算机上执行。该死!
以前一定有人遇到过这个问题。不幸的是,谷歌没有帮助,所以我转向StackOverflow!
解决方案
回答
一年前,当我研究这个问题时,我得出结论认为这是不可能的。值得注意的是,许多Microsoft提供的MSI文件具有单独的x86和x64版本-大概是,如果可能的话,它们只会提供一个文件。
回答
我通过使用两个功能选择性地包括了两组文件(当然,在单独的组件中以及它们的个性化文件标识符!)中获得了一些成功。
必须将安装标记为x32才能同时在x32和x64上安装。它将始终安装到x32目录,并且在很大程度上将被视为在WOW下运行的32位应用程序。
使用VersionNT64属性,我们可以确定是否存在Windows 64安装,并有条件地安装所需的文件。
我不确定在VS2008安装项目中有多少此功能可用,我是否正在使用其他一些商业工具以这种方式设置安装程序。当然,我们也可以使用Orca来做到这一点,尽管让它与商业工具一起工作并非易事,而且Orca困难得多。
回答
如果我对理解正确,那么如果要在x86上进行安装,则希望复制一个文件,如果要在x64平台上进行安装,则要复制另一个文件(具有相同的名称)。
首先,我们不能为2个不同的平台创建一个MSI,因为x64 MSI根本无法在x86平台上运行,而x86 MSI将在x64平台上使用WOW64安装。
另一方面,我们可以创建一个包含文件的2个不同版本的x86 MSI,并在安装过程中有选择地复制适当的文件。
最简单的方法是使用WIX(V3)而不是内置的VS2008 MSI生成器。 WIX使我们可以更好地控制在客户计算机上安装的内容以及安装位置,以及为不同平台生成不同安装程序的功能以及对MSBuild的全面支持,这是添加的好处。 (有关更多信息,请参见http://wix.sourceforge.net。)
如果我们想知道WIX仍处于Beta中,则生成的MSI文件完全可以,而且我还从未遇到错误。 (并且我为生活开发设置项目。)
最后,我们可以使用VersionNT64属性检查x86安装程序是否在x64平台上运行。如果存在该属性,则说明我们正在运行x64,否则,我们正在x86上运行。
希望这可以帮助。