创建注册表密钥 - 拒绝访问



嗨,我正在尝试在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子,所以我建议尽可能避免它!

希望有帮助!

最新更新