VB.NET读取注册表

时间:2011-08-05 16:33:07

标签: vb.net registry

这次超越困惑......

最简单的代码行有时会起作用,有时却不起作用。首先我认为问题是我试图读取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())

2 个答案:

答案 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驱动程序。

克里斯蒂安