从外部程序管理msi

时间:2009-12-28 11:14:41

标签: windows-installer msinfo32

我们有自定义的setup.exe程序,它以同步方式启动一系列单独的MSI。用于启动msi的方案和命令用途是:

msiexcehandle = CreateProcess("msiexec.exe /i  product.msi /qr")
WaitForSingleObject(msiexechandle, INFINITE)

现在我们要执行以下操作 - 当用户在setup.exe程序中按下“停止”按钮时,我们希望完全停止安装。我们可以控制尚未启动的任何产品msi的安装,但我们没有找到将某些事件发送到已经运行的安装(已经使用CreateProcess启动)的方法。我们希望将setup.exe从setup.exe发送到msiexec.exe创建的进度对话框。

请提供一些技巧来执行此操作。是否可以从命令行调用正在运行的安装回滚?

仅供参考,我们使用Wise创建我们的MSI和VS 2008 MFC以创建我们的setup.exe。

-Kartlee

1 个答案:

答案 0 :(得分:0)

我认为这不可能如你所描述的那样。我看到的两个选项是UI自动化(模拟单击取消按钮),或者与MsiInstallProduct()一起使用的外部UI处理程序,而不是CreateProcess()。

请注意,在任何一种情况下,您都不能立即取消设置或根本不取消设置。虽然您的设置可能不会这样做,但某些设置会在某些位置禁用取消按钮,因为它们知道它们无法完全回滚。