RegSetValueEx返回成功,但regedit中的注册表值不更新

RegSetValueEx返回成功,但regedit中的注册表值不更新

我读过很多帖子,但似乎都不适用于我遇到的这个问题。

首先,我继承了当前的注册表值,因此我被迫使用KEY_WOW64_32KEY。(64位应用程序写入32位注册表)

这是我从我的C++代码中体验到的:如果我设置一个注册表值(使用下面的代码),然后获取注册表值(使用下面的代码),它看起来工作得很好(我的' get‘等于我的' set ')。

但是当我打开regedit (32位版本)时,值不会更新。我甚至检查了regedit (64位版本),值甚至不在那里(正如预期的那样)。

感谢第一个响应者-我已经整合了这些建议并发布了重写;为了调试,我放入了一些硬编码的值(就在调用RegSetValueEx之前)。一旦我解决了这个问题,这些就会被删除。

请注意,所有这些代码都可以很好地执行,并返回ERROR_SUCCESS。

所以,我只想重申一下我的问题:为什么regedit不使用我的RegSetValueEx使用的值进行更新?

顺便说一句,我用过RegFlushKey,但没有区别。此外,我正在使用UNICODE进行编译。我遗漏了什么?

代码语言:javascript运行复制/************************************************************************************

************************************************************************************/

LRESULT PWRegistry::SetValue(HKEY hKey, const std::wstring& sSubKey, const std::wstring& sName, const std::wstring& sValue)

{

// Init locals

HKEY hRegKey(nullptr);

DWORD dwAccess(KEY_WRITE | KEY_WOW64_32KEY); // Set in the 32-bit registry

LRESULT result(ERROR_SUCCESS);

DWORD dwSize = (DWORD)((sValue.length() + 1) * sizeof(wchar_t));

// Open the key

result = RegOpenKeyEx(hKey, sSubKey.c_str(), 0, dwAccess, &hRegKey);

if (result != ERROR_SUCCESS)

{

// Create it

if (ERROR_SUCCESS != RegCreateKey(hKey, sSubKey.c_str(), &hRegKey))

{

return result;

}

}

// Hardcode some values during debugging

TCHAR tcName[] = L"APP_ABBR";

TCHAR tcValue[] = L"TLM";

dwSize = (DWORD)((lstrlen(tcValue) + 1) * sizeof(TCHAR)); // This equals 8

// Set the value

result = RegSetValueEx(hRegKey, tcName, 0, REG_SZ, (BYTE*)tcValue, dwSize);

if (hRegKey!= nullptr)

{

RegCloseKey(hRegKey);

}

return result;

}

/************************************************************************************

************************************************************************************/

LRESULT PWRegistry::GetValue(HKEY hKey, LPCTSTR lpszSubKey, LPCTSTR lpszValueName, DWORD dwType, LPBYTE pData, DWORD dwDataSize)

{

DWORD dwOptions(0);

DWORD dwAccess(KEY_QUERY_VALUE | KEY_WOW64_32KEY); // Get from the 32-bit registry

HKEY hRegKey(nullptr);

LRESULT result = RegOpenKeyEx(hKey, lpszSubKey, dwOptions, dwAccess, &hRegKey);

if (result == ERROR_SUCCESS)

{

result = RegQueryValueEx(hRegKey, lpszValueName, NULL, &dwType, (LPBYTE)pData, &dwDataSize);

}

if (hRegKey != NULL)

{

RegCloseKey(hRegKey);

}

return result;

}

相关推荐

小米5X和荣耀8青春版全面对比评测 哪个入手不亏!
中国建设银行

中国建设银行

07-02 👁️ 8519
2014年世界杯德国队23人大名单和号码
如何查域名注册时间查询进度
沉浸式观战阿根廷与法国巅峰之战 PICO开拓VR体育赛事新航道
男士光头时装搭配

男士光头时装搭配

07-12 👁️ 739
mx播放器怎么切换音轨 MXPlayer切换音轨的方法介绍
关于Vivado的license文件添加问题
宁波22个免费景点大全!不花一分钱玩遍宁波