【问题标题】:Target both x86 and x64 in the Windows Installer (VS2008)在 Windows Installer (VS2008) 中同时定位 x86 和 x64
【发布时间】:2011-10-10 01:54:45
【问题描述】:

有什么方法可以使用 Visual Studio 2008 创建 Windows 安装程序以同时针对 x86 和 x64 操作系统。

在 TargetPlatform 属性中,我只有:x86x64Itanium。而且我知道在某个地方还有一个叫Any CPU,但我找不到。

另外,我不想创建两个设置。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: c# visual-studio operating-system windows-installer target-platform


    【解决方案1】:

    我可能错了,但我很确定这是不可能的。 您提到的 Any-CPU 由 .Net 编译器用于您的程序集(.Net 程序集默认情况下与体系结构无关,但可以强制编译为 x86 或 x64)。 但由于 windows-Installer 是一个原生的 win32 exe,它不能生成为“Any-CPU”。 因此,您必须为 x86 和 x64 生成 2 个相同的安装程序。

    【讨论】:

    • 您部分正确 - MSI 不是可执行文件*,它实际上是由msiexec.exe 读取和操作的各种数据库。 (*如果“MSI”具有.exe 后缀,则它是一个包装了 MSI 的引导程序,引导程序是编译后的代码,但可以在 64 位系统上运行而不会出现任何问题。
    【解决方案2】:

    可以,但不能使用 VS 安装程序。我有一位同事通过 InstallShield 产品实现了这一目标,但我可以说这绝对是一个 hack,最后他得到了一个更好的结果,创建了两个不同的安装程序,一个用于每个目标位数。

    我还需要开导你:

    在 TargetPlatform 属性中,我只有:x86、x64、Itanium。而且我知道在某个地方还有一个叫做 Any CPU

    TargetPlatform 属性不会改变您正在安装的应用程序的位数,您会将它与程序集本身的目标平台混为一谈。 MSI 是交付工具,其中的 .Net 程序集是有效负载。 MSI 上的TargetPlatform 设置不控制 .Net 程序集的 JIT 编译方式,而是用于帮助确定安装路径(如果设置为 x86,则默认安装路径应为 %PROGRAMFILES(x86)%,不同的注册表配置单元将成为目标。

    【讨论】:

      【解决方案3】:

      可以做到,但不能直接使用 Visual Studio。一般的做法是这样的:

      • 创建一个包含 32 位和 64 位资源的通用 MSI
      • 创建MST transforms(一个用于 32 位,一个用于 64 位)根据目标平台修改 MSI
      • 使用 EXE 引导程序动态检测平台并将正确的转换应用于您的 MSI

      您可以使用Orca 创建转换。如果您想要商业解决方案,可以尝试 Advanced Installer 或 InstallShield。

      如果这看起来太复杂,您可以简单地使用单独的 32 位和 64 位软件包。

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多