Python _winreg бежит

Я пытаюсь получить доступ к реестру Windows (в Python), чтобы запросить значение ключа, используя _winreg, и я не могу заставить его работать. Следующая строка возвращает сообщение WindowsError о том, что "система не может найти указанный файл":

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS)

По прошествии нескольких часов кажется, что Python не может видеть за пределами "майя" часть пути (похоже, что подпункт "2012 \... и т.д." является "невидимым" или несуществующим). Теперь у меня открыт редактор реестра, и я гарантирую, что в HKLM есть такой путь. Я нахожусь на Windows 7 64bit. Любая идея, что я делаю неправильно? Это сводит меня с ума. Спасибо...

Ответ 1

Вам нужно объединить ключ доступа с одним из 64-битных ключей доступа.

_winreg.KEY_WOW64_64KEY   Указывает, что приложение в 64-разрядной Windows должно работать в 64-битном представлении реестра.

_winreg.KEY_WOW64_32KEY   Указывает, что приложение в 64-разрядной Windows должно работать в 32-битном представлении реестра.

Try:

_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS))

Ответ 2

Вы также используете 64-битную версию Python, или это 32-разрядный Python? (Последнее является более распространенным.) Если вы используете 32-битную версию Python, то модуль _winreg будет видеть 32-битный реестр по умолчанию, в то время как regedit покажет вам 64-битную версию. Вы должны быть в состоянии сказать _winreg открыть другое представление; см. документы модуля _winreg о правах доступа, в частности подразделение для 64-битных конкретных флагов и ссылка на статью MSDN. К сожалению, это не похоже на способ 32-разрядного процесса доступа к 64-битовому реестру, но мне может быть что-то не хватает.