2009-05-04 30 views
6

Hola, estoy tratando de leer un valor de registro que me dé la ruta a firefox.exe. Esto se almacena bajoRegOpenKeyEx falla en HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin 

(el número de versión se puede encontrar en otro lugar)

Pero me parece que no puede conseguir RegOpenKeyEx para volver ERROR_SUCCESS para cualquier cosa bajo

HKEY_LOCAL_MACHINE 

así no pasa esta prueba :

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

pase esta prueba:

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

¿Cuál es el valor de GetLastError() inmediatamente después de RegOpenKeyEx falla? –

+3

No marque GetLastError(), esta función no lo establece. El código de error está en el valor de retorno, así que asígnelo a una variable. – Joshua

Respuesta

18

el siguiente código no en mi máquina con el código de error 161, que significa "mal camino" (búsquelo en Winerror.h):

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

entonces me cambió la llamada a RegOpenKeyEx usar "software" (nota no hay barras al principio) y ha funcionado:

#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, eso fue todo! Creo que puede deberse a que ese SOFTWARE se guarda en un archivo separado (sin embargo, obtuvo esta información de la wikipedia), y no es una carpeta como Shell está en HKEY_CLASSES_ROOT –