已安装程序列表
List of installed programs
我在注册表中使用搜索和Win32_Product class来获取计算机上安装的程序列表,但它没有给出所有程序,我见过C ++ 中的程序,其结果与控制面板的程序和组件中的结果相同。 python 是否有任何 api 可以给我相同的结果。
这是 c++ https://www.codeproject.com/Articles/6791/How-to-get-a-list-of-installed-applications 的代码
这就是我使用的:
导入 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("Name: ", objItem.Name)
whis 注册表:
aReg = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for i in range(1024):
try:
asubkey_name = EnumKey(aKey, i)
asubkey = OpenKey(aKey, asubkey_name)
val = str(QueryValueEx(asubkey, "DisplayName"))
b = "!@#$,01'"
for char in b:
val = val.replace(char, "")
r = len(val)
val = str(val[1:r - 2])
val2 = str(QueryValueEx(asubkey, "DisplayIcon"))
if s.lower() in val.lower():
r = len(val2)
val2 = str(val2[2:r - 5])
# print(val2)
subprocess.Popen(val2)
break
# print(val, val2)
except EnvironmentError:
continue
使用 KEY_WOW64_32KEY
和 KEY_WOW64_64KEY
检查 32 位和 64 位注册表。此外,有些安装程序会使用HKEY_CURRENT_USER
,尽管后者很少使用。
注意,pywin32 的 QueryValueEx
returns 一个元组,该元组中的第一个元素包含所需的字符串。 QueryInfoKey
returns 一个元组,其第一个元素是子键的总数。
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)
略微改进的版本无需 win32con 导入即可运行并检索软件版本和发布者。感谢 Barmak Shemirani 的初步回答:)
[编辑]
免责声明:此 post 中的代码已过时。
我已经将该代码发布为 python 包。
使用 pip install windows_tools.installed_software
安装
用法:
from windows_tools.installed_software import get_installed_software
for software in get_installed_software():
print(software['name'], software['version'], software['publisher'])
[/编辑]
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))
我在注册表中使用搜索和Win32_Product class来获取计算机上安装的程序列表,但它没有给出所有程序,我见过C ++ 中的程序,其结果与控制面板的程序和组件中的结果相同。 python 是否有任何 api 可以给我相同的结果。 这是 c++ https://www.codeproject.com/Articles/6791/How-to-get-a-list-of-installed-applications 的代码 这就是我使用的: 导入 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("Name: ", objItem.Name)
whis 注册表:
aReg = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for i in range(1024):
try:
asubkey_name = EnumKey(aKey, i)
asubkey = OpenKey(aKey, asubkey_name)
val = str(QueryValueEx(asubkey, "DisplayName"))
b = "!@#$,01'"
for char in b:
val = val.replace(char, "")
r = len(val)
val = str(val[1:r - 2])
val2 = str(QueryValueEx(asubkey, "DisplayIcon"))
if s.lower() in val.lower():
r = len(val2)
val2 = str(val2[2:r - 5])
# print(val2)
subprocess.Popen(val2)
break
# print(val, val2)
except EnvironmentError:
continue
使用 KEY_WOW64_32KEY
和 KEY_WOW64_64KEY
检查 32 位和 64 位注册表。此外,有些安装程序会使用HKEY_CURRENT_USER
,尽管后者很少使用。
注意,pywin32 的 QueryValueEx
returns 一个元组,该元组中的第一个元素包含所需的字符串。 QueryInfoKey
returns 一个元组,其第一个元素是子键的总数。
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)
略微改进的版本无需 win32con 导入即可运行并检索软件版本和发布者。感谢 Barmak Shemirani 的初步回答:)
[编辑]
免责声明:此 post 中的代码已过时。
我已经将该代码发布为 python 包。
使用 pip install windows_tools.installed_software
用法:
from windows_tools.installed_software import get_installed_software
for software in get_installed_software():
print(software['name'], software['version'], software['publisher'])
[/编辑]
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))