系统找不到指定的注册表项

2024-05-04 15:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行这个dos命令:

reg query HKLM\SOFTWARE\Classes\CLSID\{824293FD-32E2-4DAA-BC28-166C140543BE}\InprocServer32 /ve

并成功获得一个值。 在同一个终端中,当我使用python时,如下所示:

cmd = "reg query HKLM\\SOFTWARE\\Classes\\CLSID\\{824293FD-32E2-4DAA-BC28-166C140543BE}\\InprocServer32 /ve"
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output = proc.communicate()[0]

失败,出现以下错误:

ERROR: The system was unable to find the specified registry key or value.

我用的是和管理员打开的同一个终端。 我甚至试着把它放到一个x.bat文件中,并在一个python子进程中调用x.bat……仍然是同样的错误。 注册表项对所有用户具有读取权限,对管理员具有完全控制权。 这是在WindowsServer2008R2和Python2.7上发生的。

另外,我对winreg也没什么好感,所以有什么想法可以通过在python中运行批处理命令来解决这个问题吗?

为了说明这一点:它在dos终端中工作,但在python中失败了!

此外,我还试了另一把钥匙:

reg query HKLM\SOFTWARE\Classes\XML

这一个很管用。我注意到的一件事是,有此问题的密钥已检查并禁用读取权限,而后一个密钥已检查并启用读取权限(可以更改)。


Tags: 命令cmd终端权限vesoftwareprocreg
1条回答
网友
1楼 · 发布于 2024-05-04 15:31:25

我意识到我以前见过这个问题。。。 解决方案:禁用wow64重定向

将reg更改为%Windir%/sysnative/reg.exe

cmd = "%Windir%/sysnative/reg.exe query HKLM\\SOFTWARE\\Classes\\CLSID\\{824293FD-32E2-4DAA-BC28-166C140543BE}\\InprocServer32 /ve"
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output = proc.communicate()[0]

更重要的是,我用winreg做到了:

import _winreg
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Classes\CLSID\{824293FD-32E2-4DAA-BC28-166C140543BE}\InprocServer32', 0, _winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS)
print _winreg.QueryValueEx(key, "")

相关问题 更多 >