Вопрос : Как обнаружить если установлен сервер 2005 или 2008 SQL

Hi,

How может я обнаружить если сервер 2005 или 2008 SQL установлен на компьютер изнутри применения Делфи?
Preferably не путем использование registry.

I нашло некоторое Кодего в C# могло сделать это??? (см. ниже).
class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
система " class= " id= " codeSnippet780363
using;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ExpressDetection
{
    программа типа
    {
        главным образом static пустое (args шнура [])
        {
            если (! EnumerateSQLInstances ())
            {
                Console.WriteLine («не будут примеров сервера 2005 SQL или установленного сервера 2008 SQL»);
            }
        }
         ///
        /// перечисляет все примеры сервера SQL на машине.
        /// 
        /// 
        общественное статическое bool EnumerateSQLInstances ()
        {
            correctNamespace = GetCorrectWmiNameSpace шнура ();
            если (шнур. Равные (correctNamespace, шнур. Опорожните))
            {
                возвратите ложное;
            }
            зашнуруйте вопрос = шнур. Форма («выберите * от SqlServiceAdvancedProperty где SQLServiceType = 1 и PropertyName = «instanceID» ");
            getSqlEngine ManagementObjectSearcher = новое ManagementObjectSearcher (correctNamespace, вопрос);
            если (getSqlEngine.Get, то (). == 0 отсчета)
            {
                возвращенное ложное;
            }
            Console.WriteLine («примеры базы данных сервера SQL открыли: ");
            instanceName шнура = шнур. Пусто;
            serviceName шнура = шнур. Пусто;
            вариант шнура = шнур. Пусто;
            вариант шнура = шнур. Пусто;
            Console.WriteLine («вариант варианта имени примера \ t ServiceName \ t \ t \ t»);
            foreach (sqlEngine ManagementObject в getSqlEngine.Get ())
            {
                serviceName = sqlEngine [«ServiceName»] .ToString ();
                instanceName = GetInstanceNameFromServiceName (serviceName);
                вариант = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, «вариант»);
                вариант = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, «SKUNAME»);
                Console.Write («{0} \ t», instanceName);
                Console.Write («{0} \ t», serviceName);
                Console.Write («{0} \ t», вариант);
                Console.WriteLine («{0} \ t», вариант);
            }
            возвращенно true;
        }
         ///
        Метод /// возвращает правильно namespace SQL для использования обнаружить примеры сервера SQL.
        /// 
        namespace ///, котор нужно использовать для того чтобы обнаружить сервера instances SQL
        общественный статический шнур GetCorrectWmiNameSpace ()
        {
            Зашнуруйте wmiNamespaceToUse = «корень \ \ \ Майкрософт \ sqlserver»;
            Namespaces List = новое List ();
            попытка
            {
                // перечисляет все примеры WMI 
                тип __namespace WMI //.
                nsClass ManagementClass =
                    новое ManagementClass (
                    новое ManagementScope (wmiNamespaceToUse),
                    новое ManagementPath («__namespace»),
                    null);
                foreach (ManagementObject ns внутри
                    nsClass.GetInstances ())
                {
                    namespaces. Добавьте (ns [«имя»] .ToString ());
                }
            }
            уловите (ManagementException e)
            {
                Console.WriteLine («исключение =» + e.Message);
            }
            если (namespaces. Отсчет > 0)
            {
                если (namespaces. Содержит («ComputerManagement10»))
                {
                    namespace //use katmai+
                    wmiNamespaceToUse = wmiNamespaceToUse + «\ \ ComputerManagement10»;
                }
                еще если (namespaces. Содержит («ComputerManagement»))
                {
                    namespace //use yukon
                    wmiNamespaceToUse = wmiNamespaceToUse + «\ \ ComputerManagement»;
                }
                еще
                {
                    wmiNamespaceToUse = шнур. Пусто;
                }
            }
            еще
            {
                wmiNamespaceToUse = шнур. Пусто;
            }
            возвращенное wmiNamespaceToUse;
        }
         ///
        метод /// извлекает имя примера от имени обслуживания
        /// 
        name= " serviceName " > 
        общественный статический шнур GetInstanceNameFromServiceName (serviceName шнура)
        {
            если (! string.IsNullOrEmpty (serviceName))
            {
                если (шнур. Равные (serviceName, «MSSQLSERVER», StringComparison.OrdinalIgnoreCase))
                {
                    возвращенное serviceName;
                }
                еще
                {
                    возвращенное serviceName.Substring (serviceName.IndexOf («$") + 1, serviceName.Length - serviceName.IndexOf («$») - 1);
                }
            }
            еще
            {
                возвращенный шнур. Пусто;
            }
        }
         ///
        /// возвращает стоимость имущества WMI для, котор дали именени собственности для определенного имени обслуживания сервера SQL
        /// 
        имя обслуживания >The " serviceName " name= 
        namespace wmi >The " wmiNamespace " name= 
        именя собственности >The " propertyName " name= 
        /// 
        общественный статический шнур GetWmiPropertyValueForEngineService (serviceName шнура, wmiNamespace шнура, propertyName шнура)
        {
            propertyValue шнура = шнур. Пусто;
            зашнуруйте вопрос = String.Format («выберите * от SqlServiceAdvancedProperty где SQLServiceType = 1 и PropertyName = «{0}» и ServiceName = «{1}» «, propertyName, serviceName);
            propertySearcher ManagementObjectSearcher = новое ManagementObjectSearcher (wmiNamespace, вопрос);
            foreach (sqlEdition ManagementObject в propertySearcher.Get ())
            {
                propertyValue = sqlEdition [«PropertyStrValue»] .ToString ();
            }
            возвращенное propertyValue;
        }
    }
}
class=

Ответ : Как обнаружить если установлен сервер 2005 или 2008 SQL

Мой источник как раз искал специфически пример сервера SQL курьерский, я находил меньшее время и после того как я доработано Кодему перечислить примеры основало немногую на Кодем C#, котор вы вывесили на верхнюю часть.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
функция GetSQLInstances (примеры: TStrings): Булевско;
  функция GetInstanceNameFromServiceName (const ServiceName: шнур): шнур;
  const
    SQLSERVER = «MSSQLSERVER»;
  начните
    если ServiceName = '' после этого
      Результат: = ''
    еще
    начните
      если UpperCase (ServiceName) = SQLSERVER после этого
        Результат: = ServiceName
      еще
        Результат: = экземпляр (ServiceName, Pos («$», ServiceName) +1, длина (ServiceName) - Pos («$», ServiceName));
    конец;
  конец;
  функция GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: шнур): шнур;
  var
    SWL: TSWbemLocator;
    SWServ: ISWbemServices;
    SWObjSet: ISWbemObjectSet;
    Enum: IEnumVariant;
    tempObj: OleVariant;
    Значение: Кардинально;    
    SWObj: ISWbemObject;
    SWPropSet: ISWbemPropertySet;
    sQry: шнур;
  начните
    SWL: = TSWbemLocator.Create (ноли);
    попытка
      попытка
        SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', 0, ноль);
        sQry: = форма ('выберите * от SqlServiceAdvancedProperty где SQLServiceType = 1 и PropertyName = '' %s '' и ServiceName = '' ''' %s, [PropertyName, ServiceName]);
        SWObjSet: = SWServ.ExecQuery (sQry, «WQL», wbemFlagReturnImmediately, ноли);
        если SWObjSet.Count = 0 после этого
        начните
          Результат: = '';
          Выход;
        конец;
        //
        Enum: = (_NewEnum SWObjSet.) как IEnumVariant;
        пока (Enum.Next (1, tempObj, значение) = S_OK) сделайте
        начните
          SWObj: = IUnknown (tempObj) как SWBemObject;
          SWPropSet: = SWObj.Properties_;
          Результат: = SWPropSet.Item («PropertyStrValue», 0). Get_Value;
        конец;
      за исключением
        на e: Исключение делает
        начните
          //WriteLn («ошибка: » + e.Message);
          Результат: = '';
        конец;
      конец;
    окончательно
      SWL.Disconnect;
      FreeAndNil (SWL);
    конец;
  конец;
const
  WMI_NAMESPACES_TO_CHECK: блок [0..1] шнура = («ComputerManagement», «ComputerManagement10»);
var
  GetSqlExpress: TSWbemLocator;
  Обслуживания: ISWbemServices;
  ObjectSet: ISWbemObjectSet;
  SObject: ISWbemObject;
  propSet: ISWbemPropertySet;
  Enum: IEnumVariant;
  tempObj: OleVariant;
  Значение: Кардинально;
  //
  sQry: шнур;
  serviceName: шнур;
  WMIPath: шнур;
  iий: Интежер;
начните
  Результат: = ложно;
  Instances.Clear;
  для I: = от 0 до 1 делают
  начните
    WMIPath: = форма («корень \ Майкрософт \ SqlServer \ %s», [WMI_NAMESPACES_TO_CHECK [I]]);
    GetSqlExpress: = TSWbemLocator.Create (ноли);
    попытка
      попытка
        Обслуживания: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', 0, ноль);
        sQry: = форма ('ВЫБЕРИТЕ * ОТ SqlServiceAdvancedProperty ГДЕ SQLServiceType = 1 И PropertyName = '' ''' instanceID, [{SQL_INSTANCE}]);
        ObjectSet: = Services.ExecQuery (sQry, «WQL», wbemFlagReturnImmediately, ноли);
        если ObjectSet.Count = 0 после этого
        начните
          Продолжайтесь;
        конец;
        //
        Enum: = (_NewEnum ObjectSet.) как IEnumVariant;
        пока (Enum.Next (1, tempObj, значение) = S_OK) сделайте
        начните
          SObject: = IUnknown (tempObj) как SWBemObject;
          propSet: = SObject.Properties_;
          serviceName: = propSet.Item («ServiceName», 0). Get_Value;
          Обслуживание //, пример, вариант, вариант
          Instances.Add (форма («%s, %s, %s, %s»,
            [serviceName,
              GetInstanceNameFromServiceName (serviceName),
              GetWMIPropertyValueForEngineService («вариант», serviceName, WMIPath),
              GetWMIPropertyValueForEngineService («SKUNAME», serviceName, WMIPath)]));
        конец;
        Результат: = True;
      за исключением
        на e: Исключение делает
        начните
          //WriteLn («ошибка: » + e.Message);
          Результат: = ложно;
        конец;
      конец;
    окончательно
      GetSqlExpress.Disconnect;
      FreeAndNil (GetSqlExpress);
    конец;
  конец;
конец;
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us