有谁知道检测安装了哪个版本的 Office 的最佳方法是什么?另外,如果安装了多个版本的 Office,我想知道它们是什么版本。如果我能检测到安装的 Excel 的特定版本,那将是一个额外的好处。
最佳答案
检查已安装的 Office 版本的一种方法是检查感兴趣的 Office 应用程序的 InstallRoot
注册表项。
例如,如果您想检查是否安装了 Word 2007,您应该检查是否存在以下注册表项:
HKLM\Software\Microsoft\Office\12.0\Word\InstallRoot::Path
此条目包含可执行文件的路径。
用相应的版本号替换 12.0(适用于 Office 2007):
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 (sic!) Office 2013 - 15.0 Office 2016 - 16.0 Office 2019 - 16.0 (sic!)
The other applications have similar keys:
HKLM\Software\Microsoft\Office\12.0\Excel\InstallRoot::Path
HKLM\Software\Microsoft\Office\12.0\PowerPoint\InstallRoot::Path
或者您可以检查所有应用程序的公共(public)根路径:
HKLM\Software\Microsoft\Office\12.0\Common\InstallRoot::Path
不使用特定注册表项的另一种选择是使用 MSIEnumProducts
API 查询 MSI 数据库,如 here 所述。 .
顺便说一句,Microsoft 不正式支持并行安装不同的 Office 版本。它们确实有些作用,但您可能会得到不希望的效果和不一致。
更新:Office 2019 和 Office 365
从 Office 2019 开始,基于 MSI 的设置不再可用,即点即用是现在部署 Office 的唯一方式。随着对定期更新的 Office 365 的更改,Office 的主要/次要版本号也不再更新(至少目前是这样)。这意味着,即使对于 Office 2019,注册表项中使用的值和 Application.Version
(例如在 Word 中)返回的值仍然是 16.0
。
目前,没有记录的方法来区分 Office 2016 和 Office 2019。一个线索可能是 winword.exe 的文件版本;但是,此版本也针对已打补丁的 Office 2016 版本进行了增加(请参阅下面@antonio 的评论)。
如果您需要以某种方式区分 Office 版本,例如确保存在特定功能或安装了最低版本的 Office,这可能是查看主要 Office 应用程序之一的文件版本的最佳方式:
// Using the file path to winword.exe
// Retrieve the path e.g. from the InstallRoot Registry key
var fileVersionInfo = FileVersionInfo.GetVersionInfo(@"C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE");
var version = new Version(fileVersionInfo.FileVersion);
// On a running instance using the `Process` class
var process = Process.GetProcessesByName("winword").First();
string fileVersionInfo = process.MainModule.FileVersionInfo.FileVersion;
var version = Version(fileVersionInfo);
Office 2019 的文件版本是 16.0.10730.20102,因此如果您看到任何高于此版本的内容,您正在处理 Office 2019 或当前的 Office 365 版本。
关于c# - 如何检测安装的 MS-Office 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266675/