RegistryKey.GetSubKeyNames抛出IOException

时间:2011-04-18 16:41:48

标签: c# .net-3.5 registry ioexception

使用RegistryKey.GetSubKeyNames时,会抛出IOExeption:

  

“没有更多数据可用”

以下是相关代码:

string subKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
RegistryKey key = Registry.LocalMachine.OpenSubKey( subKey );
string[] keys = key.GetSubKeyNames(); // throws IOException here

功能

  • Win7 x64
  • VS 2010 SP1
  • .NET 3.5

使用“任何CPU”的构建类型时抛出异常;当使用构建类型“x86”时,代码按预期执行,但是从“Wow6432Node”而不是上面定义的subKey字符串变量中命名的SubKey路径读取键。

问题是:如何在64位系统(而不是Wow6432Node)上读取上面定义的subKey路径中的所有子键?

值得注意的是:当我在另一个64位系统上运行相同的代码时,代码执行时没有错误。我几乎倾向于认为我可能在某处损坏了注册表密钥?如果是这样,关于如何找到腐败密钥的任何想法?

1 个答案:

答案 0 :(得分:2)

将适当的RegistryView传递给RegistryKey.OpenBaseKey()

例如:

RegistryKey tempRegKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");