Как определить установленную версию 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 официально не поддерживаются корпорацией Майкрософт. Они несколько работают, но вы можете получить нежелательные эффекты и несоответствия.
Если вы установили 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;
}
}