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() 创建的密钥是不是打开?

> 使用 RegCreateKeyEx() 的 Windows 可执行文件不提示输入 UAC 管理员权限并失败? [复制]

如何修复 RegCreateKeyEx() 返回错误 5,“访问被拒绝。”在 SQL Server 2017 中

关于RegCreateKeyEx函数的用法(+50分)

pycharm wordcloud包安装 不报错 但没安装成功

pycharm wordcloud包安装 不报错 但没安装成功