Я ищу строку удаления для определенного издателя, чтобы автоматизировать удаление некоторого программного обеспечения.Я вижу запись в regedit.Я ищу как 64-битные, так и 32-битные представления реестра, как видно из моего кода.Я вижу приложение в разделе «Установка и удаление программ».Программное обеспечение публикуется Институтом исследований окружающей среды, Inc. Я искал все и не могу понять, почему я не могу найти этот ключ с моим кодом.Любая помощь будет оценена.В функции getUninstallers
есть оператор if, закомментированный в первом блоке try, который имеет фактическое имя ключа, которое я пытаюсь найти.Ниже кода я включил снимок экрана regedit с видимым ключом.
import winreg
aKeyName = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
bKeyName = "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
def getUninstallers(keyName, bitView):
if ( bitView == 32 ):
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyName, 0,
(winreg.KEY_WOW64_32KEY + winreg.KEY_READ))
elif ( bitView == 64 ):
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyName, 0,
(winreg.KEY_WOW64_64KEY + winreg.KEY_READ))
subKeyIndex = 0
subkeys = list()
while True:
try:
subKeyName = winreg.EnumKey(key,subKeyIndex)
#if(subKeyName.count(r'{D43E583A-A698-4227-8F83-3084172F12F0}') > 0):
# print(subKeyName)
subKey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyName +
"\\" + subKeyName)
valueIndex = 0
subKeyList = list()
while True:
try:
aValue = winreg.EnumValue(subKey,valueIndex)
if(aValue[0] == 'Publisher' or
aValue[0] == 'UninstallString'):
subKeyList.append(aValue)
valueIndex+=1
except OSError:#[WinError 259] No more data is available
#These errors are supposed to happen, see winreg
#documentation at docs.python.org/3/library/winreg.html
break
if(len(subKeyList) > 0):
subkeys.append(subKeyList)
subKeyIndex += 1
except OSError:#[WinError 259] No more data is available
#These errors are supposed to happen, see winreg documentation
#at docs.python.org/3/library/winreg.html
break
return subkeys
def getUninstallersByPublisher(publisher):
theKeys = [getUninstallers(aKeyName, 32),
getUninstallers(bKeyName, 32),
getUninstallers(aKeyName, 64),
getUninstallers(bKeyName, 64)]
uninstallers = list()
for aKey in theKeys:
for subKey in aKey:
for aValue in subKey:
for aString in aValue:
if(str(aString).count(publisher) > 0):
print("Found key for publisher: " + publisher)
for someValue in subKey:
for someString in someValue:
if(str(someString).count("Uninstall") > 0):
try:
print("Found UninstallString: " +
someValue[1])
uninstallers.append(someValue[1])
except Exception as e:
print("exception: " + str(e))
# Delete duplicates in list
uninstallers = list(set(uninstallers))
return uninstallers
print(getUninstallersByPublisher(
"Environmental Systems Research Institute, Inc."))
Изображение regedit с видимым ключом