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()
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
byłbym zainteresowany, aby wiedzieć, jak CreateKey bez uprawnień administratora. – User
@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
Tak, skończyłem zamiast robić CURRENT_USER zamiast tego. – User