Regedit显示未使用GetSubKeyNames()列出的键

时间:2012-11-10 18:37:40

标签: c# registry regedit

我已经检查了其他一些关于SO的回复,但据我所知,这是一个与我得到的命中不同的问题。

当我打开RegEdit时,我可以看到一组键,但是当我使用例如我的程序列出它们时:

Registry.LocalMachine.OpenSubKey(@"SOFTWARE").GetSubKeyNames()
其中一些人失踪了。我认为这可能与访问权限有关,所以我也检查了.CurrentUser。在那里可以体验到相同的行为。一些子项未列出。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

你的操作系统是x64吗?如果是这种情况,对于“LocalMachine \ Software”,有两个不同的节点:X64应用程序正常,x86应用程序Wow6432Node。

用于演示上述内容的示例应用程序。

using System;
using Microsoft.Win32;

namespace ConsoleApplication1
{
  internal class Program
  {
    public static void Main()
    {
      String[] values = Registry.LocalMachine.OpenSubKey(@"SOFTWARE").GetSubKeyNames();
      foreach (String value in values)
                Console.WriteLine(value);
    }
  }
}

当在x86中构建控制台应用程序时,这是我机器上代码的输出:

的Adobe
AGEIA Technologies
酒精软 Apple Computer,Inc。
Apple Inc.
Aureal的
查杀
Azureus的
BazisSoft
C07ft5Y
佳能
思杰
...

当在x64中构建控制台应用程序时,这是我的机器上的输出:

的7-Zip
AGEIA Technologies
Apple Computer,Inc。
Apple Inc.
ATI Technologies
佳能

客户
...

如您所见,根据应用程序是x86还是x64,输出会有很大差异。

编辑: 之前在StackOverflow上询问了similar question