我运行这个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
这个有效。我注意到的一件事是,出现此问题的密钥已经检查并禁用了读取权限,而后一个密钥已经检查并启用了读取权限(可以更改)。
答案 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, "")