3

次のコードを実行した後、32ビットプロセスで、データ%ProgramFiles%が自動的に変換されました。

HKEY hSubKey;
DWORD dwState;
RegCreateKeyEx(HKEY_CURRENT_USER, L"TestKey", NULL, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, &dwState);
std::wstring data = L"%ProgramFiles%";
RegSetValueEx(hSubKey, L"TestValue", NULL, REG_EXPAND_SZ,
  (BYTE*)data.c_str(), (DWORD)(data.size() * sizeof(WCHAR)) + sizeof(WCHAR));

結果
ここに画像の説明を入力してください <-なんてこった。誰がそれを拡張しますか?

データを変換したくありません。-しかし、タイプREG_EXPAND_SZを使用する必要があります。
私はどのように行いますか?

4

1 に答える 1

3

これはレジストリ値のリダイレクトと呼ばれ、WOW64のレジストリ仮想化の一部です。Server 2003またはVistaではこれを無効にすることはできませんが、Win7では無効にすることができます(ただし、頭のてっぺんにある旗を思い出せません)。32ビットアプリケーションから64ビットプログラムファイルを指すキーを作成するのはなぜですか?(この質問には正当な答えがあります、私はシナリオをもっと理解しようとしています)

于 2011-01-25T02:44:44.013 に答える