用Python获取所有已安装的Windows程序的'正确'和可靠的方法?

Tha*_*tiK 11 python windows registry wmi win32com

我已经看到了很多在python中在WinXP +上检索已安装程序的方法.什么是正确的最强大的这样的方式?

目前我正在访问HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall并从那里读取每个键以获取列表.(我被告知这不是正确的做事方式)我已经看过使用WMI/Win32com这样做的例子,但是看到了一些注释以及那些可能在某些机器上关闭WMI的实现.这不是一个非常可靠的解决方案.

有没有一种方法可以正确,可靠地获得已安装程序的列表?我见过的所有WMI示例都没有在这台机器上运行(因此我不愿意使用它,我只运行WinFLP;这是一个剥离的XP版本.)

我似乎也发现了我的搜索已经发现的TechNet文章,该文章提供给我的问题上的类似答案:http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e- 8f9f-b215904485b7 请注意,在平台下列出的Vista/7非常明确地说"不"......将无效.所以WMI的交易看起来像是不行......

能够检索已安装的路径也是一个好处,因为现在我的当前代码不会考虑在另一个驱动器或非默认目录中安装的人.

小智 8

您所指的technet脚本在Win 7(使用Python 2.5 32位)下完美运行,我真的不明白为什么它不应该.

实际上,WMI方法的真正弱点是它只列出了通过Windows Installer安装的产品.所以它不会给你完整的清单.许多程序使用不同的安装程序.只需比较(Select*from Win32_Product)和控制面板中显示的结果.因此,除非您确定您的列表中的程序是使用MSI安装的,否则WMI肯定不是答案.

所以它可能不是非常pythonic,但据我所知,最好的方法是使用注册表.这实际上是控制面板的工作方式,因此至少Windows认为它是最强大的方法.