python - Windows 阻止对 HKLM 进行注册查询;改为返回 HKCU

标签 python windows windows-7 registry registry-virtualization

我正在使用 ActivePython 2.5 读取注册表中 pGina 创建的条目。具体来说,有关计算机上允许哪些 GID 的条目。通过 pGina 编辑时,此信息会针对每台计算机定期更改,因此我希望我的 Python 脚本每次都能够检查这些值。

很简单。以下 Windows 命令将为我获取该信息:

reg query HKLM\Software\pGina\ldapauth\

...除了当我用 Python 运行它时,我得到这个:

>>> import subprocess
>>> command = 'reg query HKLM\Software\pGina\ldapauth'
>>> ldapauth = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE).communicate()[0]
ERROR: The system was unable to find the specified registry key or value.

因此,当我通过 Python 运行“reg query HKLM\Software”时,它会吐出 HK CU\Software 下的键和值列表,而不是 HKLM。

我以管理员身份运行 Python(通过使用 getpass.getuser() 确认),当我从批处理脚本运行相同的命令时,我在 HKLM 下得到了正确的列表。但是,当我从 Python 调用批处理脚本时,返回到 ole' HKCU 结果。

所以,我有点卡住了。有没有人有任何见解?

编辑:如后所述,我正在运行 64 位 Windows 7,并且我尝试了 _winreg 方法,包括 OpenKey 中可选的第 4 个“sam”参数。

最佳答案

使用winreg . (winreg.OpenKeywinreg.Query*)。速度更快,无需考虑运行 shell 命令,它甚至会以 OO 方式返回 BINARY 等棘手的注册表值类型。

#import _winreg as winreg # the 'correct' idiom for importing
from _winreg import *

with OpenKey(HKEY_LOCAL_MACHINE,'Software\pGina\ldapauth') as key:
    ... do something with QueryValue(key[,...])

winreg 可以很好地完成工作,尽管界面非常古怪,因为底层的 Windows 界面是。您可能很想为查找调用编写一个包装器,尤其是。如果像我一样,你编写了一个生成器来获取子键的递归和枚举、与键名的模式匹配、将搜索限制为某些允许的注册表值等。

关于python - Windows 阻止对 HKLM 进行注册查询;改为返回 HKCU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071972/

相关文章:

python - 为什么在尝试读取不存在的 s3 key 时会出现不同的错误

c - Linux和Windows程序有何不同

javascript - 更改 .js 扩展名默认编辑器(win7)

.net - 如何让 Powershell TabExpansion 打印所有可能的补全?

android - Android 上的 OpenCV 使用 Eclipse

VBA异常处理失败?

python - 如何在 python 3.x 中使用字符串创建 if 语句

python - 使用子列表元素的一部分对列表列表进行排序

python - Heroku 在 Virtual Env 上安装 PIL 依赖时出错

windows - 我想创建一个批处理脚本,它将按修改日期的顺序打印文件夹中的所有文件