2011-08-05 218 views
2

这次难以置信......VB.NET读取注册表

最简单的可能的代码行有时候,有时它不。首先,我认为问题在于我试图读取DWORD的值,但由于我可以从某些键读取DWORD值,所以这不是问题所在。现在问题似乎是,如果密钥在名称中有空格,我无法从任何密钥读取。当然,这不可能。我拒绝相信MS没有考虑注册表关键路径和名称中的空格。

那么告诉我,为什么这不起作用:

MsgBox(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\CA\CA ARCserve D2D\WebService", "Port", Nothing)) 

它只是弹出一个空盒子。是的,注册表中存在一个值,是的,我有权读取密钥。

编辑:是的,一遍又一遍,似乎你不能从注册表中读取,如果密钥名称中的任何位置有空格。真的吗?!?

编辑再次:“Ramhound”说代码示例是愚蠢的。迷人的观点。但是他自己的建议也未能:

昏暗键的RegistryKey = Registry.LocalMachine.OpenSubKey( “SOFTWARE \ ATI技术\ CBT”)

昏暗objValue作为对象

objValue = key.GetValue(” ReleaseVersion“)

MSGBOX(objValue.ToString())

+0

使用您正在使用的GetSubKey insead。使用空格读取注册密钥没有问题,所以问题出在您的代码上,因此很简单。 –

+0

你的一些问题表明你对这个问题做了很少的研究。正如我所指出的,我有读取注册表的代码,而且我没有这个问题,所以唯一的解释是代码。当实际代码常常是问题时,我也会展示“代码示例”。 –

+4

让我们待在公民场合吧 – Martin

回答

7

整个浪费一天之后,解决的办法是设置你的VS项目‘任何CPU’,因为如果设置为x86和运行先进的编译选项一个你被限制的64位操作系统在注册表中的“Wow6432node”。

1

当在32位模式下运行vb.net应用程序时,它还比64位版本的Windows 7更值得注意,使用Microsoft.Win32.RegistryKey对象时,Wow6432Node键对您隐藏。我写这个代码来检查,我需要阅读得到正确的ODBC驱动程序的子项,其关键:当您会被重定向到SOFTWARE \ Wow6432Node

“软件”键做GetSubKeyNames()

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 

这确实使我的代码变得更加简单,因为我不需要计算出要查找哪个子键以查找要使用哪个Oracle ODBC驱动程序。

Kristian