C++ - RegCreateKeyEx 成功但没有结果
Posted
技术标签:
【中文标题】C++ - RegCreateKeyEx 成功但没有结果【英文标题】:C++ - RegCreateKeyEx success but without result 【发布时间】:2013-01-29 14:31:41 【问题描述】:谁能告诉我这段代码有什么问题?没有错误。一切都返回 ERROR_SUCCESS 但在寄存器中看不到任何变化。
void Utils::writePath(LPCTSTR data)
HKEY hkey;
DWORD dwDisposition;
if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\aaTestCompany\\testApp"),
0, NULL, 0,
KEY_WRITE, NULL,
&hkey, &dwDisposition) == ERROR_SUCCESS)
long setRes = RegSetValueEx (hkey, "testPath", 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS)
printf("Success writing to Registry.");
else
printf("Error writing to Registry.");
RegCloseKey(hkey);
else
MessageBox(NULL,"error","",0);
【问题讨论】:
它是 64 位操作系统上的 32 位应用程序吗? 是的,这是 64 位操作系统上的 32 位应用程序。重要吗? LPCTSTR = 指向常量字符串的长指针 - 这是免费的仅供参考 见this question。 I added a registry key, but I cannot find it programmatically的可能重复 【参考方案1】:由于应用程序是 64 位操作系统上的 32 位应用程序,因此注册表项实际上将在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
下创建。
见32-bit and 64-bit Application Data in the Registry。
【讨论】:
令人惊讶的是有多少人不阅读/不知道这一点。在线许多地方每周都会询问几次。 @Deanna:不是每个人都精通一切;) 实际指定路径下的key怎么设置? @user1198065 只需阅读文档即可。链接hmjd 指向的页面发布了引用Accessing an Alternate Registry View,它提供了您正在寻找的信息。在Registry Key Security and Access Rights 上已经可以找到相同的信息。提示:KEY_WOW64_64KEY
/KEY_WOW64_32KEY
在我的例子中,CLSID 是在 HKLM\Wow6432Node 注册的(没有软件路径)。【参考方案2】:
您可以尝试将第 5 个和第 6 个参数设置为 REG_OPTION_NON_VOLATILE、KEY_ALL_ACCESS
【讨论】:
以上是关于C++ - RegCreateKeyEx 成功但没有结果的主要内容,如果未能解决你的问题,请参考以下文章
> 使用 RegCreateKeyEx() 的 Windows 可执行文件不提示输入 UAC 管理员权限并失败? [复制]
如何修复 RegCreateKeyEx() 返回错误 5,“访问被拒绝。”在 SQL Server 2017 中