我目前正在尝试使用 python 使用 _winreg 搜索注册表项。这是我的代码:
from _winreg import *
import getpass
compName = raw_input("What is the name of the PC you wish to get a list of?: ")
currentUser = getpass.getuser()
filePath = "C:\\Users\\" + currentUser + "\\Desktop\\" + compName + "_Install_Programs.txt"
aReg = ConnectRegistry(compName,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData")
file = open(filePath, "w")
for i in range(1024):
try:
asubkey_name=EnumKey(aKey,i)
asubkey=OpenKey(aKey,asubkey_name)
val=QueryValueEx(asubkey, "DisplayName")
val_disp = val[0]
val_str = val_disp.encode('ascii', 'ignore')
if "KB" not in val_str:
file.write(val_str)
file.write("\n")
except EnvironmentError:
pass
file.close()
但是,它不会在那里搜索文件夹的任何子文件夹。例如,它包含一个名为 S-1-5-18 的文件夹,然后在其下方是另外三个名为 Components、Patches 和 Products 的文件夹。如何让 _winreg 遍历所有这些文件夹及其以下文件夹以查找具有“DisplayName”名称值的所有键?
查看了文档,但没有看到列出的任何内容。可能是解释没有我想的那么清楚
编辑
好的,所以我意识到我没有深入到文件夹,所以使用这段代码我可以正确访问文件夹:
for i in range(1024):
try:
asubkey_name=EnumKey(aKey,i)
asubkey=OpenKey(aKey,asubkey_name)
for j in range(1024):
asubkey_name2=EnumKey(asubkey,j)
if asubkey_name2 == "Products":
asubkey2 = OpenKey(asubkey, asubkey_name2)
for k in range(1024):
asubkey_name3=EnumKey(asubkey2, k)
asubkey3=OpenKey(asubkey2, asubkey_name3)
print asubkey3
for l in range(1024):
asubkey_name4=EnumKey(asubkey3, l)
print asubkey_name4
asubkey4 = OpenKey(asubkey3, asubkey_name4)
except EnvironmentError:
pass
我的输出显示如下:
<PyHKEY:0x000001E8>
Features
<PyHKEY:0x000001F0>
InstallProperties
<PyHKEY:0x000001F4>
Patches
<PyHKEY:0x000001EC>
Usage
<PyHKEY:0x000001D8>
<PyHKEY:0x000001E4>
Features
<PyHKEY:0x000001EC>
InstallProperties
<PyHKEY:0x000001F0>
Patches
<PyHKEY:0x000001E8>
Usage
<PyHKEY:0x000001D8>
所以我知道它已经到达那些文件夹。但是当我添加到代码中搜索“DisplayName”时,如下所示:
for i in range(1024):
try:
asubkey_name=EnumKey(aKey,i)
asubkey=OpenKey(aKey,asubkey_name)
for j in range(1024):
asubkey_name2=EnumKey(asubkey,j)
if asubkey_name2 == "Products":
asubkey2 = OpenKey(asubkey, asubkey_name2)
for k in range(1024):
asubkey_name3=EnumKey(asubkey2, k)
asubkey3=OpenKey(asubkey2, asubkey_name3)
print asubkey3
for l in range(1024):
asubkey_name4=EnumKey(asubkey3, l)
print asubkey_name4
asubkey4 = OpenKey(asubkey3, asubkey_name4)
val=QueryValueEx(asubkey4, "DisplayName")
print val
val_disp = val[0]
val_str = val_disp.encode('ascii', 'ignore')
file.write(val_str)
file.write("\n")
except EnvironmentError:
pass
这是我的输出:
<PyHKEY:0x000001E8>
Features
<PyHKEY:0x000001E4>
Features
就像它丢失了文件夹或没有以相同的方式访问它们。这可能是一个简单的解决方案,但看着它,我就是看不出这里有什么问题