Comment puis-je Ouvrir de Registre de Windows avec accès en écriture en Python

Je vais avoir quelques problèmes d'accès à la Windows 7 de Registre avec le _winreg.QueryValueEx fonction en Python 2.7.3 _winreg module.

Je suis en cours d'exécution python processus Administrateur, et peut créer de nouvelles clés et les valeurs comme ceci:

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

Comment puis-je Ouvrir de Registre de Windows avec accès en écriture en Python

Cependant, lorsque j'ai ré-ouvert la même clé et essayer de définir la valeur, il me donne une Access is denied erreur:

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

Il est intéressant de noter, de fonctionner comme Administrateur, je ne peux pas ouvrir avec KEY_WRITE ou KEY_ALL_ACCESS droits d'accès:

>>> 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
Je serais intéressé de savoir comment CreateKey sans privilèges d'administrateur.
Je pense que vous ne pouvez pas faire cela avec HKLM en raison de contraintes de sécurité, mais vous pouvez être en mesure d'écrire sur certaines touches sous HKCU (HKEY_CURRENT_USER)
Ouais, j'ai fini par faire CURRENT_USER à la place.

OriginalL'auteur TrinitronX | 2013-02-22