2009-05-04 13 views
6

Ciao Sto cercando di leggere un valore di registro che mi fornisce il percorso per firefox.exe. Questo è memorizzato sottoRegOpenKeyEx non riesce su HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin 

(il numero di versione può essere trovato da qualche altra parte)

ma non posso sembrano avere RegOpenKeyEx per tornare ERROR_SUCCESS per qualsiasi cosa sotto

HKEY_LOCAL_MACHINE 

quindi questo test fallisce :

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

mentre questo test ha superato:

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

Qual è il valore di GetLastError() immediatamente dopo l'errore di RegOpenKeyEx? –

+3

Non selezionare GetLastError(), questa funzione non lo imposta. Il codice di errore è nel valore di ritorno, quindi assegnarlo a una variabile. – Joshua

risposta

18

il seguente codice fallito sulla mia macchina con il codice di errore 161, che significa "cattiva strada" (cercarlo in Winerror.h):

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

Ho poi cambiato la chiamata a RegOpenKeyEx utilizzare "SOFTWARE" (non notare nessuna barra iniziale) e ha funzionato:

#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, era così! Penso che potrebbe essere causato dal fatto che il SOFTWARE è salvato in un file separato (ottenuto comunque da wikipedia), e non è una cartella come Shell in HKEY_CLASSES_ROOT –

Problemi correlati