簡體   English   中英

找不到 Windows 注冊表項,但它在 regedit 中可見

[英]Can't find Windows registry entry, but it's visible in regedit

我正在搜索特定發布者的卸載字符串以自動卸載某些軟件。 我可以在 regedit 中看到該條目。 我正在搜索 64 位和 32 位注冊表視圖,可以在我的代碼中看到。 我可以在“添加或刪除程序”中看到該應用程序。 該軟件由環境研究系統研究所,Inc. 發布。我搜索了所有內容,但無法弄清楚為什么我的代碼找不到此密鑰。 任何幫助,將不勝感激。 在函數getUninstallers中,第一個 try 塊中有一個 if 語句被注釋掉,該語句具有我試圖查找的實際鍵名。 在代碼下方,我包含了 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 圖片

import winreg
aKeyName = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"

def getUninstallers(keyName, bitView):
    if ( bitView == 32 ):
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyName, 0,
         access=(winreg.KEY_WOW64_32KEY | winreg.KEY_READ))
    elif ( bitView == 64 ):
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyName, 0,
         access=(winreg.KEY_WOW64_64KEY | winreg.KEY_READ))
    subKeyIndex = 0
    subkeys = list()
    while True:
        try:
            subKeyName = winreg.EnumKey(key,subKeyIndex)
            if( bitView == 32 ):
                subKey = winreg.OpenKey(key, subKeyName, 0,
                  access=(winreg.KEY_WOW64_32KEY | winreg.KEY_READ))
            elif( bitView == 64 ):
                subKey = winreg.OpenKey(key, subKeyName, 0,
                  access=(winreg.KEY_WOW64_64KEY | winreg.KEY_READ))
            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 as e:#[WinError 259] No more data is available
                    # These errors are supposed to happen, see winreg documentation
                    # at docs.python.org/3/library/winreg.html
                    if str(e).count('WinError 259') is 0:
                        print("OSError 1: " + str(e) + "\r" + subKeyName)
                    break
            if(len(subKeyList) > 0):
                subkeys.append(subKeyList)
            subKeyIndex += 1
        except OSError as e:#[WinError 259] No more data is available
            # These errors are supposed to happen, see winreg documentation
            # at docs.python.org/3/library/winreg.html
            if str(e).count('WinError 259') is 0:
                print("OSError 2: " + str(e) + "\r" + subKeyName)
            break
    return subkeys

def getUninstallersByPublisher(publisher):
    theKeys = [getUninstallers(aKeyName, 32), getUninstallers(aKeyName, 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

somePublisher = "Microsoft Corporation"
print(getUninstallersByPublisher(somePublisher))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM