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
至于错误:
NullReferenceException
和 SecurityException
之间的区别是 实际上 当你 不 可以访问注册表项。在这种情况下,出现前者是因为您打开的密钥不存在,这可能是由于您的应用程序查看的是 32 位版本的注册表项 (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...
) 而不是 64 位版本 (HKEY_LOCAL_MACHINE\SOFTWARE\...
).
要解决此问题,请将您的应用程序编译为 x64 或 AnyCPU,或者强制其查看 64 位注册表。在这里查看我的回答以获取更多信息:
我在注册表中有以下文件夹
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
至于错误:
NullReferenceException
和 SecurityException
之间的区别是 实际上 当你 不 可以访问注册表项。在这种情况下,出现前者是因为您打开的密钥不存在,这可能是由于您的应用程序查看的是 32 位版本的注册表项 (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...
) 而不是 64 位版本 (HKEY_LOCAL_MACHINE\SOFTWARE\...
).
要解决此问题,请将您的应用程序编译为 x64 或 AnyCPU,或者强制其查看 64 位注册表。在这里查看我的回答以获取更多信息: