关于 Visual Studio 2008:如何让我的 VS2008 x86 安装程序在 x64 上安装 x64 程序集?

关于 Visual Studio 2008:如何让我的 VS2008 x86 安装程序在 x64 上安装 x64 程序集?

How can I make my VS2008 x86 installer install x64 assemblies on x64?

我正在使用 VS2008 安装程序(加上自定义 Orca 操作)为我的 .NET 产品创建安装程序。

我最近才发现我使用的第三方程序集之一是特定于 x86 的(因为它包含一些本机代码);因此,x64 客户在启动时遇到了关于程序集不适合其平台的错误。

我向这样的客户发送了此第三方程序集的 x64 版本的副本,并告诉他只需将其复制到现有的 x86 版本上即可。成功了,甜!所以现在我只需要让安装程序为我做这件事。

这实际上看起来很重要 :(。理想情况下,我只希望安装程序(应该是 x86,因为它可以在两个平台上运行)包含此第三方程序集的 x86 和 x64 版本,并安装适当的一。换句话说,我想要一个让我的用户生活更轻松的安装程序。

我以为我已经解决了这个问题,使用 MSI 条件语句等等。但显然不是……除非您指定"x86"或"x64",否则 VS2008 安装项目将无法编译。如果您指定 x86,它会给出一个编译错误,指出它不能包含 x64 程序集。如果指定 x64,则结果无法在 x86 计算机上执行。妈的!

以前一定有人遇到过这个问题。不幸的是,谷歌没有帮助,所以我求助于 StackOverflow!


当我在一年前研究这个问题时,我得出的结论是这是不可能的。值得注意的是,许多 Microsoft 提供的 MSI 文件都有不同的 x86 和 x64 风格——而且如果可能的话,他们可能只会提供一个文件。


如果我对您的理解正确,如果您在 x86 上安装,您想要复制一个文件,如果您在 x64 平台上安装,您想要复制不同的文件(同名)。

首先,您不能为 2 个不同的平台创建一个 MSI,因为 x64 MSI 根本无法在 x86 平台上运行,而 x86 MSI 将使用 WOW64 在 x64 平台上安装。

另一方面,您可以创建一个包含 2 个不同版本文件的 x86 MSI,并在安装期间选择性地复制相应的文件。

最简单的方法是使用 WIX (V3) 而不是内置的 VS2008 MSI 生成器。 WIX 让您可以更好地控制在客户机器上安装的内容和位置,能够为不同平台生成不同的安装程序,并提供完整的 MSBuild 支持作为额外奖励。 (有关更多信息,请参见 http://wix.sourceforge.net。)

如果您想知道 WIX 仍处于测试阶段,生成的 MSI 文件完全没问题,我还没有遇到过错误。 (而且我以开发设置项目为生。)

最后,您可以使用 VersionNT64 属性检查 x86 安装程序是否在 x64 平台上运行。如果该属性存在,则您正在运行 x64,否则您正在运行 x86。

希望这会有所帮助。


通过使用两个功能来选择性地包含两组文件(当然,在单独的组件中,使用它们的个性化文件标识符!),我取得了一些成功。

安装必须标记为 x32 才能同时安装在 x32 和 x64 上。它将始终安装到 x32 目录,并在很大程度上被视为在 WOW 下运行的 32 位应用程序。

使用 VersionNT64 属性,您可以确定是否存在 Windows 64 安装,并有条件地安装您需要的文件。

我不确定 VS2008 安装项目中有多少此功能可用 - 我正在使用其他一些商业工具以这种方式设置安装程序。当然,你也可以使用 Orca 来做这件事,尽管让它与商业工具一起工作并非易事,而且 Orca 更难。


推荐阅读