Отличительная черта надстроек MS Project, которые мы создаем — легкость установки как в MS Office версии 2010, так и в Office 2013. Программа-инсталлятор надстройки сама определяет, установлены ли в системе компоненты, необходимые надстройке, и вы узнаете об этом еще до того, как запустите Project с нашим дополнением. В этом нам помогает технология Windows Installer и среда разработки MS Visual Studio.
Инструкция по созданию инсталлятора надстройки для любого приложения MS Office не является секретом, и опубликована в статье MSDN: Deploying a Visual Studio 2010 Tools for Office Solution Using Windows Installer. Не все шаги инструкции обязательны, и мы выполняем следующие.
- Создать setup-проект и присоединить к нему выходные файлы (output) проекта надстройки.
- Добавить в проект манифесты приложения и развертывания (файлы .dll.manifest и .vsto) из проекта надстройки.
- Настроить список сборок, от которых зависит приложение, чтобы исключить из них те, которые нет необходимости включать в setup-проект.
- Настроить перечень компонентов, которые будут установлены программой setup.exe перед установкой надстройки.
- Описать ключи реестра, которые будут создаваться инсталлятором, дающие команду приложению Office включать надстройку при запуске.
- Создать условия запуска инсталлятора (launch conditions), проверяющие наличие в системе среды исполнения VSTO 2010 Runtime.
- Создать условие запуска инсталлятора, которое проверяет, установлено ли приложение Office, в котором будет запускаться надстройка. По сути, это проверка наличия в системе одной из сборок PIA (Primary Interop Assemblies), которые идентифицируются своими ID, список которых приведен в вышеуказанной статье.
Инструкций в MSDN вполне достаточно, чтобы всё это сделать, надо только постараться избежать копирования кода условий запуска в свой setup-проект. Иначе могут возникнуть ошибки, вызванные некорректными символами кавычек, о которых Visual Studio не сообщает при сборке инсталлятора из проекта.
Проблема поиска компонентов Office 2013
Инструкция по созданию инсталляторов для надстроек Office 2013 пока не выложена в MSDN, но и предыдущая по большей части подходит для новой версии Office. Основная проблема — нигде не опубликованы коды компонентов PIA for Office 2013, для их использования в условиях запуска.
Многие разработчики задаются вопросом как найти Component ID, и официальный ответ Microsoft — использовать программу MSI Spy. Однако, несмотря на обилие ссылок, эта утилита давно исчезла с сайтов Microsoft. Мы нашли альтернативное решение проблемы — использование запросов к WMI, к таблице Win32_SoftwareElement. К примеру, можно запустить следующий код на C#:
using System; using System.Text; using System.Management; class Program { static void Main(string[] args) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Name, SoftwareElementId, Version FROM Win32_SoftwareElement WHERE Name LIKE \"%PIA%\""); foreach (ManagementObject share in searcher.Get()) { foreach (PropertyData pd in share.Properties) { Console.WriteLine(pd.Name + " = " + pd.Value); } Console.WriteLine(""); } } }
В операционной системе с большим количеством установленных программ он может выполняться очень долго. В результате получаем список, где есть нужные нам элементы.
Name = Office_PIA
SoftwareElementID = {64E2917E-AA13-4CA4-BFFE-EA6EDA3AFCB4}
Version = 14.0.4763.1000
Это Office 2010 Shared PIA, Component ID — {64E2917E-AA13-4CA4-BFFE-EA6EDA3AFCB4}.
Name = Global_Project_ClientPIA
SoftwareElementID = {957A4EC0-E67B-4E86-A383-6AF7270B216A}
Version = 14.0.4763.1000
Project 2010 PIA, Component ID — {957A4EC0-E67B-4E86-A383-6AF7270B216A}.
Аналогичным образом получаем Component ID для компонентов Office 2013.
- Office 2013 Shared PIA: {6A174BDB-0049-4D1C-86EF-3114CB0C4C4E}
- Project 2013 PIA: {1C50E422-24FA-44A9-A120-E88280C8C341}
Неплохой обзор. Вообще, при создании инсталляторов есть ряд тонкостей. Все очень сильно зависит от того, что должен уметь инсталлятор.
Если вам интересно, то еще несколько бесплатных аналогов можно найти в обзоре по адресу http://ida-freewares.ru/programming/7-best-free-program-setup-builder.html