Как определить установленную версию MS-Office? - PullRequest
56 голосов
/ 16 июля 2010

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

Ответы [ 8 ]

71 голосов
/ 16 июля 2010

Один из способов проверить установленную версию Office - проверить ключи реестра InstallRoot на интересующие приложения Office.

Например, если вы хотите проверить, установлен ли 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

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

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

Обновление: Office 2019 и Office 365

Начиная с Office 2019, настройка на основе MSI больше не доступна, Click-To-Run - единственный способ развертыванияОфис сейчас.Вместе с этим изменением в отношении регулярно обновляемого 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);

Файловую версию Office2019 - это 16.0.10730.20102, поэтому, если вы видите что-то большее, чем то, что вы имеете дело с Office 2019 или текущей версией Office 365.

23 голосов
/ 10 января 2015

Как насчет HKEY_CLASSES_ROOT \ Word.Application \ CurVer?

16 голосов
/ 26 октября 2011

Если вы установили 32-битный Office на 64-битном компьютере, вам может потребоваться проверить наличие «ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ \ Wow6432Node \ Microsoft \ Office \ 12.0 \», заменив 12.0 соответствующей версией.Это, безусловно, относится к Office 2007, установленному в 64-разрядной Windows 7.

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

9 голосов
/ 02 января 2014

Я нашел этот CodeProject, который помог мне с этой самой проблемой: http://www.codeproject.com/Articles/26520/Getting-Office-s-Version

8 голосов
/ 13 февраля 2012
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;
    }



}
}
5 голосов
/ 06 июня 2016

Почему бы не проверить HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe], где [office.exe] обозначает exe-имя конкретного офисного продукта, например, winword.exe, excel.exe и т. Д. Там вы получите путь к исполняемому файлу и проверьте версию этого файла.

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

Есть ли критика такого подхода?

2 голосов
/ 29 января 2015

Бонусом будет, если я смогу определить конкретную (ые) версию (и) Excel, установленную (*).

Я знаю, что вопрос задавался и на него долго отвечалиНекоторое время назад, но этот же вопрос занимал меня до тех пор, пока я не сделал это наблюдение:

Чтобы получить номер сборки (например, 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, независимо отбитность установки Office.

На моих машинах это дает информацию о версии первоначально установленной версии.Например, для Office 2010 числа соответствуют номерам, перечисленным здесь , и отличаются от версии, указанной в File > Help, которая отражает исправления, примененные исправлениями.

1 голос
/ 05 августа 2016
        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;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...