我编写了一个程序,可以从运行它的任何机器中提取各种数据片段,但我在使用其中内置的特定查询时遇到了一些问题。这一行[正确]查询机器上已安装的产品,但运行大约需要 10-15 秒。有没有更好的方法来写这一行?我们的目标是简单地收集名字......它会......慢慢地。
wmicData=subprocess.check_output(['wmic','product','get','name'])
它完成了这项工作,我只是不确定如何让它更快......如果单独使用 Python 就可以做到这一点。
这里有几个使用 Python 来安装软件的示例
import wmi
import win32api
import win32con
# Version 1 WMI
c = wmi.WMI()
for s in c.query('SELECT * from Win32_Product'):
print(s.Name)
# Version 2 Registry
index = 0
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall')
while True:
subkeyname = win32api.RegEnumKey(key, index)
index += 1
subkey = win32api.RegOpenKey(key, subkeyname)
try:
val = win32api.RegQueryValueEx(subkey, 'DisplayName')
if val[0]:
print(val[0])
except:
pass
我将留给您进行适当的错误处理,选择您想要的属性值等
对于注册表版本,对于 32 位安装程序,您必须重复使用
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
,对于用户级安装可能需要使用 HKEY_CURRENT_USER
变体。