我有这段代码:
List<SQLInstancia> list = new List<SQLInstancia>();
SQLInstancia instancia;
int cont = 0;
RegistryView registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
{
//Instancias en 64bits
RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false);
//instancias en 32bits
RegistryKey instanceKey_ = hklm.OpenSubKey(@"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server", false);
if (instanceKey != null)
{
foreach (var instanceName in instanceKey.GetValueNames())
{
cont++;
instancia = new SQLInstancia();
instancia.Nombre = Environment.MachineName + "\\" + instanceName;
instancia.IdInstancia = cont;
list.Add(instancia);
}
}
}
使用该代码我将在本地计算机上运行所有SQL Server实例,但问题是我无法知道它是默认实例还是命名实例。
我已经尝试使用SMO和SqlDataSourceEnumerator.GetDataSources(),第二个工作,但它检索网络上的所有实例,我不需要它们,我只需要那些在本地机器。使用SMO,它显示我的Named实例,但不会显示默认实例。