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:
|
funzione GetSQLInstances (casi: TStrings): Booleano;
funzione GetInstanceNameFromServiceName (const ServiceName: stringa): stringa;
const
SQLSERVER = “MSSQLSERVER„;
cominciare
se ServiceName = '' allora
Risultato: = ''
altrimenti
cominciare
se maiuscola (ServiceName) = SQLSERVER allora
Risultato: = ServiceName
altrimenti
Risultato: = copia (ServiceName, posizione (“$„, ServiceName) +1, lunghezza (ServiceName) - posizione (“$„, ServiceName));
estremità;
estremità;
funzione GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: stringa): stringa;
varietà
SWL: TSWbemLocator;
SWServ: ISWbemServices;
SWObjSet: ISWbemObjectSet;
Enum: IEnumVariant;
tempObj: OleVariant;
Valore: Cardinale;
SWObj: ISWbemObject;
SWPropSet: ISWbemPropertySet;
sQry: stringa;
cominciare
SWL: = TSWbemLocator.Create (zero);
prova
prova
SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', 0, zero);
sQry: = disposizione ('selezionare * a partire da SqlServiceAdvancedProperty dove SQLServiceType = 1 e PropertyName = '' %s '' e ServiceName = '' ''' di %s, [PropertyName, ServiceName]);
SWObjSet: = SWServ.ExecQuery (sQry, “WQL„, wbemFlagReturnImmediately, zero);
se SWObjSet.Count = 0 allora
cominciare
Risultato: = '';
Uscita;
estremità;
//
Enum: = (_NewEnum di SWObjSet.) come IEnumVariant;
mentre (Enum.Next (1, tempObj, valore) = S_OK) fare
cominciare
SWObj: = IUnknown (tempObj) come SWBemObject;
SWPropSet: = SWObj.Properties_;
Risultato: = SWPropSet.Item (“PropertyStrValue„, 0). Get_Value;
estremità;
tranne
sulla E: L'eccezione fa
cominciare
//WriteLn (“errore: „ + e.Message);
Risultato: = '';
estremità;
estremità;
infine
SWL.Disconnect;
FreeAndNil (SWL);
estremità;
estremità;
const
WMI_NAMESPACES_TO_CHECK: allineamento [0..1] di stringa = (“ComputerManagement„, “ComputerManagement10„);
varietà
GetSqlExpress: TSWbemLocator;
Servizi: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
propSet: ISWbemPropertySet;
Enum: IEnumVariant;
tempObj: OleVariant;
Valore: Cardinale;
//
sQry: stringa;
serviceName: stringa;
WMIPath: stringa;
i: Numero intero;
cominciare
Risultato: = falso;
Instances.Clear;
per la i: = 0 - 1 fanno
cominciare
WMIPath: = disposizione (“radice \ Microsoft \ SqlServer \ %s„, [WMI_NAMESPACES_TO_CHECK [i]]);
GetSqlExpress: = TSWbemLocator.Create (zero);
prova
prova
Servizi: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', 0, zero);
sQry: = disposizione ('SELEZIONARE * A PARTIRE da SqlServiceAdvancedProperty DOVE SQLServiceType = 1 E PropertyName = '' ''' del instanceID, [{SQL_INSTANCE}]);
ObjectSet: = Services.ExecQuery (sQry, “WQL„, wbemFlagReturnImmediately, zero);
se ObjectSet.Count = 0 allora
cominciare
Continuare;
estremità;
//
Enum: = (_NewEnum di ObjectSet.) come IEnumVariant;
mentre (Enum.Next (1, tempObj, valore) = S_OK) fare
cominciare
SObject: = IUnknown (tempObj) come SWBemObject;
propSet: = SObject.Properties_;
serviceName: = propSet.Item (“ServiceName„, 0). Get_Value;
Servizio di //, caso, versione, edizione
Instances.Add (disposizione (“%s, %s, %s, %s„,
[serviceName,
GetInstanceNameFromServiceName (serviceName),
GetWMIPropertyValueForEngineService (“versione„, serviceName, WMIPath),
GetWMIPropertyValueForEngineService (“SKUNAME„, serviceName, WMIPath)]));
estremità;
Risultato: = allineare;
tranne
sulla E: L'eccezione fa
cominciare
//WriteLn (“errore: „ + e.Message);
Risultato: = falso;
estremità;
estremità;
infine
GetSqlExpress.Disconnect;
FreeAndNil (GetSqlExpress);
estremità;
estremità;
estremità;
|