5

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

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

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

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

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

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

4

3 回答 3

6

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

于 2008-09-14T03:29:06.040 回答
3

如果我对您的理解正确,如果您在 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。

希望这可以帮助。

于 2008-12-09T20:40:06.177 回答
1

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

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

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

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

于 2008-11-04T21:54:47.667 回答