关于 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 更难。


推荐阅读

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux虚拟机命令安装?

    linux虚拟机命令安装?,系统,软件,工具,虚拟机,网络,状态,操作系统,命令,文

    红帽子linux操作命令?

    红帽子linux操作命令?,服务,系统,密码,环境,信息,通用,软件,状态,设备,命令,

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux微信安装命令?

    linux微信安装命令?,工具,手机,系统,认证,平台,管理,联系人,管理系统,电脑,

    linux安装强制命令行?

    linux安装强制命令行?,机器人,软件,工作,工业,系统,地址,电脑,生产,设计,状

    linux日常操作命令?

    linux日常操作命令?,工作,系统,地址,信息,命令,目录,基础,管理,操作,功能,lin

    创建自定义命令linux?

    创建自定义命令linux?,工具,状态,命令,系统,代码,标准,数据,位置,电脑,材料,L

    怎么给linux安装命令?

    怎么给linux安装命令?,软件,系统,在线,名称,官网,发行,命令,检测,简介,信息,

    linux自定义命令行?

    linux自定义命令行?,系统,工作,名称,百度,命令,管理,工具,位置,信息,终端,Lin

    linux命令行安装应用?

    linux命令行安装应用?,软件,系统,名称,官网,在线,管理,工作,信息,命令,目录,l

    linux配置自定义命令?

    linux配置自定义命令?,服务,系统,状态,策略,周期,地方,标准,新增,环境,工具,L

    linux安装浏览器命令?

    linux安装浏览器命令?,官网,系统,平台,网站,管理,设备,咨询,工具,官方网站,

    linux安装sz命令?

    linux安装sz命令?,系统,软件,标准,服务,工作,工具,命令,位置,平台,百度,如何

    linux安装纯命令行?

    linux安装纯命令行?,软件,系统,发行,环境,基础,工作,工具,公司,终端,命令,如

    linux安装npm命令?

    linux安装npm命令?,证书,最新,档案,代理,信息,位置,系统,工程,命令,版本,ngin

    go操作linux命令?

    go操作linux命令?,系统,工具,环境,软件,标准,网上,最新,信息,设备,电脑,Linux

    linux命令操作vim?

    linux命令操作vim?,系统,地址,工作,命令,模式,标准,信息,入口,连续,时间,Linu

    linux什么命令安装c?

    linux什么命令安装c?,系统,管理,工作,软件,在线,名字,传播,代码,工具,信息,li

    linux安装更新命令?

    linux安装更新命令?,软件,系统,项目,名称,管理,数据,网站,工作,官方网站,命