【发布时间】:2018-11-03 14:50:09
【问题描述】:
我使用寄存器中的搜索和 Win32_Product 类来获取计算机上安装的程序的列表,但它并没有给出所有程序,我见过 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)
还有注册表:
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
【问题讨论】:
-
并非所有应用程序都需要安装,因此未在操作系统中注册,因此无论您采取何种方法,除了扫描之外,您将无法找到所有内容 EXE 文件的整个 HDD。
-
确保同时读取
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall的 32 位和 64 位分支。 Flags 是KEY_WOW64_32KEY显式访问 32 位分支和KEY_WOW64_64KEY显式访问 64 位分支。 -
@zett42 这些键不包含完全相同的东西吗?