Как определить установленную версию MS-Office?

кто-нибудь знает, что было бы лучшим способом определить, какая версия Office установлена? Кроме того, если установлено несколько версий Office, я хотел бы знать, какие это версии. Бонус был бы, если бы я мог обнаружить конкретную версию(ы) Excel, которая(/установлены).

8 ответов


один из способов проверить установленную версию Office - проверить InstallRoot разделы реестра для приложений Office, представляющих интерес.

например, если вы хотите проверить, установлен ли Word 2007, вы должны проверить наличие следующего раздела реестра:

HKLM\Software\Microsoft\Office.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

другой приложения имеют похожие ключи:

HKLM\Software\Microsoft\Office.0\Excel\InstallRoot::Path
HKLM\Software\Microsoft\Office.0\PowerPoint\InstallRoot::Path

или вы можете проверить общий корневой путь всех приложений:

HKLM\Software\Microsoft\Office.0\Common\InstallRoot::Path

другой вариант, без использования определенных разделов реестра, будет запрашивать базу данных MSI с помощью MSIEnumProducts API, как описано здесь.

в стороне, параллельные установки различных версий Office официально не поддерживаются корпорацией Майкрософт. Они несколько работают, но вы можете получить нежелательные эффекты и несоответствия.


Как насчет HKEY_CLASSES_ROOT\Word.\Приложение Параметр Curver?


Если вы установили 32-разрядный Office на 64-разрядной машине, вам может потребоваться проверить наличие "SOFTWARE\Wow6432Node\Microsoft\Office\12.0\", заменив 12.0 соответствующей версией. Это, безусловно, относится к Office 2007, установленному на 64-разрядной Windows 7.

обратите внимание, что Office 2010 (== 14.0) является первым офисом, для которого существует 64-разрядная версия.


Я нашел этот 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] обозначает конкретный exe-файл продукта office, например winword.exe, excel.exe etc. Там вы получаете путь к исполняемому файлу и проверяете версию этого файла.

Как проверить версию файл: в C++ / in C#

любая критика в отношении такого подхода?


бонус был бы, если бы я мог обнаружить конкретную версию(ы) Excel, которая(/are) установлена.

получить номер сборки (например,15.0.4569.1506), зонд HKLM\SOFTWARE\Microsoft\Office\[VER]\Common\ProductVersion::LastProduct, где [VER] - основной номер версии (12.0 для Office 2007, 14.0 для Office 2010, 15.0 для Office 2013).

на 64-разрядной Windows, вам нужно вставить Wow6432Node между SOFTWARE и Microsoft крошки, независимо от bitness установки офиса.

на моих машинах, это дает информацию о версии первоначально установленную версию. Например, для 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;
            }
        }