获取Windows平台下 安装office 版本位数信息
程序员文章站
2022-06-11 16:22:15
最近在处理客户端安装程序过程,有一个需求:需要检测Windows平台下安装office 版本信息以及获取使用的office是32 位还是64 位; 当检测出office 位数为64位时,提示当前office 不支持程序的使用。 找了很多资料,一般情况下,是不能直接获取office 安装位数信息的;加 ......
最近在处理客户端安装程序过程,有一个需求:需要检测windows平台下安装office 版本信息以及获取使用的office是32 位还是64 位; 当检测出office 位数为64位时,提示当前office 不支持程序的使用。
找了很多资料,一般情况下,是不能直接获取office 安装位数信息的;加上windows 32 位与64位系统 ,安装使用的office在不同windows系统下注册表位置不一样,久久不能解决这个需求。
话不多说,先记录一下代码。
注意事项:
environment.is64bitoperatingsystem ......//判断当前windows是否为64位操作系统 // 支持 .netframe work 4.0+
registrykey.openbasekey .... // 支持 .netframe work 4.0+
//确定当前操作系统是否为 64 位操作系统 if (environment.is64bitoperatingsystem) // 64 位操作系统 registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry64); else // 32 位操作系统 registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry32);
检测注册表是否有wps安装信息:
1 /// <summary> 2 /// 检测本地是否安装wps 3 /// </summary> 4 /// <returns></returns> 5 public string checkwpsexsitstatus() 6 { 7 string wpsjudge = string.empty; 8 try 9 { 10 //获取 windows 注册表基项 hkey_local_machine。 11 registrykey registrykey = registry.localmachine; 12 //确定当前操作系统是否为 64 位操作系统(支持.netframe work 4.0+) 13 if (environment.is64bitoperatingsystem) 14 // 64 位操作系统 15 registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry64); 16 else 17 // 32 位操作系统 18 registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry32); 19 20 //读取注册表信息 32 21 registrykey wpskey1 = registrykey.opensubkey(@"software\kingsoft\office\6.0\common"); 22 if (wpskey1 != null) 23 { 24 string filewps = wpskey1.getvalue("installroot").tostring(); 25 if (file.exists(filewps + @"\office6\et.exe")) 26 { 27 wpsjudge = "本电脑安装了wps+path=" + @"software\kingsoft\office\6.0\common"; 28 } 29 } 30 //读取注册表信息 6432 31 registrykey wpskey2 = registrykey.opensubkey(@"software\wow6432node\kingsoft\office\6.0\common"); 32 if (wpskey1 != null) 33 { 34 string filewps = wpskey2.getvalue("installroot").tostring(); 35 if (file.exists(filewps + @"\office6\et.exe")) 36 { 37 wpsjudge = "本电脑安装了wps+path=" + @"software\wow6432node\kingsoft\office\6.0\common"; 38 } 39 } 40 41 if (wpsjudge == string.empty) 42 wpsjudge = "未安装wps!"; 43 } 44 catch (exception ex) 45 { 46 wpsjudge = "检测失败!" + ex.message; 47 } 48 49 return wpsjudge; 50 }
检测office 安装情况:
1 /// <summary> 2 /// 检测本地是否安装office 3 /// </summary> 4 /// <param name="officeversion">office 版本代号:14.0(office2010)</param> 5 /// <returns></returns> 6 public string checkofficeexsitstatus(string officeversion) 7 { 8 string officejudge = string.empty; 9 string officeversioninfo = string.empty; 10 if (string.isnullorempty(officeversion)) 11 return officejudge; 12 try 13 { 14 //是否安装office 15 bool isinstall = false; 16 //系统版本 17 bool issys64bit = true; 18 //office 安装位数 1=32(nowow6432node);2=64(wow6432node) 19 int iofficesetinfo = 0; 20 21 //获取 windows 注册表基项 hkey_local_machine。 22 registrykey registrykey = registry.localmachine; 23 //确定当前操作系统是否为 64 位操作系统(支持.netframe work 4.0+;4.0以下 可以去除当前判断部分) 24 if (environment.is64bitoperatingsystem) 25 // 64 位操作系统 26 registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry64); 27 else 28 // 32 位操作系统 29 issys64bit = false; registrykey = registrykey.openbasekey(registryhive.localmachine, registryview.registry32); 30 31 // 32位操作系统? 32 registrykey officekey1 = registrykey.opensubkey(@"software\microsoft\office\" + officeversion + @"\word\installroot"); 33 if (officekey1 != null) 34 { 35 if (officekey1.getvalue("path") != null) 36 { 37 string filewps = officekey1.getvalue("path").tostring(); 38 if (file.exists(filewps + "winword.exe")) 39 { 40 iofficesetinfo = 1; 41 isinstall = true; 43 } 44 } 45 } 46 //64位操作系统安装32位软件 ? 47 registrykey officekey2 = registrykey.opensubkey(@"software\wow6432node\microsoft\office\" + officeversion + @"\word\installroot"); 48 if (officekey2 != null) 49 { 50 if (officekey2.getvalue("path") != null) 51 { 52 string filewps = officekey2.getvalue("path").tostring(); 53 if (file.exists(filewps + "winword.exe")) 54 { 55 iofficesetinfo = 2; 56 isinstall = true; 58 } 59 } 60 } 61 //已经安装 62 if (isinstall) 63 { 64 //64位操作系统 65 if (issys64bit) 66 { 67 //使用office 位数信息 68 if (iofficesetinfo == 1) 69 { 70 officeversioninfo = "当前安装office 版本为64位"; 71 } 72 else if (iofficesetinfo == 2) 73 { 74 officeversioninfo = "当前安装office 版本为32位"; 75 } 76 } 77 else 78 { 79 if (iofficesetinfo == 1) 80 { 81 officeversioninfo = "当前安装office 版本为32位"; 82 } 83 else if (iofficesetinfo == 2) 84 { 85 officeversioninfo = "当前安装office 版本为64位"; 86 } 87 } 88 officeversioninfo = officeversioninfo + $"issys64bit={issys64bit},iofficesetinfo={iofficesetinfo}"; 89 } 90 91 } 92 catch (exception ex) 93 { 94 officeversioninfo = "检测失败!" + ex.message; 95 } 96 97 return officeversioninfo; 98 }
获取office 版本名称
1 /// <summary> 2 /// 返回office 版本(暂不包含office2019 ) 3 /// </summary> 4 /// <param name="versionnum">office 版本代号</param> 5 /// <returns></returns> 6 public string getofficeversionname(string versionnum) 7 { 8 string strdesc = string.empty; 9 switch (versionnum) 10 { 11 case "8.0": { strdesc = "office97"; } break; 12 case "9.0": { strdesc = "office2000"; } break; 13 case "10.0": { strdesc = "officexp(2002)"; } break; 14 case "11.0": { strdesc = "office2003"; } break; 15 case "12.0": { strdesc = "office2007"; } break; 16 case "14.0": { strdesc = "office2010"; } break; 17 case "15.0": { strdesc = "office2013"; } break; 18 case "16.0": { strdesc = "office2016"; } break; 19 default: strdesc = "未找到匹配内容:version=" + versionnum; break; 20 } 21 22 return strdesc; 23 }
测试代码:
1 /// <summary> 2 /// 获取office 安装情况 3 /// </summary> 4 public void getversionisinstall() 5 { 6 var strarray = new string[] { "8.0", "9.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0" }; 7 foreach (var item in strarray) 8 { 9 var setinfo = checkofficeexsitstatus(item);//获取安装office 情况信息 10 if (!string.isnullorempty(setinfo)) 11 console.writeline("系统安装office版本为:" + getofficeversionname(item)); 12 console.writeline("item=" + item + ";" + setinfo); 13 } 14 }
测试效果截图:
以上在windows 7 以及 windows server 2008 r2 系统测试,可以使用; 如有不合理之处,请大家多多指教。
如果您觉得本文对您有帮助,欢迎点击“推荐”按钮,您的“推荐”将是我最大的写作动力!(/:微笑)欢迎转载,转载请注明出处。