2013-02-22 18 views
10

Tôi đang gặp một số sự cố khi truy cập Windows 7 Registry bằng chức năng _winreg.QueryValueEx trong mô-đun Python 2.7.3 _winreg.Làm cách nào để Mở Windows Registry có quyền ghi trong Python

Tôi đang chạy quá trình python như quản trị, và có thể tạo phím mới và giá trị như thế này:

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

Tuy nhiên, khi tôi mở lại cùng quan trọng và cố gắng đặt giá trị, nó mang lại cho tôi một lỗi 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() 

Điều thú vị là chạy quản trị, tôi không thể mở ra với KEY_WRITE hoặc KEY_ALL_ACCESS quyền truy cập:

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

Tôi muốn được quan tâm để biết làm thế nào để CreateKey mà không cần quyền admin. – User

+1

@macdonjo: Tôi nghĩ bạn không thể làm điều này với HKLM do các ràng buộc về bảo mật, nhưng bạn có thể ghi vào một số khóa nhất định theo HKCU ('HKEY_CURRENT_USER') – TrinitronX

+0

Vâng, thay vào đó tôi đã thực hiện CURRENT_USER. – User

Trả lời

20

tôi giải quyết vấn đề bằng cách thực hiện:

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

Cảm ơn bạn rất nhiều! Điều này đã làm tôi thất vọng một thời gian. Tôi thấy rằng tôi đã bỏ qua điều này trong tài liệu cho [_winreg.OpenKey()] (http://docs.python.org/2/library/_winreg.html#_winreg.OpenKey). Phần tôi bỏ qua là '_winreg.OpenKey (khóa, sub_key [, res [, sam]])' ** ... ** 'res là số nguyên được đặt trước và phải bằng 0. Giá trị mặc định bằng không. – TrinitronX

Các vấn đề liên quan