Vraag : Hoe te te ontdekken als SQL de Server 2005 of 2008 geïnstalleerdl is

Hallo,

How kan ik als SQL de Server 2005 of 2008 op een computer van binnen een toepassing van Delphi ontdekken geïnstalleerdb is?
Preferably door registry.

I geen te gebruiken vond één of andere code in C# die dit zou kunnen doen??? (zie verder).
" codeBody "
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:
using Systeem;
het gebruiken van System.Collections.Generic;
het gebruiken van System.Linq;
het gebruiken van System.Text;
het gebruiken van System.Management;
namespace ExpressDetection
{
    klassen Programma
    {
        statische nietige Leiding (koord [] args)
        {
            als (! EnumerateSQLInstances ())
            {
                Console.WriteLine („Er zijn geen instanties van SQL Server 2005 of SQL Server geïnstalleerdea 2008“);
            }
        }
        /// 
        /// somt alle SQL instanties van de Server op de machine op.
        /// 
        /// 
        openbare statische bool EnumerateSQLInstances ()
        {
            koord correctNamespace = GetCorrectWmiNameSpace ();
            als (koord. Evenaart (correctNamespace, koord. Leeg))
            {
                valse terugkeer;
            }
            koord vraag = koord. Formaat („selecteer * uit SqlServiceAdvancedProperty waar SQLServiceType = 1 en PropertyName = „instanceID““);
            getSqlEngine van ManagementObjectSearcher = nieuwe ManagementObjectSearcher (correctNamespace, vraag);
            als (getSqlEngine.Get (). Telling == 0)
            {
                valse terugkeer;
            }
            Console.WriteLine („SQL ontdekte het gegevensbestandinstanties van de Server: “);
            koord instanceName = koord. Leeg;
            koord serviceName = koord. Leeg;
            koord versie = koord. Leeg;
            koord uitgave = koord. Leeg;
            Console.WriteLine („de Versie \ t van de Uitgave \ t van de Naam \ t ServiceName \ t van de Instantie“);
            foreach (sqlEngine ManagementObject in getSqlEngine.Get ())
            {
                serviceName = sqlEngine [„ServiceName“] .ToString ();
                instanceName = GetInstanceNameFromServiceName (serviceName);
                versie = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, „Versie“);
                uitgave = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, „SKUNAME“);
                Console.Write („{0} \ t“, instanceName);
                Console.Write („{0} \ t“, serviceName);
                Console.Write („{0} \ t“, uitgave);
                Console.WriteLine („{0} \ t“, versie);
            }
            ware terugkeer;
        }
        /// 
        /// de Methode keert correcte SQL terug namespace gebruiken om SQL de instanties van de Server te ontdekken.
        /// 
        /// namespace aan gebruik om SQL Server instances te ontdekken
        openbaar statisch koord GetCorrectWmiNameSpace ()
        {
            Koord wmiNamespaceToUse = „wortel \ \ Microsoft \ \ sqlserver“;
            List namespaces = nieuwe List ();
            probeer
            {
                // somt alle instanties WMI van op
                // __namespace klasse WMI.
                ManagementClass nsClass =
                    nieuwe ManagementClass (
                    nieuwe ManagementScope (wmiNamespaceToUse),
                    nieuwe ManagementPath („__namespace“),
                    ongeldig);
                foreach (ManagementObject NS binnen
                    nsClass.GetInstances ())
                {
                    namespaces. Voeg toe (NS [„Naam“] .ToString ());
                }
            }
            vangst (ManagementException e)
            {
                Console.WriteLine („Uitzondering =“ + e.Message);
            }
            als (namespaces. Telling > 0)
            {
                als (namespaces. Bevat („ComputerManagement10“))
                {
                    //use katmai+ namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + „\ \ ComputerManagement10“;
                }
                als anders (namespaces. Bevat („ComputerManagement“))
                {
                    //use yukon namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + „\ \ ComputerManagement“;
                }
                anders
                {
                    wmiNamespaceToUse = koord. Leeg;
                }
            }
            anders
            {
                wmiNamespaceToUse = koord. Leeg;
            }
            terugkeer wmiNamespaceToUse;
        }
        /// 
        /// de methode haalt de instantienaam uit de de dienstnaam
        /// 
        /// 
        /// 
        openbaar statisch koord GetInstanceNameFromServiceName (koord serviceName)
        {
            als (! string.IsNullOrEmpty (serviceName))
            {
                als (koord. Evenaart (serviceName, „MSSQLSERVER“, StringComparison.OrdinalIgnoreCase))
                {
                    terugkeer serviceName;
                }
                anders
                {
                    terugkeer serviceName.Substring (serviceName.IndexOf („$“) + 1, serviceName.Length - serviceName.IndexOf („$“) - 1);
                }
            }
            anders
            {
                terugkeer koord. Leeg;
            }
        }
        /// 
        /// keert de WMI bezitswaarde voor een bepaalde bezitsnaam voor terug een bepaalde SQL de dienstNaam van de Server
        /// 
        /// The de dienstnaam voor de SQL motor van de Server serivce aan vraag for
        /// The namespace om met  te verbinden
        /// The bezitsnaam de waarvan waarde required is
        /// 
        openbaar statisch koord GetWmiPropertyValueForEngineService (koord serviceName, koord wmiNamespace, koord propertyName)
        {
            koord propertyValue = koord. Leeg;
            koord vraag = String.Format („selecteer * uit SqlServiceAdvancedProperty waar SQLServiceType = 1 en PropertyName = „{0}“ en ServiceName = „{1}“ „, propertyName, serviceName);
            ManagementObjectSearcher propertySearcher = nieuwe ManagementObjectSearcher (wmiNamespace, vraag);
            foreach (sqlEdition ManagementObject in propertySearcher.Get ())
            {
                propertyValue = sqlEdition [„PropertyStrValue“] .ToString ();
            }
            terugkeer propertyValue;
        }
    }
}

Antwoord : Hoe te te ontdekken als SQL de Server 2005 of 2008 geïnstalleerdl is

Mijn bron zocht enkel een specifiek Uitdrukkelijk geval van SQL Server, heb ik wat tijd gevonden en gewijzigd de code om de instanties op te sommen baseerde een weinig op de code C# u bij de bovenkant postte.
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:
functie GetSQLInstances (Instanties: TStrings): Van Boole;
  functie GetInstanceNameFromServiceName (const ServiceName: koord): koord;
  const
    SQLSERVER = „MSSQLSERVER“;
  begin
    als ServiceName = '' toen
      Resultaat: = ''
    anders
    begin
      als In hoofdletters (ServiceName) = SQLSERVER toen
        Resultaat: = ServiceName
      anders
        Resultaat: = Exemplaar (ServiceName, Pos („$“, ServiceName) +1, Lengte (ServiceName) - Pos („$“, ServiceName));
    eind;
  eind;
  functie GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: koord): koord;
  var
    SWL: TSWbemLocator;
    SWServ: ISWbemServices;
    SWObjSet: ISWbemObjectSet;
    Enum: IEnumVariant;
    tempObj: OleVariant;
    Waarde: Hoofd;    
    SWObj: ISWbemObject;
    SWPropSet: ISWbemPropertySet;
    sQry: koord;
  begin
    SWL: = TSWbemLocator.Create (nul);
    probeer
      probeer
        SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', 0, nul);
        sQry: = Formaat ('selecteer * uit SqlServiceAdvancedProperty waar SQLServiceType = 1 en PropertyName = '' %s '' en ServiceName = '' %s ''', [PropertyName, ServiceName]);
        SWObjSet: = sQry SWServ.ExecQuery (, „WQL“, wbemFlagReturnImmediately, nul);
        als SWObjSet.Count = 0 toen
        begin
          Resultaat: = '';
          Uitgang;
        eind;
        //
        Enum: = (. _NewEnum SWObjSet) als IEnumVariant;
        terwijl (Enum.Next (1, tempObj, Waarde) = S_OK) 
        begin
          SWObj: = IUnknown (tempObj) als SWBemObject;
          SWPropSet: = SWObj.Properties_;
          Resultaat: = SWPropSet.Item („PropertyStrValue“, 0). Get_Value;
        eind;
      behalve
        op E: De uitzondering 
        begin
          //WriteLn („Fout: “ + e.Message);
          Resultaat: = '';
        eind;
      eind;
    tot slot
      SWL.Disconnect;
      FreeAndNil (SWL);
    eind;
  eind;
const
  WMI_NAMESPACES_TO_CHECK: serie [0..1] van koord = („ComputerManagement“, „ComputerManagement10“);
var
  GetSqlExpress: TSWbemLocator;
  De diensten: ISWbemServices;
  ObjectSet: ISWbemObjectSet;
  SObject: ISWbemObject;
  propSet: ISWbemPropertySet;
  Enum: IEnumVariant;
  tempObj: OleVariant;
  Waarde: Hoofd;
  //
  sQry: koord;
  serviceName: koord;
  WMIPath: koord;
  i: Geheel;
begin
  Resultaat: = Vals;
  Instances.Clear;
  voor I: = 0 tot 1
  begin
    WMIPath: = Formaat („wortel \ Microsoft \ SqlServer \ %s“, [WMI_NAMESPACES_TO_CHECK [I]]);
    GetSqlExpress: = TSWbemLocator.Create (nul);
    probeer
      probeer
        De diensten: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', 0, nul);
        sQry: = Formaat ('SELECTEER * UIT SqlServiceAdvancedProperty WAAR SQLServiceType = 1 EN PropertyName = '' instanceID ''', [{SQL_INSTANCE}]);
        ObjectSet: = sQry Services.ExecQuery (, „WQL“, wbemFlagReturnImmediately, nul);
        als ObjectSet.Count = 0 toen
        begin
          Ga verder;
        eind;
        //
        Enum: = (. _NewEnum ObjectSet) als IEnumVariant;
        terwijl (Enum.Next (1, tempObj, Waarde) = S_OK) 
        begin
          SObject: = IUnknown (tempObj) als SWBemObject;
          propSet: = SObject.Properties_;
          serviceName: = propSet.Item („ServiceName“, 0). Get_Value;
          De Dienst van //, Instantie, Versie, Uitgave
          Instances.Add (Formaat („%s, %s, %s, %s“,
            [serviceName,
              GetInstanceNameFromServiceName (serviceName),
              GetWMIPropertyValueForEngineService („Versie“, serviceName, WMIPath),
              GetWMIPropertyValueForEngineService („SKUNAME“, serviceName, WMIPath)]));
        eind;
        Resultaat: = Waar;
      behalve
        op E: De uitzondering 
        begin
          //WriteLn („Fout: “ + e.Message);
          Resultaat: = Vals;
        eind;
      eind;
    tot slot
      GetSqlExpress.Disconnect;
      FreeAndNil (GetSqlExpress);
    eind;
  eind;
eind;
Andere oplossingen  
 
programming4us programming4us