RegGetValue возвращает тип REG_NONE - PullRequest
0 голосов
/ 15 января 2019

У меня есть метод, который пытается прочитать значение из реестра в двух возможных местах. И должен вернуть его в случае успеха. До сих пор это работало.

wstring Tool::GetCustomizedFromRegistry(LPCWSTR szName)
{
    wstring szProdNameLong = L"";
    HKEY hKey;
    LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Test\\Case", 0, KEY_READ, &hKey);
    if (res == ERROR_SUCCESS)
    {
        DWORD size = 1024;
        WCHAR value[1024];
        DWORD type;
        long error = RegGetValue(hKey, NULL, szName, RRF_RT_REG_SZ, &type, &value, &size);

        if (error == ERROR_SUCCESS && type == RRF_RT_REG_SZ && size > 0)
            return wstring(value);
    }

    res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Test", 0, KEY_READ, &hKey);
    if (res == ERROR_SUCCESS)
    {
        DWORD size = 1024;
        WCHAR value[1024];
        long error = RegGetValue(hKey, NULL, szName, RRF_RT_REG_SZ, NULL, &value, &size);
        if (error == ERROR_SUCCESS)
            return wstring(value);
    }

    return L"";
}

После обновления одной из наших машин для разработки до Windows 10 это больше не работает. Проблема в том, что мы проверяем тип возвращаемого значения RegGetValue. Это REG_NONE вместо REG_SZ (в реестре это на самом деле REG_SZ).

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Проблема была в том, что я использовал неправильную константу. Я использовал RRF_RT_REG_SZ, значение которого равно 2, а значение RRF_RT_REG_NONE равно единице. 1 будет возвращено в переменной типа.

Я должен был использовать константу REG_SZ, которая фактически равна 1. Таким образом, метод вернул значение правильно, но я сравнил его с неправильной константой.

Я не знаю, почему это сработало.

0 голосов
/ 15 января 2019

Я попробовал ваш код на Windows 10, и он работает нормально. Пожалуйста, позаботьтесь о том, что если вы запускаете приложение x86 на компьютере x64, ключи будут находиться по адресу «HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node», доступ к ключам из «Software \ Test \ Case» возможен только в том случае, если ваше приложение X64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...