2012-09-18 40 views
1

我想這將是死了但是簡單....vb.net 2010 - 從註冊表中讀取不起作用 - 勝7

對,所以一切我只是試圖做的是讀取值我的註冊表。我已經通過幾個例子,但無法讓他們工作。我也嘗試在管理模式下運行我的應用程序,但仍然沒有。有人可以幫忙嗎?

從我試過的所有例子中,我將使用最簡單的例子。

這工作:

Dim val As String 
val = Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString() 
MsgBox(val) 

這(一個我想要的)不:

Dim val As String 
val = Registry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient").GetValue("ConfigDB").ToString() 
MsgBox(val) 

後者的路徑和值是一個,我已經在註冊表中手動創建。我已經檢查了兩者之間的權限,他們完全一樣。我也嘗試以管理員身份運行該應用程序。我在val =行上得到一個運行時錯誤,它說:使用「new」關鍵字來創建一個對象實例。

任何想法?所有的各種網上的例子都失敗了,對我的生活,我想不通爲什麼...

乾杯, Ĵ

+0

您的應用程序是在64位Windows盒子上運行的32位應用程序嗎? – Steve

回答

2

好了,我已經試過你的代碼編譯爲x86的一個示例應用程序並且,正如所料,它會失敗並出現空值異常。

我假設您正在爲x86模式構建應用程序並在64位環境中運行。
當然,如果情況並非如此,請告訴我,我將刪除此答案。

在上述情況中,調用LocalMachine.Software註冊表路徑中的讀/寫操作將被操作系統自動更改爲在Software \ Wow6432Node子項中讀/寫,因此,您的代碼無法找到您手動插入的密鑰(「SOFTWARE \ PTSClient」)。
此代碼將給出一個空值作爲從Registry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient")的返回,導致無法獲取ConfigDB值。

您需要將您的密鑰/值添加到Software \ Wow6432Node路徑或編譯您的應用程序的AnyCPU模式或讓您的代碼將值寫入寄存器(它將被重定向到Wow6432Node)。

+0

啊...現場伴侶!我沒有意識到有什麼不同。正如你毫無疑問的聚集在一起,我是新的(ish)發展,並且從未接受過這個。兩次,我被32和64位操作系統刺痛了...... *嘆氣*。感謝fella,非常感謝! – user1681510