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);
конец;
конец;
конец;
|