嗨,我正在尝试在C 中创建一个注册表密钥,但是我一直在搜索错误5,Google Google告诉我,它被拒绝了,但我不知道确实获得了正确的特权。我正在使用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;
作为管理员运行以高架访问运行。
您必须访问注册表密钥hkey_local_machine作为管理员,以编辑值。(例如,如果您想通过注册表编辑器应用程序编辑密钥,则必须右键单击并选择"作为管理员运行"),因为您想在代码中写入值,因此您需要设置编译器才能具有管理员运行时的权利。在Visual Studio 2008中,这可以在解决方案的属性页面中完成,您将其设置为管理。
这是如何做的;右键单击解决方案资源管理器中的解决方案,然后选择属性;转到配置属性 -> linker->清单文件;将UAC执行级别设置为" QuienteadMinistrator"。
下次您打运行时,它应该提示您作为管理员打开它,然后允许您更改密钥。我不确定如何与其他编译器一起执行此操作,但应该相对较差。但是,即使在发行版中,对于大多数程序来说也不是理想的选择,它始终会要求您提供管理权。如果这是安装程序之类的东西,那么ID说这很好,但是如果这是一个运行很多的应用程序,ID建议使用hkey_local_user,则不需要管理员权利。最近,我经历了Malarkey和注册表是正确的bit子,所以我建议尽可能避免它!
希望有帮助!