Registry.SetValue 不适用于 x86

Registry.SetValue not working for x86

我想在注册表中为 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) 注册表中的密钥:

"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\PropertyBag"

您显然有一个在 x86(32 位)模式下执行的程序。 Windows x64 为 32 位应用程序执行注册表重定向,以便尝试访问

SOFTWARE\Microsoft

将改为访问

SOFTWARE\WOW6432Node\Microsoft

Registry32 标志使 .NET 应用程序可以使用与 x64 相同的重定向 运行。它对您没有影响,因为 OS 已经打开了该重定向。

要从 32 位进程访问 64 位 OS 上的 SOFTWARE\Microsoft,您应该使用禁用重定向的 Registry64 标志。

记住(你的问题反了)

  • SOFTWARE\ 是本机注册表,64 位对 64 位 OS

  • SOFTWARE\WOW6432Node\ 是 64 位 OS

  • 上的 32 位兼容性注册表

WOW64 不是提供 64 位支持的层。当 OS 为 64 位时,它是提供 32 位应用程序支持的层。这意味着“(支持)Windows(32)在 Windows64”。