2012-05-30 32 views
1

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

只是说明:我知道我可以使用"/qb" param,但是某些软件包的行为不正确,我不想使用它。

+0

刚一说明:我不认为,你是正确的,“/ qb“对于某些软件包的行为与”/ qn“不同。根据我的长期经验,我不知道这是真的。从技术上讲,它们都不使用所谓的用户序列,所以安装行为除了进度条和少量对话框以外都是相同的。事实上,UAC最近出现的行为与从一开始就拥有管理权限的行为有所不同,但这与“/ qb”本身无关。 – Philm

回答

3

你可能要直接使用Windows安装程序API如果要监控进展,

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

这CodeProject上的文章显示了一个示例,而微软拥有约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

+0

谢谢,我会阅读并尝试!我不知道有Windows Installer的API ......很好。 +1为你的知识:) – Marco

+0

CodeProject链接是圣Graal:精彩!谢谢,正是我需要的! – Marco

0

而不是这个

所以有可能“赶上”msiexec的进展,例如更新我的应用程序上的进度条?

你可以有一个正常的progresBar将继续运行,直到任务已经完成 像这样

 myProgressBar.Style = ProgressBarStyle.Marquee; 

Marquee还要检查msdn.microsoft.com

enter image description here

1.Keep检查msiexec是否正在运行

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

3.请保持运行enter image description here

4.如果msiexec完成然后隐藏progresBar

+0

感谢您的回答,但在这种情况下选择一个或者没有任何字幕:我希望我的客户被“通知”真正的进展。 – Marco

+1

好的,但在你的应用程序中,你可以让选框显示'Indeterminate progress',至少他们知道某些东西在背景中正在烹饪,而不是没有显示 – PresleyDias