我想在注册表中为 x64 和 x86 编辑特定值(类型 REG_SZ
),但 SetValue 方法不会更改 x86 的值。 x64 工作正常。这是我的代码:
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) 注册表中的 key :
"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag"
最佳答案
您显然有一个在 x86(32 位)模式下执行的程序。 Windows x64 对 32 位应用程序执行注册表重定向,以便尝试访问
SOFTWARE\Microsoft
将改为访问
SOFTWARE\WOW6432Node\Microsoft
Registry32
标志使同样的重定向可用于以 x64 运行的 .NET 应用程序。它对您没有影响,因为操作系统已经打开了该重定向。
要从 32 位进程访问 64 位操作系统上的 SOFTWARE\Microsoft
,您应该使用禁用重定向的 Registry64
标志。
记住(你的问题是倒过来的)
SOFTWARE\
是 native 注册表,在 64 位操作系统上是 64 位SOFTWARE\WOW6432Node\
是 64 位操作系统上的 32 位兼容性注册表
WOW64 不是提供 64 位支持的层。当操作系统是 64 位时,它是提供 32 位应用程序支持的层。它的意思是“(支持)Windows(32)在 Windows64 上”。
关于c# - Registry.SetValue 不适用于 x86,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38423560/