【发布时间】: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