如何检测MS-Office的安装版本?

有谁知道什么是检测哪个版本的Office安装最好的方法? 此外,如果有多个版本的Office安装,我想知道他们是什么版本。 如果我可以检测到已安装的Excel的特定版本,则可以获得奖励。

检查安装的Office版本的一种方法是检查感兴趣的Office应用程序的InstallRootregistry项。

例如,如果您想检查是否安装了Word 2007,则应检查是否存在以下registry项:

 HKLM\Software\Microsoft\Office\12.0\Word\InstallRoot::Path 

该条目包含可执行文件的path。

将12.0(对于Office 2007)replace为相应的版本号:

 Office 97  -  7.0
 Office 98  -  8.0
 Office 2000  -  9.0
 Office XP  -  10.0
 Office 2003  -  11.0
 Office 2007  -  12.0
 Office 2010  -  14.0(原文如此!)
办公室2013  -  15.0
办公室2016  -  16.0

其他应用程序具有相似的键:

 HKLM\Software\Microsoft\Office\12.0\Excel\InstallRoot::Path HKLM\Software\Microsoft\Office\12.0\PowerPoint\InstallRoot::Path 

或者你可以检查所有应用程序的通用根path:

 HKLM\Software\Microsoft\Office\12.0\Common\InstallRoot::Path 

另一个选项,不使用特定的registry键将是使用MSIEnumProducts API查询MSI数据库, MSIEnumProducts所述。

另外,不同Office版本的并行安装不是由Microsoft正式支持的。 他们有些工作,但是可能会产生不良影响和不一致。

怎么样HKEY_CLASSES_ROOT \ Word.Application \ CurVer?

如果您在64位计算机上安装了32位Office,则可能需要检查是否存在“SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \”,用适当的版本replace12.0。 对于安装在64位Windows 7上的Office 2007,情况确实如此。

请注意,Office 2010(== 14.0)是第一个存在64位版本的Office。

我发现这个CodeProject帮助我解决了这个问题: http : //www.codeproject.com/Articles/26520/Getting-Office-s-Version

 namespace Software_Info_v1._0 { using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop; public class MS_Office { public string GetOfficeVersion() { string sVersion = string.Empty; Microsoft.Office.Interop.Word.Application appVersion = new Microsoft.Office.Interop.Word.Application(); appVersion.Visible = false; switch (appVersion.Version.ToString()) { case "7.0": sVersion = "95"; break; case "8.0": sVersion = "97"; break; case "9.0": sVersion = "2000"; break; case "10.0": sVersion = "2002"; break; case "11.0": sVersion = "2003"; break; case "12.0": sVersion = "2007"; break; case "14.0": sVersion = "2010"; break; default: sVersion = "Too Old!"; break; } Console.WriteLine("MS office version: " + sVersion); return null; } } } 

为什么不检查HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe] ,其中[office.exe]代表特定的office产品exe文件名,例如winword.exeexcel.exe等等你有可执行文件的path,并检查该文件的版本。

如何检查文件的版本: 在C ++ / C#中

对这种做法有任何批评?

如果我可以检测到已安装的Excel的特定版本,则可以获得奖励。

我知道这个问题很久以前就已经被提出并回答了,但是同样的问题让我很忙,直到我做了这个观察:

要获取内部版本号(例如15.0.4569.1506 ),请探测HKLM\SOFTWARE\Microsoft\Office\[VER]\Common\ProductVersion::LastProduct ,其中[VER]是主要版本号(Office 2007为12.0,Office为14.0 2010年,办公室2013年15.0)。

在64位Windows上,您需要在SOFTWAREMicrosoft碎屑之间插入Wow6432Node ,而不考虑Office安装位数。

在我的机器上,这给出了原始安装版本的版本信息。 例如,对于Office 2010,这些数字与此处列出的数字相匹配,并且与“ File > Help报告的版本不同,该版本反映了由修补程序应用的修补程序。

  public string WinWordVersion { get { string _version = string.Empty; Word.Application WinWord = new Word.Application(); switch (WinWord.Version.ToString()) { case "7.0": _version = "95"; break; case "8.0": _version = "97"; break; case "9.0": _version = "2000"; break; case "10.0": _version = "2002"; break; case "11.0": _version = "2003"; break; case "12.0": _version = "2007"; break; case "14.0": _version = "2010"; break; case "15.0": _version = "2013"; break; case "16.0": _version = "2016"; break; default: break; } return WinWord.Caption + " " + _version; } }