2013-02-22 63 views
10

में लेखन पहुंच के साथ विंडोज रजिस्ट्री कैसे खोलूं, मुझे पाइथन 2.7.3 _winreg मॉड्यूल में _winreg.QueryValueEx फ़ंक्शन के साथ विंडोज 7 रजिस्ट्री तक पहुंचने में कुछ समस्याएं आ रही हैं।मैं पाइथन

मैं प्रशासक के रूप में अजगर प्रक्रिया चला रहा हूँ, और बना सकते हैं नई कुंजी और मूल्यों इस तरह:

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

हालांकि, जब मैं फिर से खुल ही कुंजी और करने की कोशिश मूल्य निर्धारित करते हैं, यह मुझे एक 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() 

दिलचस्प है, के रूप में चल प्रशासक, मैं KEY_WRITE या KEY_ALL_ACCESS अधिकारों का उपयोग के साथ खुला नहीं कर सकते हैं:

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

मुझे पता है कि कैसे व्यवस्थापक विशेषाधिकारों के बिना CreateKey दिलचस्पी होगी। – User

+1

@macdonjo: मुझे लगता है कि आप सुरक्षा बाधाओं के कारण HKLM के साथ ऐसा नहीं कर सकते हैं, लेकिन आप HKCU ('HKEY_CURRENT_USER') – TrinitronX

+0

के तहत कुछ कुंजियों को लिखने में सक्षम हो सकते हैं, हाँ, मैं इसके बजाय CURRENT_USER कर रहा हूं। – User

उत्तर

20

मैं ऐसा करके समस्या का समाधान:

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

आपको बहुत बहुत धन्यवाद! यह मुझे थोड़ी देर के लिए परेशान कर रहा था। मैंने पाया कि मैंने इसे [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey) के लिए प्रलेखन में अनदेखा कर दिया था। जिस भाग को मैंने याद किया वह '_winreg.OpenKey (कुंजी, sub_key [, res [, sam]])' ** ... ** 'res एक आरक्षित पूर्णांक है, और शून्य होना चाहिए। डिफ़ॉल्ट शून्य है – TrinitronX