64 -Bit -Windows -Registrierung - Warum wird %ProgramFiles %in %ProgramFiles (x86) %umgewandelt?
Frage
Nach dem Ausführen der folgenden Codes im 32 -Bit -Prozess die Daten %Programmdateien% automatisch konvertiert.
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));
Das Ergebnis
<- was zum Teufel. Wer erweitert es?
Ich möchte die Daten nicht konvertieren. -Aber ich muss den Typ verwenden Reg_expand_sz.
Wie mache ich?
Lösung
Dies wird als Umleitung von Registry Value genannt und ist ein Teil von WOW64 -Registrierungsvirtualisierung. Sie können dies nicht auf Server 2003 oder Vista deaktivieren, aber Sie können in Win7 (Sie können sich jedoch nicht an die Flagge von der Oberseite meines Kopfes erinnern). Warum möchten Sie Schlüssel schreiben, die auf die 64-Bit-Programmdateien aus einer 32-Bit-Anwendung hinweisen? (Es gibt legitimale Antworten auf diese Frage, ich versuche das Szenario mehr herauszufinden)