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));
結果
< - 何地獄。誰がそれを拡大するのですか?
私はデータを変換したくありません。 - しかし、タイプREG_EXPAND_SZを使用する必要があります。
どうすればよいですか?
私はそれが少し異なるレジストリリダイレクトだと思います。いずれのキーもリダイレクトされませんでした。ちょうど環境価値が拡大しました。私は64ビットのプログラムファイルを指摘したくありません。 32ビットと64ビットのプログラムファイルがレジストリを読み取るアプリケーションに依存していることを指摘したい。だからこそ私は環境価値を使用しました。 – Benjamin
いいえ、リテラル文字列 "%ProgramFiles%"を "%ProgramFiles(x86)%"に変更しました。これはまさに私が参照しているものです。それは*拡張されていない*、それはちょうど別の*環境変数 –
ああ、そうです。私はこれを無効にしようとしています。 – Benjamin