2012-07-06 145 views
0

我試圖讓所有已安裝在本地機器上用下面的代碼的幫助下,SQL實例:訪問Windows註冊表

RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"); 
string[] instances = (string[])rk.GetValue("InstalledInstances"); 

if (instances.Length > 0) //Error 
{ 
    foreach (string instance in instances) 
    { 
     MessageBox.Show(instance); 
    } 
} 

這是給以下異常:

對象未將引用設置爲對象的實例。

我已經手動檢查了'Registry-Editor'並且存在指定的鍵,在我的系統中也有兩個SQL實例。

現在請告訴我爲什麼它不訪問所需的鍵值?

+4

我預測你在64位操作系統上運行32位代碼。 – SLaks 2012-07-06 00:09:50

+0

@ SLaks-是的,你是對的。 – 2012-07-06 00:11:57

+0

那麼,我現在該做什麼? – 2012-07-06 00:13:06

回答

0

我在64位機器上運行你的代碼。它運行良好。確保你的平臺設置爲AnyCPU或x64而不是86

enter image description here

+0

謝謝你解決了這個問題。 – 2012-07-06 10:30:22

0

這條線可能是問題的字符串[]實例=(字符串[])rk.GetValue(「InstalledInstances」);

因爲RegistryKey.GetValue方法(String)返回一個對象,你是鑄造,在字符串[]

它轉換爲String []前,你應該檢查返回值不爲空

+0

我不認爲這個答案是正確的,因爲如果GetValue返回null,那麼轉換爲string []會導致錯誤,因爲您不能將空值轉換爲字符串數組。他的錯誤似乎發生在此之後,它告訴我它不會返回null並且它成功地轉換爲字符串數組。 – Icemanind 2012-07-06 01:04:00