查询Win32_Product类会触发msi修复

时间:2013-06-07 12:01:48

标签: wmi-query

MSDN声明Win32_product Class不是查询优化的。该过程还启动对已安装,验证和修复安装的软件包的一致性检查。我尝试使用Select查询查询类并通过删除一些已安装的文件来篡改示例msi软件包,但未触发修复。事件日志显示msi重新配置但没有修复操作。查询类实际上会在已安装的程序损坏的情况下触发修复,如果确实如此,那么我们是否有任何示例来支持此操作?

2 个答案:

答案 0 :(得分:2)

WMI查询太慢了。查询Installer.ProductInfo可以在0.1秒内获得结果,这比我机器上的WMI快200倍。

Dim msi : Set msi = CreateObject("WindowsInstaller.Installer")
On Error Resume Next
Dim version : version = msi.ProductInfo("{ProductCode}", "VersionString")
Dim installed : installed = ( Err.Number = 0 )

答案 1 :(得分:0)

你有源的链接吗?我知道win32_product很慢,因为它不是查询优化的,小查询对我来说大约需要1分钟。如果它对我系统上安装的每个msi进行了修复(371根据与Powershell的“快速”检查),我很肯定需要更长的时间。

该类中有一些方法可以触发修复。我在安装一个特定的应用程序后使用它,其安装时总是神秘地缺少快捷方式。调用重新安装(9)为我解决了这个问题。它在这里记录: Win32_Product Class (Windows)