c# - Registry.SetValue 不适用于 x86

标签 c# .net windows registry

我想在注册表中为 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/

相关文章:

c# - 奇怪的错误! HdInsight Hadoop MapReduce失败,代码为255

python - 在 python 中访问 CPU 温度

.net - 从任务中调用 Thread.Sleep

mysql - MySQL 服务器问题

windows - 将 txt 文件中的阿拉伯文文本显示到 cmd 提示符

c# - `There is already an open DataReader` 迭代查询结果时出错

java - C# 数组索引

c# - FileContentResult 有效,但下载到字节数组无效

c# - 使用参数从 c# 运行命令行?

.net - .net框架错误日志位置在哪里