检测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;
}
}