【问题标题】:RegOpenKeyEx fails on HKLM even tho requireAdministrator is enabled即使启用了 requireAdministrator,RegOpenKeyEx 在 HKLM 上也会失败
【发布时间】:2018-03-16 18:12:16
【问题描述】:

我看到this question 说,为了访问 Windows 注册表项,您需要在清单文件中具有 requireAdministrator 执行级别。关于注册表虚拟化的一些事情。

我正在使用 Visual Studio 2017,在项目设置(链接器 - 清单文件)中,我将执行级别更改为 requireAdministrator(并且 VS17 要求我以管理员权限运行它以调试程序),但它还是不行。

编辑:所有注册表函数均无错误返回(声称一切正常)。这是一个sn-p:

void AddStartupKey(char* path)
{
    HKEY hKey;
    LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");

    RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS, &hKey);

    LPCTSTR value = TEXT("Test");

    RegSetValueEx(hKey, value, 0, REG_SZ, (LPBYTE)path, strlen(path));

    RegCloseKey(hKey);
}

path 等于 argv[0](exe 路径)。

我的问题是,为什么即使所有功能都成功,键也没有值?

编辑:这是 VS17 中清单设置的屏幕截图:

【问题讨论】:

  • 当你说它“失败”时,澄清你的意思——它是否给出了一个例外,或者它只是没有找到你要求的东西,在这种情况下,你要求的可能不是那里。考虑向我们提供您的代码的 sn-p,以便我们可能对您在做什么有更多的了解。
  • @Richardissimo 改变了,我是社区的新手,我很抱歉我的错误
  • @IInspectable:注册表虚拟化不适用于这种情况,无论应用程序是 32 位还是其他,因为 1)requestedExecutionLevel 清单的存在会禁用虚拟化,以及 2)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows 下的键一开始就没有虚拟化。 This is documented behavior.
  • 您的应用是 32 位还是 64 位?您可能添加到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run。如果要添加到本机节点,请使用KEY_WOW64_64KEY

标签: windows winapi registry startup


【解决方案1】:

通过将KEY_WOW64_64KEY 添加到RegOpenKeyEx() 来解决。谢谢大家。

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2017-10-20
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多