Domanda

Ciao, sto provando a leggere un valore di registro che mi dà il percorso di firefox.exe. Questo è archiviato in

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin

(il numero di versione è reperibile altrove)

Ma non riesco a convincere RegOpenKeyEx a restituire 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)
È stato utile?

Soluzione

Il seguente codice non è riuscito sulla mia macchina con il codice di errore 161, che significa "percorso errato" (cercalo in winerror.h):

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

Ho quindi modificato la chiamata in RegOpenKeyEx per utilizzare " SOFTWARE " (nota che non ci sono barre) 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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top