RegistryKey.GetSubKeyNames throws IOException

本文关键字:IOException throws GetSubKeyNames RegistryKey | 更新日期: 2023-09-27 17:50:41

使用RegistryKey时。

:

"No more data is available"

相关代码如下:

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

规格

    这个主题
  • x64
  • vs 2010 sp1
  • 。NET 3.5

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

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

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

RegistryKey.GetSubKeyNames throws IOException

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

例如:

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