1

こんにちは私はC++でレジストリキーを作成しようとしていますが、グーグルでアクセスが拒否されたと表示されるエラー5が発生し続けますが、正しい特権を取得する方法がわかりません。私はWindows7を使用していますが、これが私のコードです。ありがとう

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;
4

2 に答える 2

3

管理者として実行して、昇格されたアクセスで実行します。

于 2012-10-25T15:07:12.937 に答える
2

値を編​​集するには、管理者としてレジストリキーHKEY_LOCAL_MACHINEにアクセスする必要があります。(たとえば、レジ​​ストリエディタアプリケーションを介してキーを編集する場合は、右クリックして[管理者として実行]を選択する必要があります)値をコードで記述したいので、コンパイラを管理者を持つように設定する必要がありますあなたがそれを実行するときの権利。Visual Studio 2008では、これはソリューションのプロパティページで実行でき、管理者として実行するように設定します。

これを行う方法は次のとおりです。ソリューションエクスプローラーでソリューションを右クリックし、[プロパティ]を選択します。[構成のプロパティ]->[リンカー]->[マニフェストファイル]に移動します。UAC実行レベルを「requireAdministrator」として設定します。

次に実行を押すと、管理者として開くように求められ、キーを変更できるようになります。他のコンパイラでこれを行う方法はわかりませんが、比較的同じである必要があります。ただし、リリースであっても、ほとんどのプログラムには理想的ではないため、常に管理者権限を要求されます。これがインストーラーなどの場合は問題ありませんが、これが頻繁に実行されるアプリの場合は、HKEY_LOCAL_USERを使用することをお勧めします。管理者権限は必要ありません。私は最近そのすべての悪意を経験しました、そしてレジストリは正しくするために雌犬です、それで私はそれをできるだけ避けることを提案します!

お役に立てば幸いです。

于 2012-10-25T15:23:29.940 に答える