2013-04-11 3 views
0

Я чувствую, что я беру сумасшедшие таблетки. Поэтому для обеспечения безопасности на api на работе, которую я использую, мне нужно прочитать 2 вещи из реестра, и затем я перехожу к пеной. Проблема заключается в чтении значений реестра. Независимо от того, что я делаю, я получаю «Error2, что система не может найти указанный файл». Я знаю, что файл реестра есть, но он не позволит мне прочитать его. Я пробовал код ниже на двух разных серверах r2 2008 года. В одном окне окна 7 я могу читать значения ... но только на одной машине. Ниже приведен код, с текущим каталогом мне нужно изменить (чтобы защитить анонимность)Прочитайте значение реестра с проблемами python

from _winreg import * 

key = OpenKey(HKEY_LOCAL_MACHINE, r"Software\a\b", 0, KEY_ALL_ACCESS) 
devguid = QueryValueEx(key, "DeviceID") 
devid = QueryValueEx(key, "DeviceGUID") 
devnm = socket.gethostname() 

Если изменить каталог на что-то другое, чем \ а \ б, она отлично работает. Я проверил, что разрешения на эти каталоги являются такими же, как и каталоги, которые я могу прочитать.

Кроме того, я могу запустить следующую команду CMD и получить выход мне нужно: рег запрос HKLM \ Software \ а \ Ь/v DeviceGUID Но когда я запускаю его из питона сценария, он говорит, что не может найти файл указано.

import os 
cmd = "reg query HKEY_LOCAL_MACHINE\software\a\b /v DeviceGUID" 
a = os.system(cmd) 
print a 

Запуск моего сценария как администратора или ничего не помогает. По какой-то причине python не может попробовать и готовый реестр.

+0

Ваш второй не будет работать, потому что вы не избежали '\\' – Serdalis

ответ

0

Прежде всего, вам нужно убедиться, что ваши обратные косые черты соответствующим образом экранированы или используют необработанные строки в соответствии с первым примером кода. Я собираюсь предположить, что вы это сделали.

Наиболее вероятным объяснением является то, что вы используете 32-битный Python для 64-разрядной системы. И поэтому они подчиняются редиректору реестра, обслуживающему 32-битное представление реестра.

Либо использовать 64-битный Python, либо специально открыть их ключ с 64-битным представлением. Сделайте последнее, указав флаг KEY_WOW64_64KEY.

Смежные вопросы