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: 6: 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 { Kategorie Programm { Static leeres Haupt (Schnur [] args) { wenn (! EnumerateSQLInstances ()) { Console.WriteLine („es gibt keine Fälle von SQL-Server 2005 oder von angebrachtem SQL-Server 2008“); } } /// /// zählt alle SQL-Serverfälle auf der Maschine auf. /// /// allgemeines statisches bool EnumerateSQLInstances () { Schnur correctNamespace = GetCorrectWmiNameSpace (); wenn (Schnur. Gleichgestellte (correctNamespace, Schnur. Leeren)) { falsches zurückbringen; } Frage = Schnur aufreihen. Format („* von SqlServiceAdvancedProperty vorwählen in dem SQLServiceType = 1 und PropertyName = „instanceID“ "); ManagementObjectSearcher getSqlEngine = neues ManagementObjectSearcher (correctNamespace, Frage); wenn (getSqlEngine.Get (). Zählimpuls == 0) { Rückholfalsches; } Console.WriteLine („SQL-Serverdatenbankfälle entdeckten: "); Schnur instanceName = Schnur. Leer; Schnur serviceName = Schnur. Leer; Schnurversion = Schnur. Leer; Schnurausgabe = Schnur. Leer; Console.WriteLine („Version des Fall-Namen-\ t ServiceName \ t der Ausgaben-\ t \ t“); foreach (ManagementObject sqlEngine in getSqlEngine.Get ()) { serviceName = sqlEngine [„ServiceName“] .ToString (); instanceName = GetInstanceNameFromServiceName (serviceName); Version = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, „Version“); Ausgabe = GetWmiPropertyValueForEngineService (serviceName, correctNamespace, „SKUNAME“); Console.Write („{0} \ t“, instanceName); Console.Write („{0} \ t“, serviceName); Console.Write („{0} \ t“, Ausgabe); Console.WriteLine („{0} \ t“, Version); } Rückhol ausrichten; } /// ///-Methode bringt das korrekte SQL-namespace zurück, um zu verwenden, um SQL-Serverfälle zu ermitteln. /// , um SQL-Server zu verwenden /// namespace instances zu ermitteln allgemeine statische Schnur GetCorrectWmiNameSpace () { wmiNamespaceToUse aufreihen = „Wurzel \ \ Microsoft\ \ sqlserver“; List namespaces = neues List (); Versuch { // zählen alle WMI Fälle von auf // __namespace WMI Kategorie. ManagementClass nsClass = neues ManagementClass ( neues ManagementScope (wmiNamespaceToUse), neues ManagementPath („__namespace“), Null); foreach (ManagementObject ns innen nsClass.GetInstances ()) { namespaces. Hinzufügen (ns [„Name“] .ToString ()); } } sich verfangen (ManagementException e) { Console.WriteLine („Ausnahme =“ + e.Message); } wenn (namespaces. Zählimpuls > 0) { wenn (namespaces. Enthalten („ComputerManagement10“)) { namespace //use katmai+ wmiNamespaceToUse = wmiNamespaceToUse + „\ \ ComputerManagement10“; } sonst wenn (namespaces. Enthält („ComputerManagement“)) { namespace //use Yukon wmiNamespaceToUse = wmiNamespaceToUse + „\ \ ComputerManagement“; } sonst { wmiNamespaceToUse = Schnur. Leer; } } sonst { wmiNamespaceToUse = Schnur. Leer; } RückholwmiNamespaceToUse; } /// ///-Methode extrahiert den Fallnamen vom Service-Namen /// /// /// allgemeine statische Schnur GetInstanceNameFromServiceName (Schnur serviceName) { wenn (! string.IsNullOrEmpty (serviceName)) { wenn (Schnur. Gleichgestellte (serviceName, „MSSQLSERVER“, StringComparison.OrdinalIgnoreCase)) { RückholserviceName; } sonst { RückholserviceName.Substring (serviceName.IndexOf („$") + 1, serviceName.Length - serviceName.IndexOf („$“) - 1); } } sonst { Rückholschnur. Leer; } } /// /// bringt den WMI Vermögenswert für einen gegebenen Eigentumnamen für einen bestimmten SQL-Serverservice Namen zurück /// /// The Service-Name, damit das SQL-Servermaschine serivce for fragt /// The wmi namespace, zum an anzuschließen /// The Eigentumname, dessen Wert required ist /// allgemeine statische Schnur GetWmiPropertyValueForEngineService (Schnur serviceName, Schnur wmiNamespace, Schnur propertyName) { Schnur propertyValue = Schnur. Leer; Frage = String.Format aufreihen („* von SqlServiceAdvancedProperty vorwählen in dem SQLServiceType = 1 und PropertyName = „{0}“ und ServiceName = „{1}“ „, propertyName, serviceName); ManagementObjectSearcher propertySearcher = neues ManagementObjectSearcher (wmiNamespace, Frage); foreach (ManagementObject sqlEdition in propertySearcher.Get ()) { propertyValue = sqlEdition [„PropertyStrValue“] .ToString (); } RückholpropertyValue; } } }
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: 6: 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:
Funktion GetSQLInstances (Fälle: TStrings): Boolesch; Funktion GetInstanceNameFromServiceName (const ServiceName: Schnur): Schnur; const SQLSERVER = „MSSQLSERVER“; anfangen wenn ServiceName = '' dann Resultat: = '' sonst anfangen wenn Versalien (ServiceName) = SQLSERVER dann Resultat: = ServiceName sonst Resultat: = Kopie (ServiceName, Position („$“, ServiceName) +1, Länge (ServiceName) - Position („$“, ServiceName)); Ende; Ende; Funktion GetWMIPropertyValueForEngineService (const PropertyName, ServiceName, WMINameSpace: Schnur): Schnur; var SWL: TSWbemLocator; SWServ: ISWbemServices; SWObjSet: ISWbemObjectSet; Enum: IEnumVariant; tempObj: OleVariant; Wert: Hauptsächlich; SWObj: ISWbemObject; SWPropSet: ISWbemPropertySet; sQry: Schnur; anfangen SWL: = TSWbemLocator.Create (Null); Versuch Versuch SWServ: = SWL.ConnectServer ('', WMINameSpace, '', '', '', '', 0, Null); sQry: = Format ('* von SqlServiceAdvancedProperty vorwählen in dem SQLServiceType = 1 und PropertyName = '' %s '' und ServiceName = '' %s ''', [PropertyName, ServiceName]); SWObjSet: = SWServ.ExecQuery (sQry, „WQL“ wbemFlagReturnImmediately Null); wenn SWObjSet.Count = 0 dann anfangen Resultat: = ''; Ausgang; Ende; // Enum: = (SWObjSet. _NewEnum) als IEnumVariant; während (Enum.Next (1, tempObj, Wert) = S_OK) tun anfangen SWObj: = IUnknown (tempObj) als SWBemObject; SWPropSet: = SWObj.Properties_; Resultat: = SWPropSet.Item („PropertyStrValue“, 0). Get_Value; Ende; ausgenommen auf E: Ausnahme tun anfangen //WriteLn („Störung: “ + e.Message); Resultat: = ''; Ende; Ende; schließlich SWL.Disconnect; FreeAndNil (SWL); Ende; Ende; const WMI_NAMESPACES_TO_CHECK: Reihe [0..1] Schnur = („ComputerManagement“, „ComputerManagement10“); var GetSqlExpress: TSWbemLocator; Dienstleistungen: ISWbemServices; ObjectSet: ISWbemObjectSet; SObject: ISWbemObject; propSet: ISWbemPropertySet; Enum: IEnumVariant; tempObj: OleVariant; Wert: Hauptsächlich; // sQry: Schnur; serviceName: Schnur; WMIPath: Schnur; I: Ganze Zahl; anfangen Resultat: = falsch; Instances.Clear; für i: = tun 0 bis 1 anfangen WMIPath: = Format („Wurzel \ Microsoft \ SqlServer \ %s“, [WMI_NAMESPACES_TO_CHECK [i]]); GetSqlExpress: = TSWbemLocator.Create (Null); Versuch Versuch Dienstleistungen: = GetSqlExpress.ConnectServer ('', WMIPath, '', '', '', '', 0, Null); sQry: = Format ('* VON SqlServiceAdvancedProperty VORWÄHLEN IN DEM SQLServiceType = 1 UND PropertyName = '' instanceID ''', [{SQL_INSTANCE}]); ObjectSet: = Services.ExecQuery (sQry, „WQL“ wbemFlagReturnImmediately Null); wenn ObjectSet.Count = 0 dann anfangen Fortfahren; Ende; // Enum: = (ObjectSet. _NewEnum) als IEnumVariant; während (Enum.Next (1, tempObj, Wert) = S_OK) tun anfangen SObject: = IUnknown (tempObj) als SWBemObject; propSet: = SObject.Properties_; serviceName: = propSet.Item („ServiceName“, 0). Get_Value; //-Service, Fall, Version, Ausgabe Instances.Add (Format („%s, %s, %s, %s“, [serviceName, GetInstanceNameFromServiceName (serviceName), GetWMIPropertyValueForEngineService („Version“, serviceName, WMIPath), GetWMIPropertyValueForEngineService („SKUNAME“, serviceName, WMIPath)])); Ende; Resultat: = ausrichten; ausgenommen auf E: Ausnahme tun anfangen //WriteLn („Störung: “ + e.Message); Resultat: = falsch; Ende; Ende; schließlich GetSqlExpress.Disconnect; FreeAndNil (GetSqlExpress); Ende; Ende; Ende;