出于某种原因,我们正在使用我们自己的安装GUI交付产品,这意味着,我们将以静默方式运行msi安装。
通过使用MSI API“MsiInstallProduct”,我可以静默安装产品,但我不知道如何获取此安装的进度数据以及如何取消它。
任何人都有一些想法吗?
答案 0 :(得分:7)
2018年6月更新:虽然下面显示的工具不再可供下载,但我是通过Wayback机器找到的。我认为链接到它是正常和合法的,因为该工具是免费软件。更新了以下链接。
更新:很遗憾,Wise的这个工具不再可以下载了。我不确定是否可以分发它。它似乎是作为其主要Wise Package Studio套件的一部分分发的免费工具,但我不认为它是开源的。我希望他们将其作为开源工具发布。
Wise包装产品已因许多legal issues停产。
我相信你可以通过MSI API获得进展,但如果我是你,我会在通过 msiexec.exe 调用安装后从MSI本身显示进度条。
MSI支持多种不同的安装级别(完整,完全静默,基本GUI,简化的GUI等...)。在你的情况下,听起来你想要一个基本的用户界面。这会产生一个进度条,您可以在其中隐藏取消按钮,并可选择显示完成模式对话框:
使用进度条静默安装,没有取消按钮,最后没有模态对话框:
msiexec.exe /I "Test.msi" /QB-!
为避免必须手动构建这些愚蠢的msiexec命令行,请使用Wise中的 msi命令行构建器工具:http://www2.wise.com/filelib/WICLB.exe(从Wayback计算机重新启动)
为安全起见,请按virustotal.com运行下载。
<强> 相关 强>:
答案 1 :(得分:5)
以下示例项目似乎与您所指的相同: http://www.codeproject.com/KB/cs/msiinterop.aspx
答案 2 :(得分:3)
您需要在MsiInstallProduct之前使用MsiSetExternalUI或MsiSetExternalUIRecord指定外部UI处理程序(后者更好,但具有更高的MSI版本要求)。将为Windows Installer要求您处理的每条消息调用您指定的功能。这将为您提供数据,并有机会回复告诉它取消。如果需要MSI 4.5或更高版本,则可以使用嵌入式外部UI处理程序DLL,它不需要引导程序。