【问题标题】:How to interactive a silently installing msi? (Progress data and cancel it)如何与静默安装的 msi 交互? (进度数据并取消)
【发布时间】:2018-06-26 09:33:59
【问题描述】:

出于某种原因,我们正在交付具有自己安装 GUI 的产品,这意味着我们将在后台静默运行 msi 安装。

通过使用 MSI API“MsiInstallProduct”,我可以静默安装产品,但我不知道如何获取此安装的进度数据以及如何取消它。

有人有什么想法吗?

【问题讨论】:

    标签: installation windows-installer silent-installer


    【解决方案1】:

    2018 年 6 月更新:虽然下面显示的工具不再可供下载,但我通过 Wayback 机器找到了它。我认为链接到它是可以且合法的,因为该工具是免费软件。更新了以下链接。

    更新遗憾的是,Wise 的这个工具无法再下载。我也不确定是否可以分发它。它似乎是作为主要 Wise Package Studio 套件的一部分分发的免费工具,但我不认为它是开源的。我希望他们将其作为开源工具发布。

    Wise 包装产品因legal issues 的数量而停产。


    我相信您可以通过 MSI API 获得进度,但如果我是您,我只会在通过 msiexec.exe 调用安装后显示 MSI 本身的进度条。

    MSI 支持几种不同的安装级别(完全、完全静默、基本 GUI、简化 GUI 等...)。在您的情况下,听起来您想要一个基本的 UI。这会产生一个进度条,您可以在其中隐藏取消按钮,并可选择显示完成模式对话框:

    静默安装,有进度条,没有取消按钮,最后没有模式对话框:

    msiexec.exe /I "Test.msi" /QB-!
    

    为避免不得不手动构建这些愚蠢的 msiexec 命令行,请使用 Wise 的 msi 命令行构建器工具http://www2.wise.com/filelib/WICLB.exe从 Wayback 机器中复活)。

    为安全起见,请通过virustotal.com 运行下载。


    相关

    【讨论】:

    • 我会给你投票,但不是我的答案。我们没有使用msi GUI,因为它不适合我们的产品风格,所以我们为它提供了一个更酷的进度条,我只需要设置我们的进度条的进度数据。 msi 的基本 GUI 是不可接受的。而且我仍然无法从纯 API 中取消它吗?
    • 以下是如何使用 MSI 广告牌和进度条的示例:sourceforge.net/projects/msiprogramming。如果这不是您需要的,也许可以查看以下资源:installsite.org
    • 记得点击“查看所有文件”按钮(否则你只能得到一个演示)。
    【解决方案2】:

    这是一个示例项目,似乎可以执行您所指的操作: http://www.codeproject.com/KB/cs/msiinterop.aspx

    【讨论】:

      【解决方案3】:

      您需要在 MsiInstallProduct 之前使用 MsiSetExternalUI 或 MsiSetExternalUIRecord 指定外部 UI 处理程序(后者更好,但具有更高的 MSI 版本要求)。对于 Windows 安装程序希望您处理的每条消息,都将调用您指定的函数。这将为您提供数据,并有机会响应告诉它取消。如果您需要 MSI 4.5 或更高版本,您可以使用不需要引导程序的嵌入式外部 UI 处理程序 DLL。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2013-03-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 2012-01-23
        • 2011-02-23
        • 2011-06-04
        • 1970-01-01
        相关资源
        最近更新 更多