2011-08-05 471 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