我试图在我的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;以管理员身份运行 有什么问题?
答案 0 :(得分:2)
问题是您的申请受UAC registry virtualization的约束。由于您的应用程序中未包含清单,因此系统会进入XP(!)兼容模式。当您在HKLM下写入注册表的受限制部分时,系统会将它们重定向到HKCU下的虚拟商店。
您应该向应用程序添加清单,以便不再虚拟化。如果您确实需要写入HKLM,那么您需要在清单中指定requireAdministrator
选项,以便以更高的权限执行您的应用程序。
可能你的下一步是花一些时间阅读我上面链接的文档,并确保你完全理解UAC的所有含义。