【问题标题】:How can I write an installer for 32 and 64 bit如何为 32 位和 64 位编写安装程序
【发布时间】:2011-02-06 06:44:33
【问题描述】:

我有一个在 32 位和 64 位下工作的 .NET 应用程序。 我想编写一个安装到 c:\program 文件的单个安装程序,而不是 c:\program files(x86),无论平台如何。

从此链接: http://msdn.microsoft.com/en-us/library/w1behyzx(v=VS.90).aspx 看起来不可能。是这样吗?

【问题讨论】:

    标签: .net installation 64-bit


    【解决方案1】:

    根据How to: Create a Windows Installer for a 64-bit Platform

    分发 .NET Framework 适用于 32 位和 64 位 平台,构建两个 MSI 包,一个 针对一个 32 位和另一个 64 位计算机。用户可以安装 32 位安装项目包和 它很可能会以 64 位的方式运行 应用程序,只有 64 位设置 项目将安装到“程序 Files64" 目录。

    不是最好的体验,但很有效。

    更新:人们避免使用两个安装程序包的常用方法是生成一个安装程序可执行文件,它会打包两个安装程序并即时选择正确的安装程序。

    您可以创建一个快速的 C#(尽管现在您遇到了在没有 .Net 的机器上引导它的问题。是的,还有这样的机器吗?:-))或 C++ 可执行文件自己检测它运行的平台和使用从可执行资源中提取或从网站下载的正确 .msi 启动 msiexec 进程。

    或者this SO question's accepted answer 简要介绍了这一点,并提到了一个名为Advanced Installer 的第三方工具,它可以帮助您解决这个问题。请注意,我没有尝试过该工具,也无法保证,我只是提到它仅供参考;你必须自己评估它。 :-)

    【讨论】:

    • +1:你抢我的链接。我打算回答差不多。
    • 这正是我想要避免的:两个不同的 msi 包。
    • 我完全理解你的愿望,但仅仅因为你对某事的渴望,这并不能使它变得更可行。至少没有MSI。您可能会考虑替代安装引擎,但您可能会冒安装引擎未正确遵循所有操作系统指南的风险。
    • 如果你说不可能,我会接受。假设有人提出解决方案。如果没有,您的答案将是正确的。
    • 可以有一个部署包;不可能有一个 MSI。您的包必须是一个自定义的 .exe,它打包两个 MSI 并在执行时选择正确的一个。
    【解决方案2】:

    如果您的应用在 32 位和 64 位下运行,则它是 32 位的,因此它位于 (x86) 文件夹中。

    【讨论】:

    • 不正确。如果在构建 .Net 应用程序时未指定目标体系结构,则会将其编译为与体系结构无关的 IL 程序集。当此类应用程序在用户计算机上启动时,CLR 会将其即时编译为运行它的平台的本机机器代码。在 32 位操作系统上,它将作为 32 位应用程序进行 JIT,但在 64 位操作系统上,它将作为 64 位应用程序进行 JIT。
    • 我正要发布那个,但 Penov 打败了我。
    • 啊哈,不知道这一点,总是假设在 64 位和 32 位中运行的任何东西都只是在 64 位架构上运行在 32 位仿真中,这就是为什么它们被这样隔离.将留下回复,以便您的评论可以看到。
    【解决方案3】:

    此链接http://msdn.microsoft.com/en-us/library/cd7a85k9%28v=VS.90%29.aspx(在您发布的链接中引用)包含以下部分:在 64 位平台上将文件安装到 Common Files、Program Files 或 System 文件夹。

    这应该可以帮助您,只要您以 x64 平台为目标并且没有对仅 x86 的库的任何引用。

    【讨论】:

      【解决方案4】:

      我使用 WiX 安装包。请查看以下文章,看看它是否符合您的要求:

      Example WiX-based setup that can be used to build both 32-bit and 64-bit MSIs

      s

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多