Кто-нибудь знает, что было бы лучшим способом определить, какая версия Office установлена? Кроме того, если есть несколько версий Office, я бы хотел знать, какие они есть. Бонус был бы, если бы я мог обнаружить конкретные версии Excel, которые установлены (/).
Как определить установленную версию MS-Office?
Ответ 1
Один из способов проверить установленную версию 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
Другие приложения имеют похожие клавиши:
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. Они несколько работают, но вы можете получить нежелательные эффекты и несоответствия.
Ответ 2
Как насчет HKEY_CLASSES_ROOT\Word.Application\CurVer?
Ответ 3
Если вы установили 32-разрядный Office на 64-разрядную машину, вам может потребоваться проверить наличие "SOFTWARE\Wow6432Node\Microsoft\Office\12.0 \", заменив 12.0 соответствующей версией. Это, безусловно, относится к Office 2007, установленному на 64-разрядной Windows 7.
Обратите внимание, что Office 2010 (== 14.0) - это первый Office, для которого существует 64-разрядная версия.
Ответ 4
Я нашел этот CodeProject, который помог мне справиться с этой самой проблемой: http://www.codeproject.com/Articles/26520/Getting-Office-s-Version
Ответ 5
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;
}
}
}
Ответ 6
Почему бы не проверить HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe]
, где [office.exe]
означает конкретное имя exe файла для офиса, например. winword.exe
, excel.exe
и т.д.
Там вы получаете путь к исполняемому файлу и проверяете версию этого файла.
Как проверить версию файла: в С++/в С#
Любая критика в отношении такого подхода?
Ответ 7
Бонус будет, если я смогу обнаружить определенные версии 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
, которая отражает применяемые исправления по исправлениям.
Ответ 8
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;
}
}