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

GetValueNames() of protected registry in vb.net

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

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: 'Object reference not set to an instance of an object.'

FontKey was Nothing.

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

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

至于错误:

NullReferenceExceptionSecurityException 之间的区别是 实际上 当你 可以访问注册表项。在这种情况下,出现前者是因为您打开的密钥不存在,这可能是由于您的应用程序查看的是 32 位版本的注册表项 (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...) 而不是 64 位版本 (HKEY_LOCAL_MACHINE\SOFTWARE\...).

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