Fråga : Hur man avkänner, om SQL-serveren 2005 eller 2008 installeras

Hi

How kan mig avkänna, om SQL-serveren 2005 eller 2008 installeras på en dator inifrån en Delphi applikation?
Preferably inte genom att använda registry.
I, grundar något kodifierar i C# att styrkan gör denna??? (se nedanfört).
> för
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:
" codeBody " system för class= för using "; using System.Collections.Generic; using System.Linq; using System.Text; using System.Management; namespace ExpressDetection { klassificera programet { utan laga kraft huvudsakligt för statisk elektricitet (stränga [] args), { om (! EnumerateSQLInstances ()) { Console.WriteLine (”det finns inget anföra som exempel av SQL-serveren 2005 eller installerad SQL-server 2008”); } } /// /// Enumerates all SQL-server anföra som exempel på bearbeta med maskin. /// /// offentlig statisk elektricitetbool EnumerateSQLInstances () { stränga correctNamespace = GetCorrectWmiNameSpace (); om (stränga. Jämliken (correctNamespace, stränger. Töm)), { gå falskt tillbaka; } stränga queryen = stränger. Formatera (”välj * från SqlServiceAdvancedProperty var SQLServiceType = 1 och PropertyName = ”instanceID””); ManagementObjectSearcher getSqlEngine = nya ManagementObjectSearcher (correctNamespace, query); om (getSqlEngine.Get (). Räknings== 0) { återgångt falskt; } Console.WriteLine (”SQL-serverdatabas anföra som exempel upptäckt: ”); stränga instanceName = stränger. Töm; stränga serviceName = stränger. Töm; stränga versionen = stränger. Töm; stränga upplagan = stränger. Töm; Console.WriteLine (”anföra som exempel känd \ för t ServiceName \ t för upplaga \ t version \ t”); foreach (ManagementObject sqlEngine i getSqlEngine.Get ()) { serviceName = sqlEngine [”ServiceName”] .ToString (); instanceName = GetInstanceNameFromServiceName (serviceName); version = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, ”version”); upplaga = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, ”SKUNAME”); Console.Write (”{0} \ t”, instanceName); Console.Write (”{0} \ t”, serviceName); Console.Write (”{0} \ t”, upplaga); Console.WriteLine (”{0} \ t”, version); } återgångt true; } /// /// metodretur den korrekta SQL-namespacen som ska användas för att avkänna SQL-serveren, anföra som exempel. /// /// namespace som ska användas för att avkänna SQL-serveren instances den offentliga statisk elektricitet stränger GetCorrectWmiNameSpace () { Stränga wmiNamespaceToUse = ”rotar \ \ Microsoft \ \ sqlserver”; List namespaces = nya List (); försök { // Enumerate all WMI anföra som exempel av // __namespace WMI klassificerar. ManagementClass nsClass = nya ManagementClass ( nya ManagementScope (wmiNamespaceToUse), nya ManagementPath (”__namespace”), ogiltigt); foreach (ManagementObject ns in nsClass.GetInstances ()) { namespaces. Tillfoga (ns [”namnge”], .ToString ()); } } fånga (ManagementException e) { Console.WriteLine (”undantag =” + e.Message); } om (namespaces. Räkning > 0) { om (namespaces. Innehåller (”ComputerManagement10”)) { //use katmai+ namespace wmiNamespaceToUse = wmiNamespaceToUse + ”\ \ ComputerManagement10”; } om annars (namespaces. Innehåller (”ComputerManagement”)) { //use yukon namespace wmiNamespaceToUse = wmiNamespaceToUse + ”\ \ ComputerManagement”; } annars { wmiNamespaceToUse = stränger. Tomt; } } annars { wmiNamespaceToUse = stränger. Tomt; } återgång wmiNamespaceToUse; } /// /// metodextrakt som anföra som exempel som är känd från det tjänste-, namnger /// /// /// den offentliga statisk elektricitet stränger GetInstanceNameFromServiceName (stränga serviceName), { om (! string.IsNullOrEmpty (serviceName)) { om (stränga. Jämliken (serviceName, ”MSSQLSERVER”, StringComparison.OrdinalIgnoreCase)) { återgång serviceName; } annars { återgång serviceName.Substring (serviceName.IndexOf (”$”) + 1, serviceName.Length - serviceName.IndexOf (”$”) - 1); } } annars { gå tillbaka stränger. Töm; } } /// /// går WMI-egenskapen tillbaka värderar för en given egenskap som är känd för en tjänste- detaljSQL-server, namnger /// tjänste- >The " för serviceName " för /// namespace för wmi för >The " för wmiNamespace " för /// den kända egenskapen för >The " för propertyName " för /// /// den offentliga statisk elektricitet stränger GetWmiPropertyValueForEngineService (stränga serviceName, stränger wmiNamespace, stränger propertyName), { stränga propertyValue = stränger. Töm; stränga queryen = String.Format (”välj * från SqlServiceAdvancedProperty var SQLServiceType = 1 och PropertyName = ”{0}” och ServiceName = ”{1}” ”, propertyName, serviceName); ManagementObjectSearcher propertySearcher = nya ManagementObjectSearcher (wmiNamespace, query); foreach (ManagementObject sqlEdition i propertySearcher.Get ()) { propertyValue = sqlEdition [”PropertyStrValue”] .ToString (); } återgång propertyValue; } } }
" klar "

Svar : Hur man avkänner, om SQL-serveren 2005 eller 2008 installeras

Min källa sökte efter precis en närmare detalj anföra som exempel av den uttryckliga SQL-serveren, har jag funnit lite en tid, och ändrat kodifiera att enumerate anföra som exempel baserade a lite på C#en kodifierar dig postade upptill.
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:
fungera GetSQLInstances (anföra som exempel: TStrings): Boolean;
  fungera GetInstanceNameFromServiceName (const ServiceName: stränga): stränga;
  const
    SQLSERVER = ”MSSQLSERVER”;
  börja
    om ServiceName = '' därefter
      Resultat: = '',
    annars
    börja
      om bokstav (ServiceName) = SQLSERVER därefter
        Resultat: = ServiceName
      annars
        Resultat: = kopiera (ServiceName, pos. (”$”, ServiceName) +1, längden (ServiceName) - pos. (”$”, ServiceName));
    avsluta;
  avsluta;
  fungera GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: stränga): stränga;
  var
    SWL: TSWbemLocator;
    SWServ: ISWbemServices;
    SWObjSet: ISWbemObjectSet;
    Enum: IEnumVariant;
    tempObj: OleVariant;
    Värdera: Kardinal;    
    SWObj: ISWbemObject;
    SWPropSet: ISWbemPropertySet;
    sQry: stränga;
  börja
    SWL: = TSWbemLocator.Create (noll);
    försök
      försök
        SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', 0, noll);
        sQry: = formatera ('välj * från SqlServiceAdvancedProperty var SQLServiceType = 1 och PropertyName = '' %s '' och ServiceName = '' %s-''', [PropertyName, ServiceName]);
        SWObjSet: = sQry SWServ.ExecQuery (, ”WQL”, wbemFlagReturnImmediately, noll);
        om SWObjSet.Count = 0 därefter
        börja
          Resultat: = '';
          Gå ut;
        avsluta;
        //
        Enum: = (SWObjSet. _NewEnum) som IEnumVariant;
        stunder (Enum.Next (1, tempObj, värderar), = S_OK) gör
        börja
          SWObj: = IUnknown (tempObj) som SWBemObject;
          SWPropSet: = SWObj.Properties_;
          Resultat: = SWPropSet.Item (”PropertyStrValue”, 0). Get_Value;
        avsluta;
      undanta
        på E: Undantag gör
        börja
          //WriteLn (”fel: ” + e.Message);
          Resultat: = '';
        avsluta;
      avsluta;
    slutligen
      SWL.Disconnect;
      FreeAndNil (SWL);
    avsluta;
  avsluta;
const
  WMI_NAMESPACES_TO_CHECK: samling [0..1] av stränger = (”ComputerManagement”, ”ComputerManagement10”);
var
  GetSqlExpress: TSWbemLocator;
  Servar: ISWbemServices;
  ObjectSet: ISWbemObjectSet;
  SObject: ISWbemObject;
  propSet: ISWbemPropertySet;
  Enum: IEnumVariant;
  tempObj: OleVariant;
  Värdera: Kardinal;
  //
  sQry: stränga;
  serviceName: stränga;
  WMIPath: stränga;
  i: Heltal;
börja
  Resultat: = falskt;
  Instances.Clear;
  för I: = 0 till 1 gör
  börja
    WMIPath: = formatera (”rota \ Microsoft \ SqlServer \ %s”, [WMI_NAMESPACES_TO_CHECK [I]]);
    GetSqlExpress: = TSWbemLocator.Create (noll);
    försök
      försök
        Servar: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', 0, noll);
        sQry: = formatera ('VÄLJ * FRÅN SqlServiceAdvancedProperty VAR SQLServiceType = 1 OCH PropertyName = '' instanceID''', [{SQL_INSTANCE}]);
        ObjectSet: = sQry Services.ExecQuery (, ”WQL”, wbemFlagReturnImmediately, noll);
        om ObjectSet.Count = 0 därefter
        börja
          Fortsätta;
        avsluta;
        //
        Enum: = (ObjectSet. _NewEnum) som IEnumVariant;
        stunder (Enum.Next (1, tempObj, värderar), = S_OK) gör
        börja
          SObject: = IUnknown (tempObj) som SWBemObject;
          propSet: = SObject.Properties_;
          serviceName: = propSet.Item (”ServiceName”, 0). Get_Value;
          Tjänste- //, anföra som exempel, versionen, upplaga
          Instances.Add (formatera (”%s, %s, %s, %s”,
            [serviceName,
              GetInstanceNameFromServiceName (serviceName),
              GetWMIPropertyValueForEngineService (”version”, serviceName, WMIPath),
              GetWMIPropertyValueForEngineService (”SKUNAME”, serviceName, WMIPath)]));
        avsluta;
        Resultat: = True;
      undanta
        på E: Undantag gör
        börja
          //WriteLn (”fel: ” + e.Message);
          Resultat: = falskt;
        avsluta;
      avsluta;
    slutligen
      GetSqlExpress.Disconnect;
      FreeAndNil (GetSqlExpress);
    avsluta;
  avsluta;
avsluta;
Andra lösningar  
 
programming4us programming4us