Registry.SetValue не работает для x86
Я хочу изменить определенное значение (тип REG_SZ
) в реестре для x64 и x86, но метод SetValue не меняет значение для x86. Х64 работает отлично. Это мой код:
RegistryKey regKeySpecific = RegistryKey.OpenBaseKey(
RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey registryKey = regKeySpecific.OpenSubKey(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag", true);
registryKey.SetValue("ThisPCPolicy", "Show", RegistryValueKind.String);
registryKey.Close();
Я использую RegistryView.Registry32
параметр в первой строке кода, чтобы изменить значение в реестре x86, но это не работает.
Проблема выявлена, но не решена. Этот код всегда изменяет ключ в реестре x64 (WOW6432Node):
"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag"
1 ответ
Очевидно, у вас есть программа, выполняющаяся в 32-разрядном режиме x86. Windows x64 выполняет перенаправление реестра для 32-разрядных приложений, поэтому при попытке доступа
SOFTWARE\Microsoft
будет вместо доступа
SOFTWARE\WOW6432Node\Microsoft
Registry32
flag делает такое же перенаправление доступным для приложений.NET, работающих под x64. Это не имеет никакого эффекта для вас, потому что ОС уже включила это перенаправление.
Чтобы получить доступ SOFTWARE\Microsoft
на 64-битной ОС из 32-битного процесса, вы должны использовать Registry64
флаг, который отключает перенаправление.
Помните (ваш вопрос имеет это задом наперед)
SOFTWARE\
это родной реестр, 64-битный на 64-битной ОСSOFTWARE\WOW6432Node\
32-разрядный реестр совместимости в 64-разрядной ОС
WOW64 - это не тот уровень, который обеспечивает 64-битную поддержку. Это уровень, который обеспечивает поддержку 32-битных приложений, когда ОС является 64-битной. Это означает "(поддержка) Windows (32) на Windows64".