欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

获取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平台下 安装office 版本位数信息

 

 

以上在windows 7 以及 windows server 2008 r2 系统测试,可以使用;      如有不合理之处,请大家多多指教。

如果您觉得本文对您有帮助,欢迎点击“推荐”按钮,您的“推荐”将是我最大的写作动力!(/:微笑)欢迎转载,转载请注明出处。