在VB.Net中获取具有空格的注册表键名的值

3
我尝试在VB.Net中读取注册表键值,但并没有太大的成功。 这是相关的键: HKEY_LOCAL_MACHINE\SOFTWARE\Intel\Setup and Configuration Software\INTEL-SA-00086 Discovery Tool\System Status 以下是代码片段:
Dim key As String = "SOFTWARE\Intel\Setup And Configuration Software\INTEL-SA-00086 Discovery Tool\System Status"
Dim val As String = "System Risk"
MessageBox.Show(Microsoft.Win32.Registry.LocalMachine.GetValue(key, val, Nothing))

到目前为止,我已经发现问题在于键名之间的空格,因为我可以获取其他名称中没有空格的键的值。
我尝试在VB.Net中转义注册表键路径,但它要么返回值名称本身,要么抛出异常。
这不是因为退格或斜杠,因为以下操作有效。
Dim key As String = "SOFTWARE\Intel\PSIS\PSIS_DECODER"
Dim val As String = "SomeKey"
MessageBox.Show(Microsoft.Win32.Registry.LocalMachine.GetValue(key, val, Nothing))

val值名称之间有空格时,此方法无法正常工作。

Dim key As String = "SOFTWARE\Intel\PSIS\PSIS_DECODER"
Dim val As String = "Some Key"
MessageBox.Show(Microsoft.Win32.Registry.LocalMachine.GetValue(key, val, Nothing))

我已经看了足够的Microsoft示例并在论坛上搜索,但仍然找不到帮助。在寻求替代方案之前,请您能提供一些魔法吗?

附加信息:

以下代码片段显示,如果键名或键值中有空格,则脚本将返回空值。

以下是名称中包含空格的键: Key with space in name

返回空值

Returns nothing


同样的东西,只是不同的键路径对我有效。不确定为什么你认为它会起作用。测试并使其正常工作。我将为此设置赏金。 - clhy
@Yorik 不是这样的。根据你所讨论的注册表值的类型,它们可以包含空格甚至特殊字符。 - clhy
你遇到了哪个错误?你确定这个键没有隐藏字符,比如末尾的空格吗?否则除了 VBS 中的一个 bug 之外,就没有其他可能的解释了,而这似乎非常不可能。 - harrymc
@harrymc 我没有收到任何错误。只是如果键或键值中有空格,它就什么也不返回。这里是可能能更好地解释一些的屏幕截图。https://i.stack.imgur.com/D5MxG.png https://i.stack.imgur.com/aq7Rp.png - clhy
1
我会在48小时内回来时处理这个问题。很高兴你的问题现在已经解决了。 - harrymc
显示剩余14条评论
1个回答

2

这个问题与从64位注册表中读取有关。

根据使用VB.Net读取64位注册表值中的发现,解决方案是:

use this Format to Read 64-Bit Registry values :

Dim rk1 As RegistryKey
Dim rk2 As RegistryKey
rk1 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
rk2 = rk1.OpenSubKey("HARDWARE\DESCRIPTION\System\BIOS")
Dim PID As String = rk2.GetValue("SystemProductName").ToString

这里可以找到更多信息和解决方案:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接