您好我正在尝试在C ++中创建一个注册表项,但我一直收到错误5,谷歌搜索告诉我它被拒绝但我不知道要获得正确的权限。我正在使用Windows 7,这是我的代码。感谢
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
LPWSTR szValueBuf = NULL;
char szProductName[MAX_PATH];
LPSECURITY_ATTRIBUTES lpsa;
HKEY hOrchKey;
DWORD dwOpenStatus,
dwType;
char szProuductKey[MAX_PATH];
hr = WcaInitialize(hInstall, "CreateProductKey");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
if (!(lpsa = default_sa()))
return FALSE;
hr = WcaGetProperty(L"PRODUCTNAME",&szValueBuf);
ExitOnFailure(hr, "failed to get Product Name");
wcstombs(szProductName, szValueBuf, 260);
sprintf(szProuductKey,"SOFTWARE\\Company\\%s",szProductName);
// Open the registery Orchestrator key
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
szProuductKey,
0,
"",
REG_OPTION_NON_VOLATILE,
KEY_QUERY_VALUE,
lpsa,
&hOrchKey,
&dwOpenStatus) != ERROR_SUCCESS )
return FALSE;
OS_RegCloseKey(hOrchKey);
return TRUE;
答案 0 :(得分:3)
以管理员身份运行,以提升访问权限运行它。
答案 1 :(得分:2)
您必须以管理员身份访问注册表项HKEY_LOCAL_MACHINE才能编辑值。 (例如,如果要通过注册表编辑器应用程序编辑密钥,则必须右键单击并选择“以管理员身份运行”)由于您要在代码中编写值,因此需要将编译器设置为具有管理员权限运行时的权限。在Visual Studio 2008中,可以在解决方案的“属性”页面中完成此操作,将其设置为以管理员身份运行。
继承人怎么做;在Solution Explorer中右键单击您的解决方案,然后选择Properties;转到配置属性 - >链接器 - >清单文件;将UAC执行级别设置为“requireAdministrator”。
下次点击运行时,它会提示您以管理员身份打开它,然后它会允许您更改密钥。我不知道如何与其他编译器一起使用,但它应该是相对相同的。但是,它总是会要求您提供管理员权限,即使在发布时也是如此,对大多数程序来说并不理想。如果这是一个安装程序或其他什么,那么我说这没关系,但如果这是一个会运行很多的应用程序,我建议使用HKEY_LOCAL_USER,它不需要管理员权限。我最近经历了所有那些malarkey并且注册表是一个蠢货,所以我建议尽可能避免它!
希望有所帮助!