2009-09-24 53 views

回答

1

以下是我已經在不久前寫的...這是不完全一樣,但它可能給你如何做到這一點的想法。在這裏我列舉和檢查在SQL Server的Express版,但你應該能夠改變......你需要去註冊表中找到的SQL Server SKUNAME和SKULEVEL 2005

public static bool IsSqlExpressPresent(string strInstance, Utility.Log log) 
{ 
    const string edition = "Express Edition"; 
    string instance = "MSSQL$" + strInstance.ToUpper(); 
    const int spLevel = 1; 

    bool fCheckEdition = false; 
    bool fCheckSpLevel = false; 

    try 
    { 
     // Run a WQL query to return information about SKUNAME and SPLEVEL about installed instances 
     // of the SQL Engine. 
     ManagementObjectSearcher getSqlExpress = 
       new ManagementObjectSearcher("root\\Microsoft\\SqlServer\\ComputerManagement", 
       "select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and ServiceName = '" 
       + instance + "' and (PropertyName = 'SKUNAME' or PropertyName = 'SPLEVEL')"); 

     // If nothing is returned, SQL Express isn't installed. 
     if (getSqlExpress.Get().Count == 0) 
     { 
      return false; 
     } 

     // If something is returned, verify it is the correct edition and SP level. 
     foreach (ManagementObject sqlEngine in getSqlExpress.Get()) 
     { 
      if (sqlEngine["ServiceName"].ToString().Equals(instance)) 
      { 
       switch (sqlEngine["PropertyName"].ToString()) 
       { 
        case "SKUNAME": 
         // Check if this is Express Edition or Express Edition with Advanced Services 
         fCheckEdition = sqlEngine["PropertyStrValue"].ToString().Contains(edition); 
         break; 

        case "SPLEVEL": 
         // Check if the instance matches the specified level 
         fCheckSpLevel = int.Parse(sqlEngine["PropertyNumValue"].ToString()) >= spLevel; 
         //fCheckSpLevel = sqlEngine["PropertyNumValue"].ToString().Contains(spLevel); 
         break; 
       } 
      } 
     } 

     if (fCheckEdition & fCheckSpLevel) 
     { 
      return true; 
     } 
     return false; 
    } 
    catch (ManagementException e) 
    { 
     if (log != null) 
     { 
      log.Write(
       Utility.LogState.Error, 
       "Database", 
       "Could not find OfficeClip instance of SqlExpress: " + e.ErrorCode + ", " + e.Message 
       ); 
     } 
     return false; 
    } 
} 
+0

完美!謝謝。 – GuyBehindtheGuy 2009-09-26 19:45:45

相關問題