0

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

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 什么都不是。

4

1 回答 1

0

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

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

至于错误:

当您无权访问注册表项时,实际抛出的 aNullReferenceExceptionSecurityExceptionthat之间存在差异。在这种情况下,出现前者是因为您打开的键不存在,这可能是由于您的应用程序查看了 32 位版本的注册表键 ( ) 而不是 64 位版本 ( )。HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...HKEY_LOCAL_MACHINE\SOFTWARE\...

要解决此问题,请将您的应用程序编译为 x64 或 AnyCPU,或强制其查看 64 位注册表。请在此处查看我的答案以获取更多信息:打开我知道存在的子项时出现 NullReferenceException

于 2018-08-16T07:49:29.937 回答