首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Registry Regedit查询与使用Registry类的c#程序查询的差异

Registry Regedit查询与使用Registry类的c#程序查询的差异
EN

Stack Overflow用户
提问于 2020-10-18 01:03:05
回答 1查看 24关注 0票数 0

我正在尝试使用C#从注册表中读取名称的值。注册表路径为'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion‘

我想要值的名称是'RegisteredOrganization‘

如果我使用REGEDIT,我可以转到指定的路径,并看到名称和它的值。

我想做同样的事情,但是使用c#。我使用以下代码:

代码语言:javascript
复制
           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个名称。

有人能给我解释一下这个差异吗?或者我应该在我的代码中修改什么才能使它工作?

EN

回答 1

Stack Overflow用户

发布于 2020-10-18 01:32:09

Gusman对原始问题的评论是解决问题的方法。在64位机器上,程序应该以64位模式运行,而不是以32位模式运行。因此,在项目选项的build选项卡中,如果您选择了AnyCPU,则应该取消选中“首选的32bit”复选框。否则,代码将从WoW64获取条目,而不是REGEDIT所显示的条目。所以你得到了前面提到的差异。代码本身是正确和有效的。我无法在32位机器上检查这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64405086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档