首页 > 解决方案 > C# 无法读取键值名称

问题描述

我正在尝试在 C# 中读取注册表上的所有子键它适用于本机子键,但是当我创建自己的键时,我无法读取它。

string all = "-start" + Environment.NewLine;
string registryKey2 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\AnimateMinMax";
RegistryKey key2 = Registry.LocalMachine.OpenSubKey(registryKey2, true);

foreach (string valueName in key2.GetValueNames())
{
    all += valueName + Environment.NewLine;
}
all += "-End" + Environment.NewLine;
MessageBox.Show(all);

在此处输入图像描述 在此处输入图像描述

“测试”Dword 键丢失

你有什么建议吗?

此致

标签: c#registry

解决方案


您正在查看错误的注册表项部分。您的应用程序编译为 32 位,但您的操作系统是 64 位。在这种情况下,Windows 会自动重定向到WOW6432Node注册表中不存在该键的位置。

解决方案:

1) 在项目设置中,将目标 CPU 更改为 x64。

2)使用RegistryView.Registry64flag打开64位注册表视图。

var localMachine64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var key2 = localMachine64.OpenSubKey(registryKey2, true);
// rest of the code

推荐阅读