在VB.Net中获取注册表键值,其中键名称包含空格

时间:2017-11-30 15:50:57

标签: registry vb.net

我试图在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))

看过enough Microsoft examples并搜索了足够多的论坛找不到任何帮助。在我寻找替代方案之前的最后一次尝试

任何魔法?

其他信息:

这是一个片段,显示如果键名或值中有空格,脚本将不返回任何内容。

这是一个名称中包含空格的键 Key with space in name

什么都不返回

Returns nothing

1 个答案:

答案 0 :(得分:1)

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

发现于 Read 64-Bit Registry Values Using VB.Net, 为海报工作的解决方案是:

  

使用此格式读取64位注册表值:

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

更多信息和解决方案可在此处找到: