2013-02-22 28 views
10

'daki yazma erişimi ile nasıl açabilirim Windows 7 Kayıt Defteri'ne Python 2.7.3 _winreg modülündeki _winreg.QueryValueEx işlevine erişirken bazı sorunlar yaşıyorum.Windows Kayıt Defteri'ni Python

Ben Yönetici olarak piton sürecini çalıştırıyorum ve oluşturabileceğiniz yeni anahtarlar ve değerler böyle:

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

Ancak, yeniden açmak zaman aynı anahtar ve deneyin olarak çalışan İlginçtir

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

: değeri, bana bir Access is denied hata veriyor Yönetici, ben KEY_WRITE veya KEY_ALL_ACCESS erişim hakları ile açamıyor:

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

Ben yönetici ayrıcalıklarına sahip olmayan CreateKey nasıl bilmek ilgi duyarım. – User

+1

@macdonjo: Güvenlik kısıtlamaları nedeniyle HKLM ile bunu yapamazsınız, ancak HKCU ('HKEY_CURRENT_USER') – TrinitronX

+0

altında belirli tuşlara yazabilirsiniz Evet, bunun yerine CURRENT_USER yapıyordum. – User

cevap

20

Ben yaparak sorunu çözdü:

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

Çok teşekkür ederim! Bu bir süredir beni rahatsız ediyordu. Bunu [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey) belgesinde gözden kaçırdığımı fark ettim. Kaybettiğim kısım '_winreg.OpenKey (key, sub_key [, res [, sam]])' ** ... ** 'dır, rezerve edilmiş bir tamsayıdır ve sıfır olmalıdır. Varsayılan sıfırdır. – TrinitronX

İlgili konular