首页> C#>如何检测MS-Office的安装版本?

有谁知道检测安装哪个版本的Office的最佳方法是什么? 另外,如果安装了多个版本的Office,我想知道它们是什么版本。 如果我能检测到已安装的特定版本的Excel,那么将是一个奖励。

code4life asked 2019-11-08T11:01:50Z
8个解决方案
72 votes

检查安装的Office版本的一种方法是检查感兴趣的Office应用程序的Application.Version注册表项。

例如,如果您想检查是否已安装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

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

顺便说一句,Microsoft不正式支持不同Office版本的并行安装。 它们确实起作用,但是您可能会得到不想要的效果和不一致之处。

更新:Office 2019和Office 365

从Office 2019开始,基于MSI的设置不再可用,即点即用是立即部署Office的唯一方法。 与对定期更新的Office 365的更改一起,Office的主要/次要版本号也不再(至少暂时)未更新。 这意味着-即使对于Office 2019-注册表项中使用的值以及Application.Version(例如在Word中)返回的值仍为16.0

目前,尚无记录的方法可以将Office 2016与Office 2019区别开来。 但是,此版本还会针对修补的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版本。

Dirk Vollmar answered 2019-11-08T11:03:27Z
23 votes

HKEY_CLASSES_ROOT \ Word.Application \ CurVer怎么样?

BobL2112 answered 2019-11-08T11:03:52Z
16 votes

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

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

Jason answered 2019-11-08T11:04:25Z
9 votes

我找到了这个CodeProject来解决这个问题:[http://www.codeproject.com/Articles/26520/Getting-Office-s-Version]

peinearydevelopment answered 2019-11-08T11:04:50Z
8 votes
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;
    }



}
}
zee answered 2019-11-08T11:05:07Z
5 votes

为什么不检查HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe],其中[office.exe]代表特定的办公产品exe文件名,例如 winword.exeexcel.exe等在那里,您可以找到可执行文件的路径,并检查该文件的版本。

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

对这种方法有何批评?

John Bosco answered 2019-11-08T11:05:46Z
2 votes

如果我能检测到已安装的特定版本的Excel,那么将是一个奖励。

我知道很久以前就已经提出并回答了这个问题,但是这个问题一直困扰着我,直到我进行以下观察:

要获取内部版本号(例如15.0.4569.1506),请探测File > Help,其中SOFTWARE是主要版本号(Office 2007为12.0,Office 2010为14.0,Office 2013为15.0)。

在64位Windows上,无论Office安装的位数如何,都需要在SOFTWAREMicrosoft碎屑之间插入File > Help

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

bovender answered 2019-11-08T11:06:40Z
1 votes
        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;
            }
        }
Rakeshravi G answered 2019-11-08T11:07:00Z
translate from https://stackoverflow.com:/questions/3266675/how-to-detect-installed-version-of-ms-office