Здравствуйте, Odi$$ey, Вы писали:

OE>та же фигня, проверяется наличие инстанции с именем по-умолчанию


Неправда, не та же. Ведь никто не мешает перебрать все экземпляры серверов, а не искать по заранее заданному имени. Вот код:

using System;
using System.Management;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Instance name       Edition");
        Console.WriteLine("----------------------------------------------------------");

        ManagementObjectSearcher getSqlServices = new ManagementObjectSearcher(
            "root\\Microsoft\\SqlServer\\ComputerManagement10",
            "SELECT * FROM SqlService WHERE SQLServiceType = 1");
        
        foreach (ManagementObject sqlService in getSqlServices.Get())
        {
            string serviceName = (string)sqlService["ServiceName"];
            ManagementObjectSearcher getAdvancedProperties = new ManagementObjectSearcher(
                "root\\Microsoft\\SqlServer\\ComputerManagement10",
                "SELECT * FROM SqlServiceAdvancedProperty WHERE " +
                "SQLServiceType = 1 AND ServiceName = '" + serviceName + "'");

            string edition = "<Unknown>";
            foreach (ManagementObject property in getAdvancedProperties.Get())
            {
                if ((string)property["PropertyName"] == "SKUNAME" && (uint)property["PropertyValueType"] == 0)
                {
                    edition = (string)property["PropertyStrValue"];
                }
            }
            
            Console.WriteLine(serviceName.PadRight(20) + edition);
        }
    }
}


Вот вывод:

Instance name       Edition
----------------------------------------------------------
MSSQL$SQL2005       Developer Edition
MSSQL$SQLEX2008     Express Edition with Advanced Services
MSSQL$SQLEXPRESS    Express Edition
Автор: Sergei MO    Оценить