当我说"已安装的应用程序"时,我基本上是指在[控制面板] - > [添加/删除程序]中可见的任何应用程序.
我更喜欢用Python做,但C或C++也没关系.
如果您指的是控制面板中"添加\删除程序"中显示的已安装应用程序列表,则可以在注册表项中找到它:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
有关如何构建注册表树的更多信息,请访问此处.
您需要在python中使用winreg API来读取注册表中的值.
查看Win32_Product WMI(Windows Management Instrumentation)类.这是一个在Python中使用WMI 的教程.
控制面板使用Win32 COM api,这是官方方法(请参阅Google Groups,Win32)
从不依赖注册表.
Microsoft脚本存储库有一个脚本,用于列出所有已安装的软件.
import win32com.client strComputer = "." objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") colItems = objSWbemServices.ExecQuery("Select * from Win32_Product") for objItem in colItems: print "Caption: ", objItem.Caption print "Description: ", objItem.Description print "Identifying Number: ", objItem.IdentifyingNumber print "Install Date: ", objItem.InstallDate print "Install Date 2: ", objItem.InstallDate2 print "Install Location: ", objItem.InstallLocation print "Install State: ", objItem.InstallState print "Name: ", objItem.Name print "Package Cache: ", objItem.PackageCache print "SKU Number: ", objItem.SKUNumber print "Vendor: ", objItem.Vendor print "Version: ", objItem.Version
我见过的最好的基于注册表的实现是Chris Wright(chris128)编写的一种,发布在http://www.vbforums.com/showthread.php?t=598355上。它使用多个注册表项,并且比当前在此处发布的答案要复杂得多。它似乎产生与“添加/删除程序”应用程序相同的结果,并且像ARP应用程序一样,它还提供了包含更新的选项。
尽管它是在VB.NET中实现的,但应该容易转换为其他.NET语言,例如C#或IronPython。我想如果需要的话,首先转换为IronPython应该可以很容易地移植到常规Python,但是我自己将其转换为C#,然后进行了一些清理。
只需指出一个小错误:GetUserInstallerKeyPrograms()不会将用户程序的版本添加到列表中,即使将其解压缩也是如此。这很容易解决。