У меня есть метод, который пытается прочитать значение из реестра в двух возможных местах. И должен вернуть его в случае успеха. До сих пор это работало.
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
).