3

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

msiexec
那么,有可能吗?我们可以在 C# 中做些什么,或者这是一项非常艰巨的任务,需要很多我没有的知识?

请注意:我知道我可以使用"/qb"param,但是某些包的行为方式不正确,我不想使用它。

4

2 回答 2

5

如果您想监控进度,您可能必须直接使用 Windows Installer 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

于 2012-05-30T07:50:20.293 回答
-1

而不是这个

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

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

     myProgressBar.Style = ProgressBarStyle.Marquee;

Marquee还检查msdn.microsoft.com

在此处输入图像描述

1.保持检查是否msiexec正在运行

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

3.继续跑在此处输入图像描述

4.如果msiexec已经完成则隐藏progresBar

于 2012-05-30T07:56:23.943 回答