RegSetValueEx悄然无法写入HKLM

我试图写在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run从我的C ++应用程序是这样的:

 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" ; } 

但它默默地失败,没有任何反应!
我试图以普通用户身份运行,并以pipe理员身份运行。
问题是什么?

Solutions Collecting From Web of "RegSetValueEx悄然无法写入HKLM"

问题是您的应用程序受UAC 注册表虚拟化的影响 。 由于您没有在应用程序中包含清单,因此系统将进入XP(!)兼容模式。 当您写入HKLM下的注册表限制部分时,系统会将其重定向到HKCU下的虚拟商店。

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

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