这是此的后续question.
我使用这个稍微修改过的脚本来枚举所有已安装的 MSI 包:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\" & _
strComputer & _
"\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("SELECT * FROM Win32_Product")
If colSoftware.Count > 0 Then
For Each objSoftware in colSoftware
WScript.Echo objSoftware.Caption & vbtab & _
objSoftware.Version
Next
Else
WScript.Echo "Cannot retrieve software from this computer."
End If
然而,令人惊讶的是其糟糕的表现。枚举 XP 机器上已安装的 34 个 MSI 软件包需要 3 到 5 分钟!
相比之下,旁边的 Linux 机器需要 7 秒才能枚举 1400+ RPM...sigh
这有什么线索吗?
极其缓慢是枚举 Win32_Products 的一个已知/常见问题
如果您需要替代解决方案,请考虑使用“卸载”注册表项构建您自己的产品列表(如问题答案之一所建议)原问题你提到)。
枚举卸载的一些一般参考:
- TechNet VBScript 示例:列出已安装的软件
- 微软知识库:如何枚举计算机上可以卸载的软件产品
并做到这一点remotely,使用WMI注册表类,标准监管协议。
TechNet 甚至方便地提供了一个使用 StdRegProv 来完成您想要的事情的简单示例:如何列出给定计算机上所有已安装的应用程序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)