我有这段代码:
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,它会显示我的命名实例,但不会显示默认实例。