2013-02-22 17 views
10

Ho problemi ad accedere al registro di Windows 7 con la funzione _winreg.QueryValueEx nel modulo Python 2.7.3 _winreg.Come aprire il registro di Windows con accesso in scrittura in Python

Sono in esecuzione il processo di Python come amministratore, e può creare nuove chiavi e valori in questo modo:

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

Tuttavia, quando ho ri-aperta la stessa chiave e cercare di impostare il valore, mi dà un errore 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() 

è interessante notare che, in esecuzione come amministratore, non posso aprire con KEY_WRITE o KEY_ALL_ACCESS diritti di accesso:

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

Sarei interessato a sapere come CreateKey senza privilegi di amministratore. – User

+1

@macdonjo: Penso che non si possa fare questo con HKLM a causa di vincoli di sicurezza, ma potresti essere in grado di scrivere su determinate chiavi sotto HKCU ('HKEY_CURRENT_USER') – TrinitronX

+0

Sì, alla fine ho fatto CURRENT_USER. – User

risposta

20

ho risolto il problema facendo:

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

Grazie mille! Questo mi aveva infastidito per un po '. Ho scoperto di aver trascurato questo aspetto nella documentazione di [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey). La parte che mi mancava era '_winreg.OpenKey (chiave, sub_key [, res [, sam]])' ** ... ** 'res è un numero intero riservato e deve essere zero. Il valore predefinito è zero – TrinitronX

Problemi correlati