В настоящее время я пытаюсь использовать python для поиска в реестре с помощью _winreg. Это мой код:Python _winreg folder
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, а затем под ней находятся еще 3 папки под названием «Компоненты, патчи и продукты». Как мне получить _winreg, чтобы просмотреть все эти папки и их следующие папки, чтобы найти все ключи с именем «DisplayName»?
Просмотрели документацию, но не смогли увидеть ничего перечисленного. Может быть, что объяснение не ясно, как я думаю, что это
EDIT
ОК, так что я понял, что не было свертывания в папки так с этим кодом я получаю правильный доступ из папки:
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
Это как он потерял папки или не обращается к ним то же самое путь. Это, вероятно, простое решение, но, глядя на него, я просто не могу понять, что здесь не так.
Ответ должен быть Шифрование. Скорее всего, они зашифрованы. –
Их нет, потому что я могу указать на папку и получить информацию, но она будет искать только один уровень подпапки, а не подпапки подпапок, если это имеет смысл? –
Это потому, что вы всегда получаете доступ к одному уровню ниже того же ключа. попробуйте сделать это рекурсивно. –