1

我有这段代码:

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

4

0 回答 0