【发布时间】:2018-06-26 09:33:59
【问题描述】:
出于某种原因,我们正在交付具有自己安装 GUI 的产品,这意味着我们将在后台静默运行 msi 安装。
通过使用 MSI API“MsiInstallProduct”,我可以静默安装产品,但我不知道如何获取此安装的进度数据以及如何取消它。
有人有什么想法吗?
【问题讨论】:
标签: installation windows-installer silent-installer
出于某种原因,我们正在交付具有自己安装 GUI 的产品,这意味着我们将在后台静默运行 msi 安装。
通过使用 MSI API“MsiInstallProduct”,我可以静默安装产品,但我不知道如何获取此安装的进度数据以及如何取消它。
有人有什么想法吗?
【问题讨论】:
标签: installation windows-installer silent-installer
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 运行下载。
相关:
【讨论】:
这是一个示例项目,似乎可以执行您所指的操作: http://www.codeproject.com/KB/cs/msiinterop.aspx
【讨论】:
您需要在 MsiInstallProduct 之前使用 MsiSetExternalUI 或 MsiSetExternalUIRecord 指定外部 UI 处理程序(后者更好,但具有更高的 MSI 版本要求)。对于 Windows 安装程序希望您处理的每条消息,都将调用您指定的函数。这将为您提供数据,并有机会响应告诉它取消。如果您需要 MSI 4.5 或更高版本,您可以使用不需要引导程序的嵌入式外部 UI 处理程序 DLL。
【讨论】: