Pytanie : Dlaczego jeżeli SQL Serwer 2005 lub 2008 instalować

Cześć,

How móc I jeżeli SQL Serwer 2005 lub 2008 instalować na komputer z wewnątrz Delphi zastosowanie?
Preferably nie the registry.

I zakładać niektóre kod w C# który można
(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 System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ExpressDetection
{
    klasowy Program
    {
        statyczny kawitacyjny Główny (sznurek [] args)
        {
            jeżeli (! EnumerateSQLInstances ())
            {
                Console.WriteLine ("Tam  być żadny przykład SQL Serwer 2005 lub SQL Serwer 2008 instalować");
            }
        }
        /// 
        /// Wyliczać wszystkie SQL Serwer przykład na the maszyna.
        /// 
        /// 
        jawny statyczny bool EnumerateSQLInstances ()
        {
            smyczkowy correctNamespace = GetCorrectWmiNameSpace ();
            jeżeli (sznurek. Równy (correctNamespace, sznurek. Opróżniać))
            {
                wracać fałszywy;
            }
            zawiązywać zapytanie = sznurek. Format ("wybiórka * od SqlServiceAdvancedProperty dokąd SQLServiceType = (1) i PropertyName = "instanceID" ");
            ManagementObjectSearcher getSqlEngine = nowy ManagementObjectSearcher (correctNamespace, zapytanie);
            jeżeli (getSqlEngine.Get (). Hrabiowski == (0))
            {
                powrotny fałszywy;
            }
            Console.WriteLine ("SQL Serwer baza danych przykład odkrywać: ");
            smyczkowy instanceName = sznurek. Pusty;
            smyczkowy serviceName = sznurek. Pusty;
            smyczkowy wersja = sznurek. Pusty;
            smyczkowy wydanie = sznurek. Pusty;
            Console.WriteLine ("Przykład Imię \ t ServiceName \ t Wydanie \ t Wersja \ t");
            foreach (ManagementObject sqlEngine w getSqlEngine.Get ())
            {
                serviceName = sqlEngine ["ServiceName"] .ToString ();
                instanceName = GetInstanceNameFromServiceName (serviceName);
                wersja = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, "Wersja");
                wydanie = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, "SKUNAME");
                Console.Write ("{(0)} \ t", instanceName);
                Console.Write ("{(0)} \ t", serviceName);
                Console.Write ("{(0)} \ t", wydanie);
                Console.WriteLine ("{(0)} \ t", wersja);
            }
            powrót prawdziwy;
        }
        /// 
        /// Metoda wracać the poprawny SQL namespace SQL Serwer przykład.
        /// 
        /// namespace SQL Serwer instances
        jawny ładunek elektrostatyczny sznurek GetCorrectWmiNameSpace ()
        {
            Smyczkowy wmiNamespaceToUse = "korzeń \ \ Microsoft \ \ sqlserver";
            List namespaces = nowy List ();
            próba
            {
                // Wyliczać wszystkie WMI przykład
                // __namespace WMI klasa.
                ManagementClass nsClass =
                    nowy ManagementClass (
                    nowy ManagementScope (wmiNamespaceToUse),
                    nowy ManagementPath ("__namespace"),
                    null);
                foreach (ManagementObject ns wewnątrz
                    nsClass.GetInstances ())
                {
                    namespaces. Dodawać (ns ["Imię"] .ToString ());
                }
            }
            łapać (ManagementException e)
            {
                Console.WriteLine ("Wyjątek =" + e.Message);
            }
            jeżeli (namespaces. Obliczenie > (0))
            {
                jeżeli (namespaces. Zawierać ("ComputerManagement10"))
                {
                    //use katmai+ namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + "\ \ ComputerManagement10";
                }
                inny jeżeli (namespaces. Zawierać ("ComputerManagement"))
                {
                    //use yukon namespace
                    wmiNamespaceToUse = wmiNamespaceToUse + "\ \ ComputerManagement";
                }
                inny
                {
                    wmiNamespaceToUse = sznurek. Pusty;
                }
            }
            inny
            {
                wmiNamespaceToUse = sznurek. Pusty;
            }
            powrotny wmiNamespaceToUse;
        }
        /// 
        /// metoda wydobywać the przykład imię od the usługowy imię
        /// 
        /// 
        /// 
        jawny ładunek elektrostatyczny sznurek GetInstanceNameFromServiceName (smyczkowy serviceName)
        {
            jeżeli (! string.IsNullOrEmpty (serviceName))
            {
                jeżeli (sznurek. Równy (serviceName, "MSSQLSERVER", StringComparison.OrdinalIgnoreCase))
                {
                    powrotny serviceName;
                }
                inny
                {
                    powrotny serviceName.Substring (serviceName.IndexOf ("$") + (1), serviceName.Length - serviceName.IndexOf ("$") - (1));
                }
            }
            inny
            {
                powrotny sznurek. Pusty;
            }
        }
        /// 
        /// Wracać the WMI wartość nieruchomości dla dawać majątkowy imię dla szczegół SQL Serwer usługa Imię
        /// 
        /// The usługa imię dla the SQL Serwer parowozowy serivce query for
        /// The wmi namespace 
        /// The majątkowy imię wartość być required
        /// 
        jawny ładunek elektrostatyczny sznurek GetWmiPropertyValueForEngineService (smyczkowy serviceName, smyczkowy wmiNamespace, smyczkowy propertyName)
        {
            smyczkowy propertyValue = sznurek. Pusty;
            smyczkowy zapytanie = String.Format ("wybiórka * od SqlServiceAdvancedProperty dokąd SQLServiceType = (1) i PropertyName = "{(0)}" i ServiceName = "{(1)}" ", propertyName, serviceName);
            ManagementObjectSearcher propertySearcher = nowy ManagementObjectSearcher (wmiNamespace, zapytanie);
            foreach (ManagementObject sqlEdition w propertySearcher.Get ())
            {
                propertyValue = sqlEdition ["PropertyStrValue"] .ToString ();
            }
            powrotny propertyValue;
        }
    }
}

Odpowiedź : Dlaczego jeżeli SQL Serwer 2005 lub 2008 instalować

Mój źródło właśnie patrzeć dla odmianowy przykład SQL Serwer Ekspresowy, I znajdować troszkę czas i modyfikować the kod the przykład opierać się troszkę na the C# kod ty wysyłać przy the wierzchołek.
(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;
Inne rozwiązania  
 
programming4us programming4us