因为程序需要判断office2010版本以上才可以使,网上找了好多检测office版本都不能用,
参考https://jingyan.baidu.com/article/2c8c281d0844084008252a8f.html
根据注册表信息检查,代码改进了一下office2007 2010,2013,2016都能检测到
public void checkOffice() { bool ifused = false; int officeVersion = 0; RegistryKey rk = Registry.LocalMachine; RegistryKey akey07 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Excel\InstallRoot\");//查询2007 RegistryKey akey10 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\14.0\Excel\InstallRoot\");//查询2010 RegistryKey akey13 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\15.0\Excel\InstallRoot\");//查询2013 RegistryKey akey16 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\16.0\Excel\InstallRoot\");//查询2016 //检查本机是否安装Office2007 if (akey07 != null) { string office07 = akey07.GetValue("Path").ToString(); if (File.Exists(office07 + "Excel.exe")) { ifused = true; officeVersion = 2007; } } //检查本机是否安装Office2010 if (akey10 != null) { string office10 = akey10.GetValue("Path").ToString(); if (File.Exists(office10 + "Excel.exe")) { ifused = true; officeVersion = 2010; } } //检查本机是否安装Office2013 if (akey13 != null) { string office13 = akey13.GetValue("Path").ToString(); if (File.Exists(office13 + "Excel.exe")) { ifused = true; officeVersion = 2013; } } //检查本机是否安装Office2016 if (akey16 != null) { string office16 = akey16.GetValue("Path").ToString(); if (File.Exists(office16 + "Excel.exe")) { ifused = true; officeVersion = 2016; } } Debug.WriteLine("result:"+ ifused.ToString()); Debug.WriteLine("office:" + officeVersion.ToString()); }
debug调试结果:
result:True
office:2016