系统无法找到指定的注册表项

时间:2014-11-06 00:19:34

标签: 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]

它因此错误而失败:

  
    
      

错误:系统无法找到指定的注册表项或值。

    
  

我正在使用以管理员身份打开的同一个终端。 我甚至尝试将它放在x.bat文件中并在python子进程中调用x.bat ...仍然是同样的错误。 reg键具有所有用户的读权限和admin的完全控制权。 这是在带有python 2.7的Windows Server 2008R2上发生的。

此外我对_winreg没有运气,所以有任何想法如何通过在python中运行批处理命令来解决这个问题?

说清楚:它在dos终端中工作,但在python中失败!

此外,我尝试了另一个关键:

reg query HKLM\SOFTWARE\Classes\XML

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

1 个答案:

答案 0 :(得分:3)

我意识到我之前见过这个问题...... 解决方案:禁用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, "")