2008-10-31 4 views
25

मैं निम्नलिखित कॉल कर रहा था:Vista 64bit पर RegOpenKeyEx() त्रुटि कोड 2 क्यों लौटा रहा है?

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key); 

(सी ++, विजुअल स्टूडियो 5, विस्टा 64 बिट)।

यह त्रुटि कोड 2 ("फ़ाइल नहीं मिली") में विफल रहा है, भले ही "regedit" दिखाता है कि कुंजी मौजूद है। यह कोड हमेशा 32 बिट एक्सपी पर काम करता है। यह स्पष्ट रूप से वहां होने पर "फ़ाइल नहीं मिली" क्यों है?

उत्तर

51

मुझे पता चला कि मैं ध्वज का उपयोग कर अपनी समस्या का समाधान कर सकता:, KEY_WOW64_64KEY में के रूप में:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key); 

संपूर्ण विवरण: 32-bit and 64-bit Application Data in the Registry

20

एक Windows 64-बिट सिस्टम पर रजिस्ट्री वास्तव में बांटा गया है दो भागों में। एक खंड 64-बिट प्रक्रियाओं द्वारा उपयोग किया जाता है, और 32-बिट प्रक्रियाओं द्वारा एक भाग का उपयोग किया जाता है।

उदाहरण के लिए, यदि 32-बिट एप्लिकेशन प्रोग्रामिंग रूप से जो भी मानता है उसे एचकेएलएम \ सॉफ़्टवेयर \ कंपनी \ एप्लिकेशन है, तो यह वास्तव में WoW64-layer द्वारा HKLM \ सॉफ़्टवेयर \ Wow6432Node \ Company \ Application पर रीडायरेक्ट किया गया है।

तो जब आप अपना 32-बिट एप्लिकेशन चलाते हैं और RegOpenKeyEx को कॉल करते हैं तो यह वास्तव में Wow6432Node \ फ़ोल्डर के खिलाफ काम कर रहा है, न कि नियमित \ सॉफ़्टवेयर नोड।

+2

ध्यान दें कि आप कुंजी पर निर्भर नहीं होना चाहिए बुलाया जा रहा है (LPWSTR) करने के लिए" का प्रयोग करें बहु बाइट वर्ण सेट "या कोड में डाली तार के साथ संकलित करने के लिए है का उल्लेख "। इसके बजाए 'RegOpenKeyEx' पर झंडे का उपयोग करके अन्य रजिस्ट्री दृश्य तक पहुंचें। –

0

मुझे एक ही समस्या थी। मैं उपयोग कर रहा था:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
            (LPWSTR)"SOFTWARE\\0test", 
            0, 
            WRITE_DAC , 
            &hKey); 

यह काम नहीं किया। मैं इसे इस तरह की कोशिश की और यह काम किया:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
            _T("SOFTWARE\\0test"), 
            0, 
            WRITE_DAC , 
            &hKey); 
+5

कंपाइलर को बंद करने के लिए कभी भी डास्ट डालें। कंपाइलर ने बिना किसी कलाकार के पहले व्यक्ति को संकलित करने से इंकार कर दिया। –

संबंधित मुद्दे