2012-02-19 7 views
10

मैं _winreg का उपयोग करके एक महत्वपूर्ण मान पूछने के लिए विंडोज रजिस्ट्री (पायथन में) तक पहुंचने का प्रयास कर रहा हूं और मैं इसे काम नहीं कर सकता। निम्नलिखित लाइन रिटर्न एक WindowsError कह रही है कि "सिस्टम निर्दिष्ट फ़ाइल नहीं मिल सकता है":पायथन _winreg woes

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS) 

कोशिश कर के घंटे के बाद, ऐसा लगता है कि अजगर पथ की "माया" भाग से परे नहीं देख सकते हैं (यह की तरह लग रहा "2012 \ ... आदि ..." उप-पथ "अदृश्य" या अस्तित्वहीन नहीं है)। अब मेरे पास रजिस्ट्री संपादक खुला है और मैं गारंटी देता हूं कि एचकेएलएम में ऐसा पथ है। मैं विंडोज 7 64 बिट पर हूं। कोई विचार क्या मैं गलत कर रहा हूँ? यह मुझे पागल कर देता है। धन्यवाद ...

+0

इस समस्या के समाधान के लिए प्रबंधन किया था? –

+0

मुझे ऐसा लगता है। ईमानदारी से मुझे याद नहीं है कि मैं कैसे कर रहा था। शायद मैं किसी भी तरह से समस्या को छोड़ दिया। क्षमा करें मैं और अधिक मदद नहीं कर सकता ... – user1219144

उत्तर

6

क्या आप पाइथन के 64-बिट संस्करण का भी उपयोग कर रहे हैं, या यह 32-बिट पायथन है? (उत्तरार्द्ध अधिक आम है।) यदि आप पाइथन के 32-बिट संस्करण का उपयोग कर रहे हैं, तो _winreg मॉड्यूल डिफ़ॉल्ट रूप से 32-बिट रजिस्ट्री को देखेगा, जबकि regedit आपको 64-बिट एक दिखाएगा। एक अलग दृश्य खोलने के लिए आपको _winreg बताने में सक्षम होना चाहिए; एक्सेस अधिकारों पर _winreg मॉड्यूल दस्तावेज़ देखें, विशेष रूप से subsection on 64-bit specific flags और the MSDN article it references। दुर्भाग्य से ऐसा लगता है कि 32-बिट प्रक्रिया के लिए 64-बिट रजिस्ट्री तक पहुंचने का कोई तरीका नहीं है, लेकिन मुझे कुछ याद आ रहा है।

+0

आपके उत्तर के लिए धन्यवाद। जब मैं जांचता हूं कि मेरे पास कौन सा पायथन संस्करण है (sys.version_info का उपयोग करके) यह कहता है (2, 6, 4, 'अंतिम', 0)। मैं हालांकि 64 बिट या 32 बिट जानकारी नहीं देख सकता। और दूसरी बात यह नहीं है कि मुझे नहीं पता कि "KEY_WOW64_64KEY" भाग का उपयोग कहां करें। मुझे पता है, मैं शायद दयनीय लग रहा हूं लेकिन मुझे मदद चाहिए ... – user1219144

+0

आप 'sys.version_info' में 32-बनाम -64-बिट नहीं देख सकते हैं, लेकिन आप इसे 'sys.version' में देख सकते हैं (यह होगा वहां '32 बिट 'या '64 बिट' कहें।) आप 'platform.architecture()' को भी देख सकते हैं। रजिस्ट्री को अलग-अलग खोलने के लिए, जैसा कि मैंने कहा था कि मुझे विश्वास नहीं है कि आप 32-बिट प्रक्रिया से 64-बिट रजिस्ट्री तक पहुंच सकते हैं जिस तरह से आप 64-बिट प्रक्रिया से एक्सेस कर सकते हैं। हालांकि, मैं गलत हो सकता हूं; मैंने 32-बिट रजिस्ट्री एक्सेस के साथ कभी भी बहुत कुछ नहीं किया है। –

+0

@ थॉमसवाउटर: मैं _Windows 7 64-bit_ और _python 2.7.3 (डिफ़ॉल्ट, 10 अप्रैल 2012, 23:24:47) पर '_winreg' के साथ कुंजी पढ़ने में भी असमर्थ हूं [एमएससी v.1500 64 बिट (AMD64) ] _। मुझे एक ही त्रुटि मिलती है क्योंकि @ user1219144 _system निर्दिष्ट file_ नहीं ढूंढ सकता है। इसका परीक्षण करने के लिए, मैं टेस्टकेस के साथ इस [विंडोज रजिस्ट्री क्लास] (http://is.gd/8DV8KL) का उपयोग कर रहा हूं। व्यवहार मैं देखता हूं: ** पहला ** ठीक है; ** दूसरा ** ठीक है; ** रीबूट ** त्रुटि के बाद। डीबग करने के लिए: 'START C: \ Python27 \ pythonw.exe C: \ Python27 \ Lib \ idlelib \ idle.py' को ** ** बैट ** फ़ाइल में डालकर व्यवस्थापक के रूप में _IDLE_ को चलाने का प्रयास करें, इसे दायाँ क्लिक करके _Run को चुनकर admin_ – TrinitronX

9

आपको 64 बिट एक्सेस कुंजियों में से एक के साथ एक्सेस कुंजी को गठबंधन करने की आवश्यकता है।

_winreg.KEY_WOW64_64KEY इंगित करता है कि 64-बिट विंडोज़ पर एक अनुप्रयोग 64-बिट रजिस्ट्री व्यू पर काम करना चाहिए।

_winreg.KEY_WOW64_32KEY इंगित करता है कि 64-बिट विंडोज़ पर एक अनुप्रयोग 32-बिट रजिस्ट्री व्यू पर काम करना चाहिए।

प्रयास करें:

_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS)) 
+0

धन्यवाद !!! सही काम करता है। – virtualsets

+0

मुझे एक समस्या थी जहां मेरी उप चाबियाँ गिनती नहीं थीं। आपके जैसे KEY_WOW64_64KEY को जोड़ने से मेरा मुद्दा हल हो गया। धन्यवाद। – FernandoZ