2013-02-22 11 views
10

Ich habe einige Probleme beim Zugriff auf die Windows 7-Registrierung mit der _winreg.QueryValueEx-Funktion im Python 2.7.3 _winreg-Modul.Wie öffne ich die Windows-Registrierung mit Schreibzugriff in Python

Ich verwende den Python-Prozess als Administrator und kann neue Schlüssel und Werte wie folgt erstellen:

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

Allerdings, wenn ich wieder zu öffnen, den gleichen Schlüssel und versuche, setzen sie den Wert, gibt es mir einen Access is denied Fehler:

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() 

Interessanterweise weise~~POS=HEADCOMP läuft als Administrator, kann ich nicht mit KEY_WRITE oder KEY_ALL_ACCESS Zugriffsrechte öffnen:

>>> 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

Ich würde gerne wissen, wie man ohne Admin-Rechte auf CreateKey. – User

+1

@macdonjo: Ich denke, das kann man nicht mit HKLM machen, da Sicherheitseinschränkungen existieren, aber man kann unter HKCU ('HKEY_CURRENT_USER') auch auf bestimmte Schlüssel schreiben – TrinitronX

+0

Ja, ich habe stattdessen CURRENT_USER gemacht. – User

Antwort

20

Ich löste das Problem, indem Sie:

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

Vielen Dank! Das hat mich eine Weile gestört. Ich habe festgestellt, dass ich dies in der Dokumentation für [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey) übersehen hatte. Der Teil, den ich verpasste, war '_winreg.OpenKey (key, sub_key [, res [, sam]])' ** ... ** 'res ist eine reservierte ganze Zahl und muss Null sein. Der Standardwert ist Null – TrinitronX