我正在编写一个小应用程序来安装某些产品并以静音模式卸载其他产品
每个产品都有其MSI文件,没有别的,我的应用程序清单表明它应该以管理员权限运行
运行msiexec
并使用适当的参数来完成我的任务(只是一堆代码)并且一切正常。
无论如何,一些软件包需要花费大量时间才能完成,而一些老用户正在询问是否有什么东西仍然在后台运行或者是挂起。
那么有可能“抓住”msiexec
进度,例如更新我的应用程序的进度条吗?听起来很疯狂,但我很确定一些专业安装程序以这种方式运行外部msi包
那么,它有可能吗?我们可以在C#中做些什么,或者这是一项非常艰巨的任务,需要很多我没有的知识?
请注意:我知道我可以使用"/qb"
param,但是有些软件包的行为方式不正确,而且我不想使用它。
答案 0 :(得分:5)
如果要监控进度,可能需要直接使用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
答案 1 :(得分:0)
而不是
那么有可能“抓住”msiexec进度,例如在我的应用上更新进度条吗?
你可以拥有一个正常的progresBar
,它将一直运行直到任务完成
像这样的东西
myProgressBar.Style = ProgressBarStyle.Marquee;
来自Marquee的
1.检查msiexec
是否正在运行
2.启动myProgressBar.Style = ProgressBarStyle.Marquee;
3.保持运行
4.如果msiexec
已完成,则隐藏progresBar