(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:
|
funkcja GetSQLInstances (Przykład: TStrings): Boolowski;
funkcja GetInstanceNameFromServiceName (const ServiceName: sznurek): sznurek;
const
SQLSERVER = "MSSQLSERVER";
zaczynać
jeżeli ServiceName = '' wtedy
Rezultat: = ''
inny
zaczynać
jeżeli UpperCase (ServiceName) = SQLSERVER wtedy
Rezultat: = ServiceName
inny
Rezultat: = Kopia (ServiceName, Pos ("$", ServiceName) +1, Długość (ServiceName) - Pos ("$", ServiceName));
końcówka;
końcówka;
funkcja GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: sznurek): sznurek;
var
SWL: TSWbemLocator;
SWServ: ISWbemServices;
SWObjSet: ISWbemObjectSet;
Enum: IEnumVariant;
tempObj: OleVariant;
Wartość: Kardynał;
SWObj: ISWbemObject;
SWPropSet: ISWbemPropertySet;
sQry: sznurek;
zaczynać
SWL: = TSWbemLocator.Create (zero);
próba
próba
SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', (0), zero);
sQry: = Format ('wybiórka * od SqlServiceAdvancedProperty dokąd SQLServiceType = (1) i PropertyName = '' %s '' i ServiceName = '' %s ''', [PropertyName, ServiceName]);
SWObjSet: = SWServ.ExecQuery (sQry, "WQL", wbemFlagReturnImmediately, zero);
jeżeli SWObjSet.Count = (0) wtedy
zaczynać
Rezultat: = '';
Wyjście;
końcówka;
//
Enum: = (SWObjSet. _NewEnum) jako IEnumVariant;
podczas gdy (Enum.Next ((1), tempObj, Wartość) = S_OK)
zaczynać
SWObj: = IUnknown (tempObj) jako SWBemObject;
SWPropSet: = SWObj.Properties_;
Rezultat: = SWPropSet.Item ("PropertyStrValue", (0)). Get_Value;
końcówka;
oprócz
na E: Wyjątek
zaczynać
//WriteLn ("Błąd: " + e.Message);
Rezultat: = '';
końcówka;
końcówka;
w końcu
SWL.Disconnect;
FreeAndNil (SWL);
końcówka;
końcówka;
const
WMI_NAMESPACES_TO_CHECK: szyk [0..1] sznurek = ("ComputerManagement", "ComputerManagement10");
var
GetSqlExpress: TSWbemLocator;
Usługa: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
propSet: ISWbemPropertySet;
Enum: IEnumVariant;
tempObj: OleVariant;
Wartość: Kardynał;
//
sQry: sznurek;
serviceName: sznurek;
WMIPath: sznurek;
i: Integer;
zaczynać
Rezultat: = Fałszywy;
Instances.Clear;
dla i: = (0) (1)
zaczynać
WMIPath: = Format ("korzeń \ Microsoft \ SqlServer \ %s", [WMI_NAMESPACES_TO_CHECK [i]]);
GetSqlExpress: = TSWbemLocator.Create (zero);
próba
próba
Usługa: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', (0), zero);
sQry: = Format ('WYBIÓRKA * OD SqlServiceAdvancedProperty DOKĄD SQLServiceType = (1) I PropertyName = '' instanceID ''', [{SQL_INSTANCE}]);
ObjectSet: = Services.ExecQuery (sQry, "WQL", wbemFlagReturnImmediately, zero);
jeżeli ObjectSet.Count = (0) wtedy
zaczynać
Kontynuować;
końcówka;
//
Enum: = (ObjectSet. _NewEnum) jako IEnumVariant;
podczas gdy (Enum.Next ((1), tempObj, Wartość) = S_OK)
zaczynać
SObject: = IUnknown (tempObj) jako SWBemObject;
propSet: = SObject.Properties_;
serviceName: = propSet.Item ("ServiceName", (0)). Get_Value;
// Usługa, Przykład, Wersja, Wydanie
Instances.Add (Format ("%s, %s, %s, %s",
[serviceName,
GetInstanceNameFromServiceName (serviceName),
GetWMIPropertyValueForEngineService ("Wersja", serviceName, WMIPath),
GetWMIPropertyValueForEngineService ("SKUNAME", serviceName, WMIPath)]));
końcówka;
Rezultat: = Prawdziwy;
oprócz
na E: Wyjątek
zaczynać
//WriteLn ("Błąd: " + e.Message);
Rezultat: = Fałszywy;
końcówka;
końcówka;
w końcu
GetSqlExpress.Disconnect;
FreeAndNil (GetSqlExpress);
końcówka;
końcówka;
końcówka;
|