2009-05-04 21 views
6

Hallo Ich versuche, einen Registrierungswert zu lesen, der mir den Pfad zu firefox.exe gibt. Dies wird gespeichert unterRegOpenKeyEx schlägt auf HKEY_LOCAL_MACHINE fehl

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin 

Aber ich kann nicht bekommen RegOpenKeyEx für alles zurück ERROR_SUCCESS (die Versionsnummer kann woanders zu finden) scheinen unter

HKEY_LOCAL_MACHINE 

so dass dieser Test nicht bestanden :

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

während dieser Test besteht:

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

Was ist der Wert von GetLastError() sofort nach RegOpenKeyEx fehlschlägt? –

+3

GetLastError() nicht prüfen, diese Funktion setzt es nicht. Der Fehlercode befindet sich im Rückgabewert, also weisen Sie ihn einer Variablen zu. – Joshua

Antwort

18

der folgende Code mit dem Fehlercode auf meinem Rechner ausgefallen 161, die "schlechter Weg" bedeutet (schauen Sie in winerror.h up):

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

Ich änderte dann den Anruf zu RegOpenKeyEx "SOFTWARE" zu verwenden (keine führenden Schrägstriche beachten) und es hat funktioniert:

#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, das war's! Ich denke, dass es dadurch verursacht werden kann, dass die SOFTWARE in einer separaten Datei gespeichert wird (hab diese Information aus Wikipedia) und es ist kein Ordner wie Shell in HKEY_CLASSES_ROOT –