Создание дистрибутивов ПО для Windows: Microsoft Windows Installer Services (MSI)
Эта статья продолжает начатую в прошлом номере "Компьютерных вестей" тему создания инсталляционных пакетов для Win32-приложений. На всякий случай напомню: в первой статье я рассказывал о двух программах для создания дистрибутивов: InnoSetup и NSIS. Однако, как известно, нет в Windows такой проблемы, для которой бы Microsoft не предложила свое решение. Нужен сервер для базы данных - есть SQL Server, нужен Web-сервер - берите IIS... Ну а для инсталляции программного обеспечения разработчики Windows предложили свое видение решения задачи - Windows Installer. Именно о нем я сегодня вам расскажу.
Ода "Майкрософту"
Сначала небольшое лирическое отступление.
Как-то само собой повелось, что "Мелкомягких" нужно ругать. На форумах, в статьях, в блогах видны нелестные отзывы в адрес Internet Explorer, Windows, Outlook Express... Даже "Офис" в последнее время принято сравнивать с Corel WordPerfect Office или OpenOffice.org, и высказывать по этому поводу свое мнение. Единственный продукт, пожалуй, котороый не ругают, это Visual Studio. Но - вот парадокс! - многие до сих пор продолжают пользоваться его 6-й версией, вышедшей в 1998 году.
Здесь бы, по законам жанра, стоило бы рвануть на груди рубаху и крикнуть громко, чтобы все слышали: "РЕБЯТА, Я ЛЮБЛЮ МАЙКРОСОФТ!!!". Но, честно говоря, не хочется кривить душой: не люблю я его. Я его уважаю.
Вряд ли есть в мире другая такая корпорация, которая всегда приходит на рынок едва ли не последней, а в итоге через некоторое время становится первой. Примеры? Да пожалуйста! Еще чуть больше десяти лет назад, когда вышла Windows 95, никто всерьез не мог предположить, во что превратится интернет к теперешнему времени. Только оптимисты-энтузиасты, которые ушли из NCSA и основали Netscape Communications Corporation, продвигали свой браузер, хотя тогда не все понимали, что это вообще такое и для чего нужно. И вот, когда у них получилось, когда Netscape были на гребне волны, на вершине, в MS взялись за создание собственного браузера. И что теперь? Internet Explorer, созданный, кстати, из той же NCSA Mosaic, что и Netscape Navigator, сегодня - самый популярный браузер в мире. Кто-нибудь вспомнит, где нынче находится Netscape со всеми своими выдающимися технологиями и революционными решениями? Правильно, он теперь на mozilla.org, и разработчики радуются, что его новая ипостась по имени Firefox в состоянии хоть немного потеснить Internet Explorer, который они когда-то и вовсе конкурентом не считали.
Сегодня мы можем наблюдать за тем, как Microsoft активно продвигает свои серверные операционные системы и платформу .NET. И, надо отметить, у нее это хорошо получается. Так что остается только позавидовать таланту специалистов по продажам софтверного гиганта, которые, вероятно, сумеют убедить ставить свои продукты даже на холодильники. И тогда станет явью шутка об установке драйвера для кастрюли с борщом.
На мой взгляд, сегодняшняя распространенность дистрибутивов ПО, созданных с помощью технологии Windows Installer, - именно тот случай, когда продукт продвигается не благодаря собственным характеристикам, а из-за усилий производителя. Однако давайте присмотримся получше - может быть, эта технология окажется полезной для вашего продукта?
Технология MSI
Технология Windows Installer - набор системных библиотек для работы с инсталляционными пакетами MSI. Я думаю, любой пользователь, самостоятельно устанавливающий программы на свой компьютер, сталкивался с ними: они имеют расширение msi и лежат в той же папке, что и Setup.exe. Физически такой инсталляционный пакет представляет собой базу данных специального формата, содержащую внутри себя все, что нужно для полноценной установки: сведения о продукте и его производителе, лицензионное соглашение об использовании продукта, необходимые в процессе установки динамически подключаемые библиотеки, а также сами файлы устанавливаемого приложения, причем последние - в сжатом виде. Для сжатия, естественно, используются кабинетные архивы (CAB'ы), которые использует для распространения собственных продуктов корпорация "Майкрософт". Кроме того, во все той же базе данных находятся инструкции, управляющие процессом установки: как стандартными действиями, так и специфическими для данной конкретной программы.
То есть, как видите, основное отличие дистрибутивов, созданных с использованием Windows Installer, от тех, которые создают InnoSetup и NSIS, в том, что Windows Installer "сгружает" всю информацию не в исполняемый файл (EXE), а в базу данных. Теоретически это должно дать больший контроль за производимыми установщиком действиями, однако на практике такой дистрибутив в ходе установки может вызывать функции из любых DLL-библиотек и запускать любые EXE-файлы, так что возможность контроля сводится на нет.
Первоначально технология Windows Installer Services задумывалась как часть системы удаленного администрирования Windows-серверов, поэтому для ее использования под Windows 98 и ME, как, впрочем, и Windows NT 4.0, нужно будет устанавливать специальное обновление. Его можно найти на сайте "Майкрософт", и оно занимает от полутора до четырех мегабайт (размер зависит от версий ОС и Windows Installer). В общем-то, ценность Windows Installer именно в этом качестве весьма сомнительна: с помощью некоторых специальных программ удаленного администрирования и параметров командной строки дистрибутивы, созданные InnoSetup и NSIS, также можно без проблем устанавливать по сети, как, впрочем, и на удаленном сервере.
Среди прочих своих функций Windows Installer занимается еще и соблюдением целостности установленных приложений. Выдержка из MSDN: "Благодаря установщику Windows на каждом компьютере содержится база данных со сведениями обо всех установленных на нем приложениях, включая файлы, разделы реестра и компоненты COM. При деинсталляции приложения перед удалением файла, раздела реестра или компонента осуществляется проверка базы данных на предмет их использования другими приложениями. Благодаря этому при удалении приложения предотвращается возможность нарушения работы другого приложения". К сожалению, на практике это работает не всегда. Например, у меня на компьютере каким-то образом произошел конфликт Icon Workshop и 3DS MAX. Обе программы используют для установки Windows Installer. Теперь, когда я запускаю одну из них, запускается установщик второй, который настойчиво предлагает удалить, изменить или восстановить программу. Если удалить одну из них, пропадают обе.
Кстати, о восстановлении. Windows Installer позволяет восстановить установленный на компьютер программный продукт после сбоя или в случае утери каких-либо файлов. Возможность, опять-таки, скорее, теоретическая, чем практическая. На моей памяти ни одна из сбойных программ не стала работать лучше от такого восстановления. А еще в пакетах Windows Installer присутствует возможность задания связей: для установки одного пакета может понадобиться другой, и при его отсутствии первый не может быть установлен.
В общем-то, на мой взгляд, технология Windows Installer здорово напоминает перенесенный из мира Linux Red Hat Package Manager (RPM), только немного недоработанный. Хотя... Стоит учесть, пожалуй, что самая распространенная в настоящий момент версия Windows Installer - 1.1, а "Майкрософт", между тем, уже третью выпустила.
Инструменты
Конечно же, существует множество инструментов для создания инсталляционных пакетов в формате Microsoft Windows Installer. Сама корпорация "Майкрософт" в Windows Installer SDK предлагает консольную утилиту для создания MSI-файлов из специальных описаний. Но есть, конечно же, более удобные инструменты.
Из дорогих - в первую очередь, естественно, InstallShield (Express и Developer) и Microsoft Visual Studio .NET 2003 и 2005. Есть еще Wise for Windows Installer (или Wise Package Studio) от компании Wise Solutions. Все они умеют примерно одно и то же: создание инсталляций максимально удобно, максимально упрощено и визуализировано. Впрочем, как я уже говорил, эти средства для создания инсталляций довольно дороги и широко известны, поэтому рассматривать их мы сейчас не будем.
Впрочем, про InstallShield я все же пару слов скажу. Когда я его установил, чтобы ознакомиться с возможностями этого широко разрекламированного продукта, то сразу получил проблемы на свою голову. Точнее, на операционную систему своего компьютера. Почему-то при каждом запуске InstallShield Express стал запускаться его установщик. Дальше, по мере использования InstallShield, проблема только усугубилась. После создания первого тестового дистрибутива с его помощью инсталляция этого самого InstallShield'а стала запускаться при старте системы. В итоге пришлось удалять и Icon Workshop, и 3DS MAX, и InstallShield. И саму систему, поскольку после этого больше ничего установить не получалось.
Из бесплатных стоит, в первую очередь, назвать MakeMSI и NInstall. Честно могу сказать: первый из них мне кажется настолько странным продуктом, что я решил рассказать о нем, в основном, из-за этого. Фактически, это не программа, а набор скриптов на макроязыке REXX, который преобразуется в скрипт на VBS (Visual Basic Script), компилирующий пакет. Фактически это похоже на ручное редактирование XML-файла с макроопределениями, что не сильно отличается от пути, предлагаемого "Майкрософт". Статью, посвященную MakeMSI, можно найти на rsdn.ru, но лично мне этот путь кажется не самым удобным.
Гораздо лучше использовать NInstall, позволяющий вручную редактировать все поля инсталляционной базы данных. Именно его вы видите на скриншоте. Редактирование проводится визуально, более того, можно импортировать готовый MSI-пакет, и уже на его базе создавать новую инсталляцию. Среди полезных особенностей NInstall имеется предпросмотр диалогов инсталляции, благодаря которому можно проверять корректность отображения элементов управления, не компилируя каждый раз дистрибутив по новой.
Резюме
Технология Windows Installer представляется перспективной, но достаточно "сырой", что выражается, прежде всего, проблемами самого сервиса установки MSI-пакетов. Низкая стабильность не позволяет рекомендовать этот способ создания дистрибутивов для всех приложений. К тому же, почти все инструменты для создания пакетов Windows Installer, как бесплатные, так и коммерческие, ориентированы на версию 1.0 или 1.1 этой разработки "Майкрософта". Да и в системы Windows 2000, XP и 2003 встроена именно эта версия. Если же вдруг сделать дистрибутив с использованием версии 2 или 3, то придется распространять вместе с дистрибутивом обновления Windows Installer, что значительно увеличит размер дистрибутива вашего продукта. Да и кто даст гарантию, что Windows Installer 1.1 и 3.0 не будут конфликтовать между собой?
Впрочем, будем надеяться, что когда-нибудь "Майкрософт" доведет свой инсталлятор до ума (например, приурочит это к выходу Windows Vista). В эту технологию заложено много хороших идей, которые, впрочем, не дождались еще грамотной реализации. Поэтому пока лучше использовать InnoSetup или NSIS. Они намного надежнее.
Вадим СТАНКЕВИЧ
Комментарии