MsiExec进度捕获

我正在编写一个小应用程序来安装某些产品并以静默模式卸载其他产品。
每个产品都有其MSI文件,没有别的,我的应用程序清单表明它应该以管理员权限运行。
使用适当的参数运行msiexec很容易完成我的任务(只是一堆代码),一切都运行正常。
无论如何,一些软件包需要花费大量时间才能完成,并且在某些旧PC用户询问是否仍然在后台运行某些软件包或者它已挂起。
那么有可能“捕获” msiexec进度,例如更新我的应用程序的进度条吗? 听起来很疯狂,但我很确定一些专业安装程序以这种方式运行外部msi包。
那么,它有可能吗? 我们可以在C#中做些什么,或者这是一项非常艰巨的任务,需要很多我没有的知识?

只是一个注意事项:我知道我可以使用"/qb" param,但有些软件包的行为方式并不正确,我不想使用它。

如果要监视进度,可能必须直接使用Windows Installer API,

http://www.codeproject.com/Articles/5773/Wrapping-the-Windows-Installer-2-0-API

此CodeProject文章显示了一个示例,而Microsoft几乎没有关于MSDN上的函数的信息,

http://msdn.microsoft.com/en-us/library/windows/desktop/aa370384(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa368786(v=vs.85).aspx

而不是这个

那么有可能“捕获”msiexec进度,例如更新我的应用程序的进度条吗?

你可以有一个正常的progresBar ,它会一直运行,直到任务完成这样的事情

  myProgressBar.Style = ProgressBarStyle.Marquee; 

从Marquee也检查msdn.microsoft.com

在此处输入图像描述

1.检查msiexec是否正在运行

2.启动myProgressBar.Style = ProgressBarStyle.Marquee;

3.保持运行 在此处输入图像描述

4.如果msiexec完成,则隐藏progresBar