我正在尝试使用C#从注册表中读取名称的值。注册表路径为'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion‘
我想要值的名称是'RegisteredOrganization‘
如果我使用REGEDIT,我可以转到指定的路径,并看到名称和它的值。
我想做同样的事情,但是使用c#。我使用以下代码:
string rPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion";
string key = "RegisteredOrganization";
try
{
using (RegistryKey regkey = Registry.LocalMachine.OpenSubKey(rPath))
{
object nameValue = regkey.GetValue(key);
if (nameValue != null)
{ Console.WriteLine($"{key} = {nameValue}"); }
else
{ Console.WriteLine($"{key} not found!"); }
}
}
catch
{
Console.WriteLine($"Error opening key {rPath}");
}结果是:找不到RegisteredOrganization!使用提升的权限运行该程序会得到相同的结果
如果我重写程序来显示路径中的关键字,它将只显示30个REGEDIT中的23个名称。
有人能给我解释一下这个差异吗?或者我应该在我的代码中修改什么才能使它工作?
发布于 2020-10-18 01:32:09
Gusman对原始问题的评论是解决问题的方法。在64位机器上,程序应该以64位模式运行,而不是以32位模式运行。因此,在项目选项的build选项卡中,如果您选择了AnyCPU,则应该取消选中“首选的32bit”复选框。否则,代码将从WoW64获取条目,而不是REGEDIT所显示的条目。所以你得到了前面提到的差异。代码本身是正确和有效的。我无法在32位机器上检查这一点。
https://stackoverflow.com/questions/64405086
复制相似问题