您的位置:首页 > 编程语言 > C#

C#通过操作注册表检测office版本

2017-01-17 11:36 1221 查看
在编写毕业论文辅助编辑软件时,需要检测用户是否安装office以及office的版本,后来在网上找到通过注册表检测的方法,不过由于Windows32位软件和64位软件操作的注册表是不同的,关于这个问题,可以看我转载的博客C#32位程序与64位程序读\写注册表的区别

由于毕业论文辅助编辑软件是一款32位的软件,使用该方法无法访问64位的注册表,通过百度查阅,我修改了代码让它访问64位的注册表来检测office版本。

贴上代码
        /// <summary>
        /// 通过注册表检测office版本
        /// </summary>
        /// <param name="OfficeVersion">储存office版本的字符串</param>
        /// <returns></returns>
        private static bool OfficeIsInstall(out string OfficeVersion)
        {

            OfficeVersion = "";
            Microsoft.Win32.RegistryKey regKey = null;
            Microsoft.Win32.RegistryKey regSubKey1 = null;
            Microsoft.Win32.RegistryKey regSubKey2 = null;
            Microsoft.Win32.RegistryKey regSubKey3 = null;
            Microsoft.Win32.RegistryKey regSubKey4 = null;

            regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
            regSubKey1 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot", false);
            regSubKey2 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot", false);
            regSubKey3 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot", false);
            regSubKey4 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot", false);
            if (regSubKey4 != null && regSubKey4.GetValue("Path") != null)
            {
                OfficeVersion = "2013";
                return true;
            }
            else if (regSubKey3 != null && regSubKey3.GetValue("Path") != null)
            {
                OfficeVersion = "2010";
                return true;
            }
            else if (regSubKey2 != null && regSubKey2.GetValue("Path") != null)
            {
                OfficeVersion = "2007";
                return true;
            }
            else if (regSubKey1 != null && regSubKey1.GetValue("Path") != null)
            {
                OfficeVersion = "2003";
                return true;
            }

            else
            {

                regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
                regSubKey1 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot", false);
                regSubKey2 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot", false);
                regSubKey3 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot", false);
                regSubKey4 = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot", false);
                if (regSubKey4 != null && regSubKey4.GetValue("Path") != null)
                {
                    OfficeVersion = "2013";
                    return true;
                }
                else if (regSubKey3 != null && regSubKey3.GetValue("Path") != null)
                {
                    OfficeVersion = "2010";
                    return true;
                }
                else if (regSubKey2 != null && regSubKey2.GetValue("Path") != null)
                {
                    OfficeVersion = "2007";
                    return true;
                }
                else if (regSubKey1 != null && regSubKey1.GetValue("Path") != null)
                {
                    OfficeVersion = "2003";
                    return true;
                }
                else
                {
                    return false;
                }
            }

        }


通过先访问32位注册表,再访问64位注册表来检测office的版本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 注册表 office