Как определить установленную версию 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 с помощью
MSIEnumProductsAPI, как описано здесь.в стороне, параллельные установки различных версий Office официально не поддерживаются Microsoft. Они делают некоторую работу, но вы можете получить нежелательные эффекты и несоответствия.
Если вы установили 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.exeetc. Там вы получаете путь к исполняемому файлу и проверить версию этого файла.Как проверить версию файл: в C++ / in C#
есть ли критика в отношении такого подхода?
бонус будет, если я смогу обнаружить конкретную версию(ы) 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, который отражает патчи, применяемые исправлениями.
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; } }
Comments