2011-01-25 9 views
3

32ビットプロセスで次のコードを実行すると、データ%ProgramFiles%が自動的に変換されます。64ビットWindowsレジストリ - なぜ%ProgramFiles%が%ProgramFiles(x86)%に変換されますか?

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

結果
enter image description here < - 何地獄。誰がそれを拡大するのですか?

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

答えて

3

これはレジストリ値のリダイレクトと呼ばれ、WOW64's Registry Virtualizationの一部です。これをサーバー2003またはVistaでは無効にすることはできませんが、Win7で実行することはできます(ただし、私の頭の上にあるフラグは覚えていません)。なぜ32ビットアプリケーションから64ビットプログラムファイルを指すキーを書きたいのですか? (この質問に対する正当な答えがあります、私はシナリオをもっと理解しようとしています)

+0

私はそれが少し異なるレジストリリダイレクトだと思います。いずれのキーもリダイレクトされませんでした。ちょうど環境価値が拡大しました。私は64ビットのプログラムファイルを指摘したくありません。 32ビットと64ビットのプログラムファイルがレジストリを読み取るアプリケーションに依存していることを指摘したい。だからこそ私は環境価値を使用しました。 – Benjamin

+1

いいえ、リテラル文字列 "%ProgramFiles%"を "%ProgramFiles(x86)%"に変更しました。これはまさに私が参照しているものです。それは*拡張されていない*、それはちょうど別の*環境変数 –

+0

ああ、そうです。私はこれを無効にしようとしています。 – Benjamin

関連する問題