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