c#查询部署机器的Office应用程序的版本

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值