【问题标题】:Best approach to install prerequisite on client machine using msi使用 msi 在客户端计算机上安装先决条件的最佳方法
【发布时间】:2011-11-13 22:25:59
【问题描述】:

我有 msi,想检查目标机器上是否安装了 vsto 运行时,我在我的 msi 中通过 VS2008 使用了启动条件,但它只会将用户重定向到供应商的网站。我只想安装先决条件,如果它没有安装在机器上,并且希望在 msi 运行期间安装先决条件。 可以概括为:

msi 运行时:

  1. 必须检查是否安装了先决条件,如果是则继续安装
  2. 如果没有,请先安装先决条件,然后继续安装 msi

我搜索并找到了许多解决方案,例如单包可执行文件、自定义操作中的 vb 脚本,但要求是不随安装程序一起提供任何东西,也不接受 exe :(

我安装了 orca,但对使用 Orca 自定义 msi 知之甚少

感谢您的帮助.. 提前谢谢...

【问题讨论】:

    标签: .net windows-installer


    【解决方案1】:

    WIX 是用于创建 Windows 安装程序的最强大(且免费)的工具之一。我不久前在Creating a localized Windows Installer & bootstrapper 上写了一篇端到端的文章,可能会有所帮助。

    例如,您可以通过在 WIX 文件中定义条件来强制执行先决条件。

    <Condition Message="[ProductName] requires the Microsoft .NET Framework 4 Client Profile">
        Installed Or NETFRAMEWORK40CLIENT
    </Condition>
    

    但是,要安装先决条件,您需要一个 boostrapper (EXE)。

    上面的文章展示了如何使用dotNetInstaller 创建托管 EXE,在最后执行嵌入式 MSI 之前检查并安装这些先决条件。当然,您也可以将大量 MSI 链接在一起,这非常灵活。

    我相信 WIX 也有一个叫做 Burn 的工具,它本来打算在 3.5 中发布,我没有使用它,但它也提供了引导功能。

    Orca 并不是真正用于编译 MSI,它只是用于调试和挖掘内部。

    【讨论】:

    • 感谢重播。您能否发布链接或详细说明如何使用 wix(逐步)方法添加先决条件,因为我对 WIX 完全陌生 :(
    • 我更新了一个简单的例子。最好的是我提到的文章,它是一个可下载的示例。
    【解决方案2】:

    由于不能接受 EXE 引导程序,因此只有一种解决方案:

    • 将必备安装程序存储在您的 MSI 的 Binary 表中
    • 创建一些custom actions,从该表中提取它们并启动它们
    • InstallUISequence 中安排它们,例如在进度对话框之前
    • 使用searches 检测是否安装了先决条件
    • 使用搜索结果调整您的自定义操作

    基本上,您需要在安装 UI 期间启动它们。如果自定义操作在 InstallExecuteSequence 期间运行,它可能不起作用。

    Visual Studio 不支持此功能,但一些商业设置创作工具直接支持它。如果您想要一个免费的解决方案,您可以使用WiX,但您需要自己编写自定义操作。

    【讨论】:

      【解决方案3】:

      您不能同时运行多个 .msi 包,因此如果 pre-req 是基于 .msi 的,它将无法工作。 (请记住,许多基于 .msi 的包都包装在 .exe 中。)

      【讨论】:

        【解决方案4】:

        您可能已经知道,Visual Studio 为您生成的 setup.exe 文件可以安装许多先决条件。但是,您的问题表明您必须只发送一个 MSI 文件,因此 setup.exe 无济于事。

        相反,您可以创建自己的程序来安装先决条件。在安装中包含该程序,以便它将为您捆绑到 MSI 中,然后设置自定义操作以在安装时运行它。您甚至可以在安装程序中设置一个标志,这样程序就不会实际安装在目标计算机上 - 而只是捆绑到 MSI 中并可供安装程序使用。

        如果您已经在安装基于 .NET 的代码,解决方案会更加简单:将项目安装程序类添加到现有代码中,然后设置自定义操作来运行安装程序类。但是请注意,如果您希望安装的先决条件是 .NET 运行时本身,则此方法将不起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-03
          • 1970-01-01
          • 1970-01-01
          • 2021-03-17
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多