RegSetValueEx静默无法写入HKLM

时间:2015-07-07 10:23:26

标签: c++ windows winapi registry

我试图在我的C ++应用程序中写HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,如下所示:

HKEY key;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), NULL, KEY_ALL_ACCESS, &key) == ERROR_SUCCESS){
    if (RegSetValueEx(key, TEXT("lcr"), 0, REG_SZ, (const BYTE*)runcmd.c_str(), (runcmd.size()+1)*sizeof(wchar_t)) != ERROR_SUCCESS){
        cout << "ERROR" ;
    }else{
        cout << "OK" << endl;
    }
    RegCloseKey(key);
}else{
    cout << "ERROR" ;
}

但是它默默地失败了,没有任何反应! 我试过像普通用户一样运行&amp;以管理员身份运行 有什么问题?

1 个答案:

答案 0 :(得分:2)

问题是您的申请受UAC registry virtualization的约束。由于您的应用程序中未包含清单,因此系统会进入XP(!)兼容模式。当您在HKLM下写入注册表的受限制部分时,系统会将它们重定向到HKCU下的虚拟商店。

您应该向应用程序添加清单,以便不再虚拟化。如果您确实需要写入HKLM,那么您需要在清单中指定requireAdministrator选项,以便以更高的权限执行您的应用程序。

可能你的下一步是花一些时间阅读我上面链接的文档,并确保你完全理解UAC的所有含义。