知道注册表项返回的实例是默认实例还是命名实例

时间:2013-07-02 16:15:05

标签: c# .net sql-server

我有这段代码:

        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实例,但不会显示默认实例。

0 个答案:

没有答案