檢測office的應用程式的版本,
public class OfficeVersion { /// <summary> /// 擷取Access的提供者 /// </summary> /// <returns>是否設定成功</returns> public static string GetAccessProvider() { //檢測客戶機器上安裝的Access版本2000/2003/2007/2010 string version = OfficeVersion.GetAppVersion("Access"); string provider = string.Empty; switch (version) { case "Access 2007": case "Access 2010": provider = "Microsoft.ACE.OLEDB.12.0"; break; case "Access 2000": case "Access xp": case "Access 2003": //default: provider = "Microsoft.Jet.OLEDB.4.0"; break; } return provider; } //檢測客戶機器上安裝的應用程式版本2000/2003/2007/2010 public static string GetAppVersion(string officeAppName) { string result = string.Empty; RegistryOperate registry = new RegistryOperate("LOCAL_MACHINE"); string[] officeKey = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\"); List<string> listOfficeKey = new List<string>(officeKey); if (listOfficeKey.Count < 1) { return "No Office"; } if (listOfficeKey.Contains("14.0"))//Office 2010 { string[] keyItem = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\14.0"); List<string> subKeyItem = new List<string>(keyItem); if (IsExistSubKey(@"SOFTWARE\\Microsoft\\Office\\14.0", officeAppName)) { result = string.Format("{0} 2010", officeAppName); } } if (result.Equals("") && listOfficeKey.Contains("12.0"))//Office 2007 { string[] keyItem = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\12.0"); List<string> subKeyItem = new List<string>(keyItem); if (IsExistSubKey(@"SOFTWARE\\Microsoft\\Office\\12.0", officeAppName)) { result = string.Format("{0} 2007", officeAppName); } } if (result.Equals("") && listOfficeKey.Contains("11.0"))//Office 2003 { string[] keyItem = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\11.0"); List<string> subKeyItem = new List<string>(keyItem); if (IsExistSubKey(@"SOFTWARE\\Microsoft\\Office\\11.0", officeAppName)) { result = string.Format("{0} 2003", officeAppName); } } if (result.Equals("") && listOfficeKey.Contains("10.0"))//Office xp { string[] keyItem = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\10.0"); List<string> subKeyItem = new List<string>(keyItem); if (IsExistSubKey(@"SOFTWARE\\Microsoft\\Office\\10.0", officeAppName)) { result = string.Format("{0} xp", officeAppName); } } if (result.Equals("") && listOfficeKey.Contains("9.0"))//Office 2000 { string[] keyItem = registry.GetAllSubKey(@"SOFTWARE\\Microsoft\\Office\\9.0"); List<string> subKeyItem = new List<string>(keyItem); if (IsExistSubKey(@"SOFTWARE\\Microsoft\\Office\\9.0", officeAppName)) { result = string.Format("{0} 2000", officeAppName); } } return result; } /// <summary> /// 判斷註冊表路徑是否存在子項 /// </summary> /// <param name="path">註冊表路徑</param> /// <param name="value">子項名</param> /// <returns></returns> private static bool IsExistSubKey(string path, string key) { RegistryOperate registry = new RegistryOperate("LOCAL_MACHINE"); string[] keyItem = registry.GetAllSubKey(path); List<string> listKeyItem = new List<string>(keyItem); if (listKeyItem.Contains(key)) { return true; } return false; } }