【问题标题】:C++ - RegCreateKeyEx success but without resultC++ - RegCreateKeyEx 成功但没有结果
【发布时间】:2013-01-13 03:56:06
【问题描述】:

谁能告诉我这段代码有什么问题?没有错误。一切都返回 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);
}

【问题讨论】:

标签: c++ winapi registry


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多