Ошибка RegOpenKeyEx на HKEY_LOCAL_MACHINE

Привет, я пытаюсь прочитать значение реестра, которое дает мне путь к firefox.exe. Это хранится под

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin

(номер версии можно найти в другом месте)

Но я не могу заставить RegOpenKeyEx возвращать ERROR_SUCCESS для чего-либо ниже

HKEY_LOCAL_MACHINE

поэтому этот тест не проходит:

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

пока этот тест проходит:

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

person Emile Vrijdags    schedule 04.05.2009    source источник
comment
Каково значение GetLastError() сразу после сбоя RegOpenKeyEx?   -  person Adam Rosenfield    schedule 04.05.2009
comment
Не проверяйте GetLastError(), эта функция его не устанавливает. Код ошибки находится в возвращаемом значении, поэтому присвойте его переменной.   -  person Joshua    schedule 04.05.2009


Ответы (1)


На моей машине произошел сбой следующего кода с кодом ошибки 161, что означает «неверный путь» (ищите его в winerror.h):

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

Затем я изменил вызов RegOpenKeyEx, чтобы использовать «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ» (обратите внимание на отсутствие косой черты), и это сработало:

#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;
    }
}
person Community    schedule 04.05.2009
comment
Спасибо, это было! Я думаю, что это может быть вызвано тем, что ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ сохраняется в отдельном файле (хотя эта информация получена из Википедии), а не в папке, такой как Shell, в HKEY_CLASSES_ROOT. - person Emile Vrijdags; 05.05.2009
comment
Что делать с hk, чтобы действительно ПРОЧИТАТЬ? - person Sandburg; 05.02.2019