RegOpenKeyEx non riesce su HKEY_LOCAL_MACHINE
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)
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