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”。
我想在注册表中为 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 位 OSSOFTWARE\WOW6432Node\
是 64 位 OS 上的 32 位兼容性注册表
WOW64 不是提供 64 位支持的层。当 OS 为 64 位时,它是提供 32 位应用程序支持的层。这意味着“(支持)Windows(32)在 Windows64”。