使用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路径中的所有SubKey?

注意:当我在另一个64位系统上运行相同的代码时,该代码将正确执行。我几乎倾向于认为我的某个地方的注册表项可能已损坏?如果是这样,关于如何找到损坏密钥的任何想法?

最佳答案

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

例如:

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

09-25 21:54