2013-02-22 5 views
10

Mam problemy z dostępem do rejestru systemu Windows 7 przy użyciu funkcji _winreg.QueryValueEx w module Python 2.7.3 _winreg.Jak otworzyć rejestr systemu Windows z dostępem do zapisu w Pythonie

Używam proces Pythona jako Administrator, można tworzyć nowe klucze i wartości tak:

import _winreg as wreg 
key = wreg.CreateKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject") 
# Create new subkey 
wreg.SetValue(key, 'NewSubkey', wreg.REG_SZ, 'testsubkey') 
print wreg.QueryValue(key, 'NewSubKey') 
# prints 'testsubkey' 
# Create new value 
wreg.SetValueEx(key, 'ValueName', 0, wreg.REG_SZ, 'testvalue') 
print wreg.QueryValueEx(key,'ValueName') 
# prints (u'testvalue', 1) 
key.Close() 

Keys in Windows Registry

Jednak, kiedy ponownie otworzyć ten sam klucz i spróbuj ustawić wartość, to wyskakuje mi błąd: Access is denied

key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_SET_VALUE) 
wreg.SetValue(key, 'NewSubkey', wreg.REG_SZ, 'subkey_changed') 
print wreg.QueryValue(key, 'NewSubkey') 
# prints 'subkey_changed' 
wreg.SetValueEx(key, 'ValueName', 0, wreg.REG_SZ, 'value_changed') 

Traceback (most recent call last): 
    File "<pyshell#43>", line 1, in <module> 
    wreg.SetValueEx(key, 'ValueName', 0, wreg.REG_SZ, 'value_changed') 
WindowsError: [Error 5] Access is denied 

print wreg.QueryValueEx(key, 'ValueName') 
# still prints: (u'testvalue', 1) 
key.Close() 

ciekawe, działa jako Administrator, nie mogę otworzyć z KEY_WRITE lub KEY_ALL_ACCESS praw dostępu:

>>> key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_WRITE) 

Traceback (most recent call last): 
    File "<pyshell#47>", line 1, in <module> 
    key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_WRITE) 
WindowsError: [Error 5] Access is denied 
>>> key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_ALL_ACCESS) 

Traceback (most recent call last): 
    File "<pyshell#48>", line 1, in <module> 
    key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",wreg.KEY_ALL_ACCESS) 
WindowsError: [Error 5] Access is denied 
+0

byłbym zainteresowany, aby wiedzieć, jak CreateKey bez uprawnień administratora. – User

+1

@macdonjo: Myślę, że nie możesz tego zrobić z HKLM ze względu na ograniczenia bezpieczeństwa, ale możesz być w stanie napisać do pewnych kluczy pod HKCU ('HKEY_CURRENT_USER') – TrinitronX

+0

Tak, skończyłem zamiast robić CURRENT_USER zamiast tego. – User

Odpowiedz

20

I rozwiązać problem, wykonując:

key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "Software\\TestCompany\\TestProject",0, wreg.KEY_ALL_ACCESS) 
+0

Dziękuję bardzo! Przez jakiś czas mnie to dręczyło. Odkryłem, że przeoczyłem to w dokumentacji dla [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey). Część, którą przegapiłem, to '_winreg.OpenKey (key, sub_key [, res [, sam]])' ** ... ** 'res jest zarezerwowaną liczbą całkowitą i musi wynosić zero. Wartością domyślną jest zero. " – TrinitronX

Powiązane problemy