Python 无法在Windows注册表中的HKEY_CLASSES_根目录下创建项

Python 无法在Windows注册表中的HKEY_CLASSES_根目录下创建项,python,windows,registry,Python,Windows,Registry,我面临一个奇怪的问题,无法在HKEY\U CLASSES\U ROOT下创建密钥 我有以下代码: import win32api import win32con import sys def create_key(access, keyname, perms): if sys.platform == 'win32': try: #print "keyname = %s" % keyname key = win32api.

我面临一个奇怪的问题,无法在
HKEY\U CLASSES\U ROOT
下创建密钥

我有以下代码:

import win32api
import win32con
import sys


def create_key(access, keyname, perms):
    if sys.platform == 'win32':
        try:
            #print "keyname = %s" % keyname
            key = win32api.RegCreateKeyEx(access, keyname, perms, None, 0, None)[0]
            return key
        except Exception, fault:
            print('Error in creating key - %s', fault)

def add_base_key(access, keyname, perms):
    print "in func add_base_key, keyname = %s, perms = %s" %(keyname, perms)
    hkey = create_key(access, keyname, perms)
    print "hkey = %s" % hkey

cls_keyname = ["CLSID\\{8682c35a-98fb-41f3-b65e-693f984caef4}"]

def add_entry():
    try:
        add_base_key(win32con.HKEY_CLASSES_ROOT, cls_keyname[0], win32con.KEY_ALL_ACCESS )

    except Exception, fault:
        print "fault = %s" %fault

if __name__ == "__main__":
    add_entry()
在使用管理员权限从cmd提示符运行此代码时,我得到以下信息:

C:\>python "C:\Users\admin\Desktop\sample.py" in func add_base_key,
keyname = CLSID\{8682c35a-98fb-41f3-b65e-693f984caef4}, perms = 983103
hkey = <PyHKEY:386>
C:\>python“C:\Users\admin\Desktop\sample.py”在func add\u base\u键中,
keyname=CLSID\{8682c35a-98fb-41f3-b65e-693f984caef4},perms=983103
hkey=

但是,当我搜索注册表项时,我无法找到我创建的项。你知道我在这里遗漏了什么吗?

正如@eryksun所指出的,当samDesired参数的值为win32con.KEY\u ALL\u ACCESS | win32con.KEY\u WOW64\u 64KEY时,它会起作用。

可能你正在运行32位Python,CLSID键被重定向到
HKCR\Wow6432Node\CLSID
。要从32位进程写入非重定向项,请将
win32con.key\u WOW64\u 64KEY
添加到
samDesired
参数中。但首先,切勿通过
HKCR
修改注册表。这是
HKLM
HKCU
键的合并视图。在
HKLM\Software\Classes\CLSID
HKCU\Software\Classes\CLSID
中显式创建密钥。因此,我在HKLM和HKCU中为密钥和子密钥添加了条目。但是,我仍然看不到HKCR中的条目。是的,我正在运行32位Python,对我来说,所需参数的值是win32con.KEY\u ALL\u ACCESS。如果HKCR是HKLM和HKCU密钥的合并视图,那么我不应该在HKCR中看到它们吗?它是在
[HKLM | HKCU]\Software\Classes\Wow6432Node\CLSID
中创建的,除非您将
samDesired
传递为
win32con.KEY\u ALL\u ACCESS | win32con.KEY\u WOW64\u 64KEY
,以绕过重定向。合并视图(仅用于读取值)为
HKCR\Wow6432Node\CLSID
。此视图更喜欢
HKCU
而不是
HKLM