2012-02-19 5 views
10

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

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. Любая идея, что я делаю неправильно? Это сводит меня с ума. Спасибо ...

+0

Удалось решить эту проблему? –

+0

Думаю, что да. Честно говоря, я не могу вспомнить, как я это сделал. Возможно, я как-то обошел проблему. Извините, я не могу больше помочь ... – user1219144

ответ

6

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

+0

Благодарим вас за ответ. Когда я проверяю, какая у меня версия Python (используя sys.version_info), она говорит (2, 6, 4, «final», 0). Однако я не вижу 64-битной или 32-битной информации. И другое: я не знаю, где использовать часть «KEY_WOW64_64KEY». Я знаю, я, наверное, жалкий, но мне нужна помощь ... – user1219144

+0

Вы не можете видеть 32-бит-64-бит в 'sys.version_info', но вы можете увидеть его в' sys.version' (это будет скажем, «32 бит» или «64 бит»). Вы также можете посмотреть на 'platform.architecture()'. Что касается открытия реестра по-разному, как я уже сказал, я не думаю, что вы можете получить доступ к 64-разрядному реестру из 32-битного процесса, как вы можете получить доступ либо из 64-битного процесса. Однако я могу ошибаться; Я никогда не делал многого с 32-битным доступом к реестру. –

+0

@ThomasWouters: Я также не могу читать ключи с '_winreg' на _Windows 7 64-bit_ & _python 2.7.3 (по умолчанию, 10 апреля 2012, 23:24:47) [MSC v.1500 64 бит (AMD64) ] _. Я получаю ту же ошибку, что и @ user1219144 _system не может найти указанный файл_. Чтобы проверить это, я использую этот [класс WindowsRegistry] (http://is.gd/8DV8KL) с тестовыми окнами. Поведение, которое я вижу: ** 1 ** запускается нормально; ** 2nd ** работает нормально; ** После перезагрузки **. Для отладки: попробуйте запустить _IDLE_ в качестве администратора, поставив 'START C: \ Python27 \ pythonw.exe C: \ Python27 \ Lib \ idlelib \ idle.py' в файл **. Bat **, щелкнув правой кнопкой мыши, затем выбрав _Run as administrator_ – TrinitronX

9

Вам необходимо объединить ключ доступа с одним из 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)) 
+0

Спасибо !!! работает отлично. – virtualsets

+0

У меня была проблема, когда мои вспомогательные ключи не были перечислены. Добавление KEY_WOW64_64KEY, как вы сказали, решило мою проблему. Спасибо. – FernandoZ