vb.net中受保护的注册表的GetValueNames()

时间:2018-08-16 07:16:58

标签: windows vb.net registry windows-defender

我在注册表中有以下文件夹

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths

但是如何将其值名称显示在列表框中?
这是我的代码:

Dim FontKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths")
For Each ValueName As String In FontKey.GetValueNames()
    Dim Value As Object = FontKey.GetValue(ValueName) 'Get the value (data) of the specified value name.
    If Value IsNot Nothing Then 'Make sure it exists.
        ListBox1.Items.Add(Value.ToString())
    End If
Next
FontKey.Close()

P / s:我收到此错误:(因为我没有创建新密钥的必要权限)

  

System.NullReferenceException:'对象引用未设置为对象的实例。'

     

FontKey没事。

1 个答案:

答案 0 :(得分:0)

如果要显示值名称,则只需忽略检索值并将ValueName变量添加到列表框中即可:

For Each ValueName As String In FontKey.GetValueNames()
    ListBox1.Items.Add(ValueName)
Next

关于错误:

NullReferenceExceptionSecurityException之间的区别是实际上,当您没有可以访问注册表项时会抛出该差异。在这种情况下,前者的发生是因为您打开的键不存在,这很可能是由于您的应用程序查看了32位版本的注册表项(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...)而非64位版本({{ 1}})。

要解决此问题,请将您的应用程序编译为x64或AnyCPU,或强制其查看64位注册表。请在这里查看我的答案以获取更多信息:NullReferenceException when opening a subkey I know exists