如何检测MS-Office的安装版本?
有谁知道什么是检测哪个版本的Office安装最好的方法? 此外,如果有多个版本的Office安装,我想知道他们是什么版本。 如果我可以检测到已安装的Excel的特定版本,则可以获得奖励。
检查安装的Office版本的一种方法是检查感兴趣的Office应用程序的InstallRoot
registry项。
例如,如果您想检查是否安装了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.exe
, excel.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上,您需要在SOFTWARE
和Microsoft
碎屑之间插入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; } }