我在注册表中有以下文件夹
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没事。
答案 0 :(得分:0)
如果要显示值名称,则只需忽略检索值并将ValueName
变量添加到列表框中即可:
For Each ValueName As String In FontKey.GetValueNames()
ListBox1.Items.Add(ValueName)
Next
关于错误:
NullReferenceException
和SecurityException
之间的区别是实际上,当您没有可以访问注册表项时会抛出该差异。在这种情况下,前者的发生是因为您打开的键不存在,这很可能是由于您的应用程序查看了32位版本的注册表项(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...
)而非64位版本({{ 1}})。
要解决此问题,请将您的应用程序编译为x64或AnyCPU,或强制其查看64位注册表。请在这里查看我的答案以获取更多信息:NullReferenceException when opening a subkey I know exists