已安装程序列表

2024-06-01 03:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用register和Win32_Product类中的搜索来获取安装在计算机上的程序的列表,但它并没有给出所有的程序,我看到过C++中的程序与控制面板的程序和组件中的结果相同。有没有python的api可以给我同样的结果。 下面是c++https://www.codeproject.com/Articles/6791/How-to-get-a-list-of-installed-applications的代码 我用的是: 导入win32com.客户端在

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("Name: ", objItem.Name)

和whis注册表:

^{pr2}$

Tags: namehttps程序registerapi列表计算机组件
2条回答

稍加改进的版本,无需win32con导入,即可检索软件版本和发布者。感谢Barmak Shemirani的初步回答:)

import winreg

def foo(hive, flag):
    aReg = winreg.ConnectRegistry(None, hive)
    aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
                          0, winreg.KEY_READ | flag)

    count_subkey = winreg.QueryInfoKey(aKey)[0]

    software_list = []

    for i in range(count_subkey):
        software = {}
        try:
            asubkey_name = winreg.EnumKey(aKey, i)
            asubkey = winreg.OpenKey(aKey, asubkey_name)
            software['name'] = winreg.QueryValueEx(asubkey, "DisplayName")[0]

            try:
                software['version'] = winreg.QueryValueEx(asubkey, "DisplayVersion")[0]
            except EnvironmentError:
                software['version'] = 'undefined'
            try:
                software['publisher'] = winreg.QueryValueEx(asubkey, "Publisher")[0]
            except EnvironmentError:
                software['publisher'] = 'undefined'
            software_list.append(software)
        except EnvironmentError:
            continue

    return software_list

software_list = foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_32KEY) + foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_64KEY) + foo(winreg.HKEY_CURRENT_USER, 0)

for software in software_list:
    print('Name=%s, Version=%s, Publisher=%s' % (software['name'], software['version'], software['publisher']))
print('Number of installed apps: %s' % len(software_list))

使用KEY_WOW64_32KEYKEY_WOW64_64KEY检查32位和64位注册表。此外,一些安装程序将使用HKEY_CURRENT_USER,尽管后者很少使用。在

注意,pywin32的QueryValueEx返回一个元组,该元组中的第一个元素包含所需的字符串。QueryInfoKey返回第一个元素为子键总数的元组。在

def foo(hive, flag):
    aReg = winreg.ConnectRegistry(None, hive)
    aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 
                          0, win32con.KEY_READ | flag)

    count_subkey = winreg.QueryInfoKey(aKey)[0]
    for i in range(count_subkey):
        try:
            asubkey_name = winreg.EnumKey(aKey, i)
            asubkey = winreg.OpenKey(aKey, asubkey_name)
            val = winreg.QueryValueEx(asubkey, "DisplayName")[0]
            print(val)
        except EnvironmentError:
            continue

foo(win32con.HKEY_LOCAL_MACHINE, win32con.KEY_WOW64_32KEY)
foo(win32con.HKEY_LOCAL_MACHINE, win32con.KEY_WOW64_64KEY)
foo(win32con.HKEY_CURRENT_USER, 0)

相关问题 更多 >