2009-05-04 11 views
6

पर विफल रहता है हाय मैं एक रजिस्ट्री मान पढ़ने की कोशिश कर रहा हूं जो मुझे firefox.exe का मार्ग देता है। यहRegOpenKeyEx HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin 

के तहत संग्रहीत किया जाता है (संस्करण संख्या कहीं और पाया जा सकता है)

लेकिन मैं नहीं कर सकते

HKEY_LOCAL_MACHINE 

के तहत कुछ भी ERROR_SUCCESS वापस जाने के लिए तो इस परीक्षण में विफल रहता है RegOpenKeyEx पाने के लिए लग रहे हैं :

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\SOFTWARE"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS) 

जबकि यह परीक्षण पास होता है:

if(RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT("\\Shell"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS) 
+0

GetLastError का मूल्य क्या है() के तुरंत बाद RegOpenKeyEx विफल रहता है? –

+3

GetLastError() की जांच न करें, यह फ़ंक्शन इसे सेट नहीं करता है। त्रुटि कोड वापसी मान में है, इसलिए इसे एक चर के लिए असाइन करें। – Joshua

उत्तर

18

निम्नलिखित कोड त्रुटि कोड 161, जिसका अर्थ है के साथ अपने मशीन पर विफल "बुरा मार्ग" (इसे winerror.h में देखने के लिए):

long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"), 
         0,KEY_QUERY_VALUE, &hk); 

मैं तो RegOpenKeyEx करने के लिए कॉल बदल "सॉफ़्टवेयर" (ध्यान दें कोई अग्रणी स्लैश) का उपयोग करने और यह काम किया:

#include <windows.h> 
#include <iostream> 
using namespace std; 

int main() { 
    HKEY hk; 

    // Notice that it's SOFTWARE instead of \\SOFTWARE: 
    long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"), 
         0,KEY_QUERY_VALUE, &hk); 
    if (n == ERROR_SUCCESS) { 
     cout << "OK" << endl; 
    } 
    else { 
     cout << "Failed with value " << n << endl; 
    } 
} 
+1

Thx, वह था! मुझे लगता है कि यह सॉफ़्टवेयर एक अलग फ़ाइल में सहेजा जा सकता है (यद्यपि यह जानकारी विकिपीडिया से मिली है), और शैल जैसे फ़ोल्डर नहीं है HKEY_CLASSES_ROOT –

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