Windows, предотвращающая запрос reg на HKLM; вместо этого возвращает HKCU - PullRequest
3 голосов
/ 16 августа 2011

Я использую 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.

Поэтому, когда я запускаю 'reg query HKLM \ Software' через Python, он выдает список ключей и значений в разделе HK CU \ Software, а не HKLM.

Я использую Python от имени администратора (подтверждено с помощью getpass.getuser ()), и когда я запускаю ту же команду из пакетного сценария, я получаю правильный список в HKLM. Однако когда я вызываю пакетный скрипт из Python, возвращаюсь к результатам ole 'HKCU.

Итак, я немного застрял. У кого-нибудь есть понимание?

РЕДАКТИРОВАТЬ: Как подробно описано ниже, я использую 64-битную Windows 7 и пробовал методы _winreg, включая необязательный 4-й аргумент «sam» в OpenKey.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Используйте winreg . (winreg.OpenKey и winreg.Query*). Намного быстрее, не нужно тратить время на запуск команды оболочки, и она даже вернет вам хитрые типы значений реестра, такие как 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 был. Вы можете написать обертку для вызова lookup, esp. если, как и я, вы пишете генератор для получения рекурсии и перечисления подразделов, сопоставления с шаблоном имен ключей, ограничения поиска определенными допустимыми значениями реестра и т. д. и т. д.

0 голосов
/ 19 августа 2011

Так что я до сих пор не нашел решения основной причины в моем случае.Я могу, однако, обойти это.Сценарий, запускаемый SYSTEM при каждом входе в систему, теперь экспортирует ключ (-ы) в текстовый файл, который может быть легко проанализирован.

...