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

来源:互联网 发布:孤寡老人数据 编辑:程序博客网 时间:2024/05/17 00:08

在编写毕业论文辅助编辑软件时,需要检测用户是否安装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的版本。

0 0