Python _winreg горе - PullRequest
       24

Python _winreg горе

10 голосов
/ 19 февраля 2012

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

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

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

Ответы [ 2 ]

10 голосов
/ 29 мая 2013

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

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

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

Попробуйте:

_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS))
6 голосов
/ 19 февраля 2012

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

...