簡體   English   中英

創建注冊表項-拒絕訪問

[英]Creating a registry key - access denied

嗨,我試圖在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;

以管理員身份運行,以具有更高的訪問權限運行它。

您必須以管理員身份訪問注冊表項HKEY_LOCAL_MACHINE,才能編輯值。 (例如,如果您想通過注冊表編輯器應用程序來編輯密鑰,則必須右鍵單擊並選擇“以管理員身份運行”)。由於要在代碼中寫入值,因此需要將編譯器設置為具有管理員權限運行時的權利。 在Visual Studio 2008中,可以在解決方案的“屬性”頁中完成此操作,將其設置為以管理員身份運行。

這是怎么做的; 在解決方案資源管理器中右鍵單擊您的解決方案,然后選擇屬性; 轉到配置屬性->鏈接器->清單文件; 將UAC執行級別設置為“ requireAdministrator”。

下次按下run時,它會提示您以admin身份打開它,然后它將允許您更改密鑰。 我不確定如何使用其他編譯器執行此操作,但是應該相對相同。 但是,即使在發行版中,它總是會要求您提供管理員權限,因此對於大多數程序而言並不理想。 如果這是安裝程序或其他工具,則ID表示可以,但是如果此應用可以運行很多,則ID建議使用HKEY_LOCAL_USER,它不需要管理員權限。 我最近經歷了所有的惡意事件,注冊表是個正確的選擇,所以我建議盡可能避免使用它!

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM