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