这次超越困惑......
最简单的代码行有时会起作用,有时却不起作用。首先我认为问题是我试图读取DWORD的值,但是因为我可以从SOME键读取DWORD值,所以这不是问题。现在问题似乎是,如果密钥在名称中有空格,我无法从任何密钥读取。当然这不可能。我拒绝相信MS没有考虑注册表密钥路径和名称中的空格。
告诉我为什么这不起作用:
MsgBox(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\CA\CA ARCserve D2D\WebService", "Port", Nothing))
它弹出一个空盒子。是的,注册表中确实存在一个值,是的,我有权读取密钥。
编辑:是的,一遍又一遍,如果密钥名称中有空格,您似乎无法从注册表中读取。真的吗?!?
再次编辑:“Ramhound”说代码示例是愚蠢的。引人入胜的观点。然而,他自己的建议也失败了:
Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey(“SOFTWARE \ ATI Technologies \ CBT”)
Dim objValue As Object
objValue = key.GetValue(“ReleaseVersion”)
MSGBOX(objValue.ToString())
答案 0 :(得分:7)
在整个浪费的一天之后,解决方案是将VS项目设置为高级编译选项中的“任何cpu”,因为如果设置为x86并在64位操作系统上运行,则仅限于注册表中的“Wow6432node”。 / p>
答案 1 :(得分:2)
在32位模式下运行vb.net应用程序时,在64位版本的Windows 7上也值得注意,当使用Microsoft.Win32.RegistryKey对象时,Wow6432Node键对您是隐藏的。我编写了这段代码来检查我需要读取哪个密钥才能获得正确的ODBC驱动程序子项:
Dim myReg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
Dim myReg_Key As Microsoft.Win32.RegistryKey
myReg_Key = myReg.OpenSubKey("SOFTWARE")
strRegistry_Keys = myReg_Key.GetSubKeyNames()
bool64_Bit_OS = False
For Each strSub_Key As String In strRegistry_Keys
If strSub_Key = "Wow6432Node" Then
bool64_Bit_OS = True
End If
Next
当您在“SOFTWARE”键上执行GetSubKeyNames()时,您将被重定向到SOFTWARE \ Wow6432Node
这确实使我的代码更容易,因为现在我不需要找出要查找哪个子密钥以查找要使用的Oracle ODBC驱动程序。
克里斯蒂安