2012-07-06 184 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