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

17 浏览
0 Comments

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

有人知道检测已安装的 Office 版本最好的方法是什么吗?此外,如果安装了多个版本的 Office,我想知道它们各自的版本是什么。如果我能检测到具体安装了哪些版本的 Excel,那就更好了。

0
0 Comments

问题的原因是:在64位机器上安装32位的Office时,需要检查是否存在"SOFTWARE\Wow6432Node\Microsoft\Office\12.0\"路径,其中12.0需要替换为相应的版本号。这在64位Windows 7上安装Office 2007时是适用的。需要注意的是,Office 2010(== 14.0)是第一个有64位版本的Office。

解决方法:通过检查注册表中的特定路径来检测已安装的MS-Office的版本。以下是一个示例代码,用于检查32位Office 2007是否安装在64位Windows 7上:

import winreg
def check_office_version():
    key_path = r"SOFTWARE\Wow6432Node\Microsoft\Office\12.0\"
    try:
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path)
        print("MS-Office 2007 (32-bit) is installed.")
        winreg.CloseKey(key)
    except FileNotFoundError:
        print("MS-Office 2007 (32-bit) is not installed.")
check_office_version()

对于其他版本的Office,只需将版本号替换为相应的值即可。

这个方法可以帮助用户确定他们的机器上是否安装了特定版本的MS-Office。

0
0 Comments

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

在这个问题中,出现了原因是因为需要确定已安装的MS-Office版本。下面是一些讨论和解决方法。

其中一个解决方法是使用HKEY_CLASSES_ROOT\Word.Application\CurVer注册表项。这个方法避免了Wow64问题,并且支持安装了多个Office版本的情况。在Inno Setup中使用时,可以像这样使用:RegQueryStringValue(HKEY_CLASSES_ROOT, 'Word.Application\CurVer', '', myString)。

然而,这个方法只能获取内部版本号,比如Word.Application.15等,并不能返回文件或注册表路径。如果需要获取这些信息,仍然需要单独获取。

另一个问题是当安装了多个版本的Office或Office应用程序时,这种方法可能会出现问题。它似乎只会存储第一个安装的版本,而不是最新的版本。

另外,Word 2019显示的也是Word.Application.16。因此,问题在于如何区分2016和2019版本。

然而,根据一些用户的反馈(截至2022年1月,Office 16.0,版本2111),这种方法似乎并不一致。在某台机器上,Word.Application\CurVer的值为Word.Application.11,而PowerPoint.Application.11的值也是如此。但Outlook.Application.16和Excel.Application.16的值则是16。尽管我只安装了一个版本的Office。然而,在另一台安装了相同版本Office的机器上,所有Office程序的CurVer都显示为16。

检测已安装的MS-Office版本并不是一个简单的问题,可能需要综合考虑多个因素才能得出准确的结果。

0
0 Comments

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

有一种检查已安装的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!)

其他应用程序有类似的键:

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

或者您可以检查所有应用程序的公共根路径:

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

另一种不使用特定注册表键的选项是使用MSIEnumProducts API查询MSI数据库,如此处所述。

顺便说一下,微软不官方支持并行安装不同版本的Office。它们在某种程度上可以工作,但可能会产生不希望出现的效果和不一致性。

更新:Office 2019和Office 365

从Office 2019开始,不再提供基于MSI的安装程序,现在只能使用Click-To-Run来部署Office。随着转向定期更新的Office 365,Office的主/次版本号也不再更新(至少目前如此)。这意味着-即使对于Office 2019-注册表键中使用的值和Application.Version(例如在Word中)返回的值仍然是16.0

目前还没有记录的方法可以区分Office 2016和Office 2019。一个线索可能是winword.exe的文件版本;然而,对于修补过的Office 2016版本,该版本也会增加(请参见下面的评论)。

如果您需要在Office版本之间进行区分,例如确保某个特定功能存在或安装了Office的最低版本,可能最好的方法是查看一个主要Office应用程序的文件版本:

// 使用winword.exe的文件路径
// 从InstallRoot注册表键中检索路径
var fileVersionInfo = FileVersionInfo.GetVersionInfo(@"C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE");
var version = new Version(fileVersionInfo.FileVersion);
// 在运行的实例中使用`Process`类
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版本。

我们是否还需要检查HKCU?因为我的注册表键就在那里。谢谢!

我相信没有必要说出来,这似乎有点多余作为一个评论,但没有12.0和14.0之间的版本的原因与高层建筑没有类似编号的楼层的原因相同。

请注意,如果您使用的是Common键(用于检查所有Office应用程序的公共根),在版本15.0中将无法工作。

这还准确吗?我最近查看了很多安装了Word 2013的Windows 8系统,它们没有上述的InstallRoot键。Word是否已更改将键放在其他地方?

:这是一个Click-To-Run安装吗?他们可能会以不同的方式处理此问题。请还注意,在64位系统上使用regedit时,必须查看HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office

:这不是Click-To-Run - 64位系统的您的观点很有趣,因为我确实没有在regedit的该位置检查。然而,我发现在大多数64位机器上预期的(32位)位置上仍然存在该键,这有点令人困惑。我目前在这个问题上工作得很辛苦,因为这给我们的用户带来了一些严重的痛苦-如果我发现任何可以为将来澄清答案的东西,我会尽量更新这个问题。

如何检查Office的32位版本或64位版本?

这似乎没有一致地填充-我有两台安装了Excel 2016的机器,一台有上述的InstallRoot::Path键,另一台没有。BobL2112下面提出的使用HKEY_CLASSES_ROOT\Word.Application\CurVer更简单、更不易受损。

:您是否阅读了关于64位和32位注册表键的评论?

Word 2019的版本也显示为16.0。所以问题是如何区分2016版本和2019版本。

:感谢提示。希望我的更新有所帮助。

-vollmar:小心,对于Office 2019的构建版本;我使用的是Office 2016 Plus版本16.0.10827.20181,其中不包含Office 2019的新功能。

0