Windows Installer.
Содержание.
1. Уникальная технология Windows.
Служба Windows Installer.
Централлизованная база данных.
Доступ к базе инсталлера из своей программы.
Windows Installer API.
Технологии, связанные с Windows Installer.
Технология, управляемая данными.
Семь конструкторов инсталляционных пакетов.
Семь деинсталляторов.
Управляемая инсталляция.
2. Механизмы инсталляции.
Инсталляции, непосредственно инициируемые действиями пользователя компьютера.
Шесть основных способов самому запустить Windows Installer.
Инсталляции, выполняемые минуя желание пользователя или администратора компьютера.
Systems Management Server.
Механизм групповых политик.
Автоматические инсталляции, связанные с отсутствующим файлом.
3. Служба Windows Installer.
Разграничение доступа для службы Windows Installer.
Настройка службы Windows Installer.
Журнал инсталляции и журнал ошибок.
Проблемы, которые случаются при работе с Windows Installer'ом.
4. Управление процессом инсталляции на примере MS Office 2000. Параметры инсталлятора Оффиса.
Свойства, управляющие инсталляцией оффиса. Приоритет свойств инсталляции.
5. Windows Installer Roadmap.
Windows Installer SDK.
6. Installer Database - MSI-файл..
Изучаем простейший пакет с помощью ORCA.
Формат базы инсталлера.
Самое главное потребительское качество любой операционной системы - легкость установки в нее программного обеспечения и, соответственно, полное удаление из нее уже ненужного приложения. В UNIX эта проблема отсутствует начисто - т.к. программное обеспечение (вместе со всеми своими настройками) просто копируется в конкретный каталог типа /USR/LOCAL/BIN/virus1, а затем в любой момент этот каталог можно просто удалить... То ли дело - Windows. Там все настройки всех когда-либо установленных программ хранятся в одном месте - в реестре. Отсюда вырастает огромная-преогромная проблема, из-за которой любая Windows-система со временем начинает тупить, перегреваться и вылетать с сообщением "Access violation...". Вот эта статья как раз и рассказывает о тех усилиях, которые предпринимались разработчиками Windows, чтобы не допустить этого...
В принципе в Windows возможно несколько способов установки приложений:
- Пиратский способ - когда нужные кому-то файлы прямо копируются в различные места на диске - против этого в Windows не предусмотрено никакой борьбы (типа хотя-бы подсчета контрольных сумм каталогов или более продвинутое типа Tripwire). Единственное средство есть в XP - создание контрольных точек и отката состояния файловой системы и реестра - но работает оно как-то глючно... Поэтому лично я борюсь с этим только полным копированием Acronus'ом или Ghost'ом всего диска, скажем раз в неделю...
- Унаследованный из Интернета - когда во входном потоке браузера оказывается строка типа: <object codebase="http://sex_explorer.com"> - при этом указанная прога загружается с указанного сайта и ей отдается в управление ваш компьютер. Это технология Интернета - он основан на этой возможности. Единственное, что делает в этом случае Windows - при определенных настройках выдает предупреждение безопасности и позволяет потом удалить загруженные компоненты вот из этого окошка - как правило безуспешно... Но бороться с этим можно - не работать в режиме администратора, правильно выставить режимы настройки зон эксплорера и т.д.
- Windows Installer API. В основном эта статья как раз посвящена этому способу. Этот способ основан на файле специального формата - MSI, когда мы щелкаем на нем правой кнопкой мышки, то эксплорер предлагает нам "Установить" программное обеспечение, описанное в MSI-файле.
- Setup API. Этот способ в основном применяется при установке драйверов. Если мы щелкнем правой кнопкой на инсталляционном скрипте с расширением INF, то эксплорер опять же предложит нам "Установить". Об этом способе и его отличиях от способа Windows Installer мы поговорим в последней главе этой статьи.
- Технологии различных других фирм, например InstallShield, Wise и др. Обзор этих технологий приведен в этой статье дальше. Бывают и комбинированные технологии, например, когда шифрованным Инсталшилдовским INX-скриптом проверяют SerialNumber и затем подкидывают на инсталляцию MSI-файл.
1. Уникальная технология Windows.
-
Основная задача технологии Windows Installer - установка программного обеспечения ,минуя желание пользователя или администратора конкретного компьютера. Это самый важный момент этой технологии, не имеющий аналога ни в какой иной операционной системе. Т.е. в терминах UNIX, вы устанавливаете нужное вам программное обеспечение на некий компьютер против желания пользователя ROOT того компьютера. В этом вся основная фишка этой технологии.
Это отнюдь не хакерские штучки. Я сейчас работаю системным администратором института, в котором 200 компьютеров размещены в пяти корпусах. Даже физически ножками протопать по этому маршруту не хватит нескольких дней. А представьте себе ситуацию, когда я прихожу в какой-то отдел и говорю, что на этом компьютере я сейчас 2-3-4-5 часов буду выполнять обновления Windows, Office, выполнять дефрагментацию, резервное копирование пользовательских данных и т.д. Конечно, меня просто не пустят за этот компьютер, т.к. "руководитель сказал срочно отпечатать платежи и нести их в банк", "кто я вообще такой и кто мне вообще разрешил подходить к компьютеру с секретными данными", "вы бы лучше своим делом занялись и протерли колесико у мышки" и т.д. и т.п. А ведь Active Directory позволяет разместить не 200, а до миллиона учетных записей! Эта проблема ой как хорошо была видна в Microsoft - ее то как раз и решали созданием технологии Windows Installer!
А раз так, то понятно и первое решение, принятое разработчиками Windows Installer'a - установку программного обеспечения выполнять отдельной службой (демоном) Windows Installer, которая работает вне зависимости от процессов, связанных с конкретным пользователем - Winlogon, UsrInit, Explorer и т.д. О некоторых проблемах службы Windows Installer мы поговорим в третьей главе.
Во второй главе мы подробно рассмотрим какими именно механизмами Windows обеспечивается инсталляция программ ,минуя желание администратора конкретного компьютера.
-
Вторая задача, решаемая технологией Windows Installer - ведение централлизованной базы данных ,установленных на компьютере пакетов программ и соответствия DLL, ярлыков, ActiveX-компонентов , установленным пакетам программ. К сожалению - и это крупный раздражающий недостаток Windows - к этой базе данных есть только одно диалоговое окошко: Пуск -> Настройка -> Панель управления -> Установка и удаление программ.
Отсутствие в Windows удобного диалога с открытой информацией обо всех установленных на компьютере COM-обьектах, библиотеках, ярлыках (и их принадлежности установленным пакетам программ) порождает множество проблем. Для инвентаризации установленного программного обеспечения приходится пользоваться специальными программами-инвентаризаторами сомнительного качеcтва (часто совмещенными по функциям с "чистильщиками"). Но я пошел другим путем - еще лет пять назад я написал свои собственные сервисы для инвентаризации, которые можно скачать на этой страничке. Но тогда я еще не очень хорошо разбирался в технологии Windiws Installer'a и не пользовался его базой напрямую в своих программах.
А между тем ,база данных Инсталлера очень занимательна для пытливого ума. Вот здесь лежит моя собственная программка на Visual Basic for Excel, демонстрирующая как именно получить эту базу к себе в программу с помощью обьекта WindowsInstaller.Installer. Для того, чтобы самому работать с обьектами инсталлера, вам придется разобраться с его обьектной моделью, подключить к своей программе библиотеку Инсталлера, немного поэкспериментировать в отладчике, и тогда вы сами сможете получить вот такой великолепный результат.
Для того, чтобы установить любую программу в Windows, необходимо подготовить пакет инсталляции - MSI-файл. Windows Installer Database API представляет этот файл в виде реляционной базы данных, допускающей слияния, деления, SQL-запросы и пр. Для редактирования этой реляционной базы Microsoft поставляет специальный редактор - ORCA. В интернете присутствует уже переведенная на русский язык страничка документации об организации MSI-файла.
Windows Installer Function API хранят базу Инсталлера в различных ключах реестра, например, в этом ключе хранится вся сводная информация о деинсталляции всех когда либо установленных на компьютере программ, в этом ключе HKEY_CLASSES_ROOT регистрирутся все ActiveX-компоненты, в таком ключе HKEY_USERS\S-1-5-21-1417001333-746137067-1957994488-500\Software - установленные для конкретного пользователя пакеты программ и их настройки, а в этом HKEY_LOCAL_MACHINE\SOFTWARE все установленные на компьютере пакеты программ. Кроме того, в каталоге \WINNT\Installer создается копия установленных в системе MSI-пакетов. Кстати эксплорэр открывает на инсталляционном пакете не только дополнительные пункты Установить и Обновить, но и две дополнительные вкладки: Цифровые подписи и вкладку для настройки инсталляционных пакетов - Особые, на которой мы остановимся подробнее чуть позже.
Windows Installer и его база учетных данных является основой нескольких весьма впечатляющих, но малоизвестных широкой публике технологий, в первую очередь RIP, SUS и WMI.
О технологии WMI у меня на сайте написано достаточно много - здесь я скажу лишь, что с помощью моникера "winmgmts:" можно вызывать провайдер Windows Installer - один из десяти встроенных провайдеров WMI - и с его помощью локально или удаленно управлять установленным программным обеспечением Windows.
Кстати, WMI Object Browser, дающий гораздо более широкие возможности управления базой Windows Installer'а, чем встроенное окошко "Установка и удаление программ", устанавливается c сайта Microsoft только в составе дополнительного пакета WMI Administrative Tools.
О ряде других технологий, связанных с Windows Installer - Remote Instalation Procedure (RIP), System Update Service (SUS), цифровых подписях, Windows File Protection (WFP), Setup (INF files) API, System Restore Point - а также инструментах для работы с этими технологиями, я напишу на своем сайте позднее.
- Третья задача, решаемая разработчиками Windows Installer'а, это технология, управляемая данными. Т.е. создание возможностей разработчику организовать инсталляцию и развертывание своих программ буквально в несколько кликов мышкой в конструкторе инсталляционных пакетов, утопив все подробности глубоко в недра операционной системы в Windows Installer API.
Таких систем - кострукторов инсталляционных пакетов известно несколько:
- Package and Deployment Wizard - Visual Studio 6.0. Это уникальный инсталлятор, замечательный тем, что поставляется Microsoft полностью в исходных текстах и позволяет в деталях понять работу инсталлятора со всеми необходимыми для корректной инсталляции программ ключами реестра. После установки Шестой Студии он размещается обычно в \Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\Setup1 и активируется из меню Tools -> Add-Ins менеджер в качестве одного из 20 встроенных в студию дополнений. Пользовательский интерфейс у него выполнен в стиле мастера, которому надо указать последовательно состав инсталляционного пакета, конечные директории размещаемых файлов, ярлыки и пр. - в итоге работы мастера создается инсталляционный скрипт SETUP.LST и CAB-файл со всеми программами пакета инсталляции. Ознакомится подробнее с работой этого мастера можно здесь. А вот так выглядит инсталляция программ, подготовленных PDW из Шестой Студии.
- Visual Studio 7.0 Installer представляет собой полностью интегрированный в состав студии создатель стандартных MSI-пакетов. Войдя в изготовление MSI-пакетов, мы получаем возможность добавить или отредактировать любую папку, ярлык, ключ, библиотеку или иной обьект, нужный нам на целевом компьютере. После настройки свойств проекта в целом - получается отличный MSI-пакет и простенький инсталляционный скриптик. В седьмой студии сохранился и старый визард из шестой студии. Обратите внимание на то, что в итоговом, подготовленном студией инсталляционном пакете, присутсвует помимо Setup.Exe, CAB-файла и инсталляционного скрипта еще два файлика - InstMsiW.Exe и InstMsiA.Exe. Это особая версия (ANSI и UNICODE) так называемого Bootstrapping-инсталлера, о которой мы поговорим подробнее позднее.
- InstallShield Developer компании InstallShield. Здесь лежит документация по этому инсталлятору в PDF-Формате. Эта самая распространенная и изученная система. В целом, наверное процентов 80% всех приложений инсталлируется именно этим движком. Даже драйвер этого инсталлятора всегда присутсвует в Windows.
В интернете присутствует великолепная статья об этом инсталляторе на сайте Wasm.RU. Если ресурс Wasm.RU вдруг исчезнет, как Assembler.ru, то здесь лежит копия этой статьи. В статье сконцентрировано внимание не на конструировании инсталляционного пакета, а на его исполнении. К сожалению, эта статья довольно трудна для чтения и требует довольно высокого уровня подготовки. Но в целом ее смысл можно изложить всего в одной фразе: Любой Инсталляционный пакет представляет собой программу Setup.exe, которая читает в режиме интерпретации зашифрованный инсталляционный скрипт - INX-файл. Но декомпилятор этого скрипта имеется (скачать). Кроме того, CAB-файл, содержащий инсталлируемую систему (несмотря на стандартное расширение) имеет не микрософтовский формат, а свой собственный, Инсталшилдовский, но утилита чтения этого формата тоже имеется (скачать). В статье доказано, что пользуясь этими инструментами, всегда можно избежать запроса серийного номера при инсталляции.
- Wise Installer - инсталлятор от компании Wise Solution. По возможностям и принципу работы похож на инсталлятор InstallShield. Здесь лежит документация по этому инсталлятору в PDF-Формате.
- Ghost Installer Studio от компании Ghost функционально подобен инсталляторам компаний Wise и InstallShield.
- SMS Installer - входит в состав Microsoft Systems Management Server (SMS). Отличная вводная статья в этот инсталлер лежит здесь (локальная копия). Об этом инсталляторе можно почитать подробнее на сайте Microsoft или скачать PDF-файл с полным описанием отсюда.
- И наконец, последний ,уникальный инсталлятор - NSIS Installer от компании Nullsoft Scriptable Installation System. Уникальность его заключается в его бесплатности. При этом он вполне может состязаться по функциональности с ранее названными коммерческими инсталляторами. (скачать с сайта sourceforge.net, скачать с моего сайта)
Microsoft также предлагает программу для очистки базы данных Инсталлера без непосредственной деинсталляции приложений - Windows Installer Clean Up (cкачать с сайта Microsoft, скачать с моего сайта).
Еще один класс программ - деинсталляторы установленных приложений. Для полного удаления они используют не только используют базу Windows Installer'а, но и как правило фиксируют снимки состояния системы до установки приложения и после:
- Veritas WinInstall LE поставляется на дистрибутивном диске Windows 2000 в каталоге \valueadd\3rdparty\mgmt\winstle (скачать). От всех других аналогичных пакетов отличается тем, что умеет по результатам снимков "До" и "После" строить полноценный MSI-файл в формате Windows Installer'а, пригодный для разливки по рабочим станциям. Кроме того имеет редактор MSI-файлов.
- Еще про шесть деинсталляторов - Ashampoo Uninstaller Suite, My Uninstaller, PC Cleaner, Professional Uninstaller, Trash It, Total Uninstall - можно прочитать здесь.
- Наконец, четвертая задача, решаемая технологией Windows Installer - управляемая инсталляция. Необходимо как-то позволить пользователю помимо основных окошек с запросами задать "за кулисами" еще дополнительные параметры, позволяющие уточнить процесс инсталляции больше, чем предусмотрено стандартными диалогами инсталляции. Например, задать местоположение файла журнала инсталляции. Или сказать инсталлятору, что эта установка выполняется не всерьез - понарошку - т.е. настоящую инсталляцию выполнять не нужно, нужно только заменить в MSI-файле все значения параметров, на новые, введенные в диалогах, чтобы затем простые юзера при всех запросах инсталляции могли просто попадать мышкой по кнопкам "OKEY" - такая технология называется "Административная установка". С помощью управляемой инсталляции можно избежать части или даже всех запросов в диалогах на экране, выполнить инсталляцию в пакетном режиме, вообще без участия пользователя или даже против его желания. Вот такие возможности дает Windows Installer по управлению процессом инсталляции!
Управление процессом инсталляции мы рассмотрим в отдельной главе на примере управления инсталляцией Оффиса 2000.
2. Механизмы инсталляции.
Остановимся подробнее на механизмах установки программного обеспечения на целевой компьютер пользователя, основных приемах противодействия этому со стороны пользователя и, что то же самое, основных проблемах при работе Windows Installer'а.
В принципе, технологии инсталляции можно разделить на три большие группы:
- Инсталляции, непосредственно инициируемые действиями пользователя компьютера.
- Для того, чтобы выполнить такую инсталляцию, пользователь должен кликнуть мышкой на MSI-файле или MCP-файле (только эти два раширения из 7 обрабатываются эксплорером автоматически). При этом эксплорер выполнит команду "Установить" или "Обновить" соответсвенно.
- Пользователь вызывает Setup.Exe, подготовленный одним из вышерассмотренных инсталляторов (PDW,InstallShield,Wise и т.д.). Инсталлятор обычно проверяет Serial Number и может далее либо вызывать сам Windows Installer API, либо сформировать MSI-файл и своим инсталляционным скриптом передать его на выполнение стандартному Windows Installer'у. Оба варианта в жизни встречаются одинаково часто.
- Setup.exe или Setup.MSI может стартануть и автоматически при вставке компакт-диска в дисковод, если только на диске присутсвует файл Autorun.inf и в свойствах оборудования CD-ROM указана опция "Автозапуск".
- Вызвать Windows Installer можно из командной строки: >MSIEXEC /I MSI-файл. Обратите внимание, что по >MSIEXEC /? файл с параметрами командной строки почему-то не выдается, а между тем параметров командной строки аж 12, и некоторые из них имеют до 14 модификаторов! С полным списком параметров командной строки Windows Installer'a можно познакомится здесь.
Обратите внимание, что MSIEXEC принимает не только находящиеся локально MSI-файлы, но и лежащие на любом сайте, например так:
msiexec /p http://MyWeb/MyPatch.msp - Еще один вариант - так называемая Bootstrapping-инсталляция, уже неподдерживаемая в Windows XP и выше. Эта инсталляция выполняется после назначения на выполнение MSI-файла после перегрузки системы. Эта операция выполняется программой Instmsi.exe, подробнее о которой можно почитать здесь.
- Для инсталляции с помощью Windows Installera достаточно попасть по ссылке (или даже без ссылки) на HTML-страничку с таким кодом:
<SCRIPT LANGUAGE="VBScript">
<!--
Dim Installer
On Error Resume Next
set Installer=CreateObject("WindowsInstaller.Installer")
Installer.ApplyPatch "http://server/share/patch.msi", "OriginalPackage.msi",0, "PROPERTY=VALUE "
set Installer=Nothing
-->
</SCRIPT>
Впрочем Интернет-технологии включают в себя и более простой способ загрузки программ на целевой компьютер без использования Windows Installer. Для загрузки программы на целевой компьютер Браузеру при просмотре HTML-странички достаточно встретить текст вида:
<object codebase="http://sex_explorer.com">
(Или этот текст будет сформирован клиентским скриптом "налету".) При этом будет выдано предупреждение безопасности. Правда, при работе с другими WEB-технологиями - типа HTA-приложений - предупреждения безопасности не предусмотрены. Но в этой статье мы не будем останавливаться на Web-технологиях инсталляции программ, не связанных с Windows Installer'ом.
- Инсталляции, выполняемые минуя желание пользователя или администратора компьютера.
Как мы говорили в самом начале - это собственно основная изюминка технологии Windows Installer. Если компьютер введен в состав домена Windows, то управлять им должен Администратор Домена, даже вопреки воле Администартора конкретного компьютера.
Таких технологий предусмотрено две:
- Полная версия - Systems Management Server (SMS).
***********Здесь все про SMS *********
- Облегченная версия - механизм групповых политик.
***********Здесь все про разливку политиками *********
- Полная версия - Systems Management Server (SMS).
- Автоматические инсталляции, связанные с отсутствующим файлом.
К такой инсталляции мы все привыкли при работе с Оффисом 2000. Например, Word-овский DOC-файл помечен флажком автоматическое формирование переносов или проверка орфографии, а соответсвующий исполняемый модуль помечен при инсталляции как устанавливаемый по требованию. Другой вариант - при которой Оффис 2000 переходит в режим инсталляции - при вызове его из другого пользователя - не того, от чьего имени был первоначально установлен Оффис 2000. Но тема с инсталляцией Оффиса 2000 настолько обширна, что мы рассмотрим этот вопрос позднее в отдельном разделе.
3. Служба Windows Installer.
На системном уровне службой Инсталлера, как и другими службами, управляют переменные среды, дескрипторы безопасности процесса, в которые превращаются привилегии (особенно точно надо это настраивать, если инсталлер сконфигурирован не с учетной записью процесса LSAS.EXE). На этих рисунках также хорошо видны ключи реестра, библиотеки Windows и файлы, используемые Windows Installer'ом можно монитором от Sysinternals.com.
Защита и разграничение доступа службы Windows Installer организована так, что Installer API пишут в раздел HKEY_LOCAL_MACHINE\SOFTWARE, а только члены группы не менее POWER USER в 2000 Профессионал имеют право делать это. Кроме того, Installer API пишут в каталог WINNT, а он опять же имеет ограничения по записи для слабых учетных записей. Естественно, служба Windows Installer, работающая с системной учетной записью, никаких ограничений по записи в реестр или файловую систему не имеет, что и позволяет беспрепятственно устанавливать программы из групповой политики домена или SMS, даже когда на компьютере вообще никакой пользователь не зарегистрировался.
Режимы работы Windows Installer'а, относящиеся к пользователю и относящиеся к компьютеру конфигурируются из групповой политики - пользователя и компьютера соответственно. Дополнительно из политики можно настроить режимы вызова инсталлера из Эксплорера.
Windows Installer API ведут два журнала - нормальной инсталляции и сообщения об ошибках, попадающие в журнал системы. Сообщения о нормальном ходе инсталляции попадают в каталог, определяемых приложением (а часто просто в WINNT), и имеют примерно такой вид. Если инсталлер запускается из комадной строки (Msiexec.exe), то местоположение журнала определяется опцией /L. Windows Installer API могут давать 14 сообщений об ошибках, описание которых приведено здесь.
В заключение этого раздела мы рассмотрим те обычные проблемы, которые случаются при работе с Windows Installer'ом.
- Первый возникающий вопрос, а запущена ли вообще служба Windows Installer - не упала ли она по какой либо причине?
- Второй момент - по загадочным причинам API Windows Installer'a почему-то пишут свои временные файлы типа Config.Sys не в директорию %TEMP% ,а в корневую директорию. А между тем запись в это, очень специальное место, часто запрещена. Например, в моих учебных классах, если я разрешаю запись в корневую директорию студентам, то диск за неделю превращается в филиал московского зоопарка - каталога WINNT там не видно, только каталоги типа "Зая", "Слоник", "Бобик" и пр. Поэтому если падает служба Windows Installer - то надо в первую очередь проверять право на запись для текущей учетной записи в корневую директорию.
- И наконец, третий момент - а имеет ли данный пользователь право на инсталляцию программ. Право на инсталляцию предусмотрено скажем в Windows 2000 Professional не ниже, чем для POWER USER. Это единственный способ справиться администратору домена со всякой вирусней, которую тащат юзера на компьютеры.
Собственно говоря, это не только самые три самые распространенные ошибки работы Windows Installer'а, но и три самых рапространенных способа, которыми локальный администартор может препятствовать доменному админстратору заливать свой компьютер программное обеспечение.
4. Управление процессом инсталляции на примере MS Office 2000.
В этом разделе на примере Оффиса 2000 мы рассмотрим ,что такое управляемая инсталляция и зачем она нужна. Хочу сразу сказать, что управление инсталляциями - отнюдь не досужие домыслы, а самая актуальная ежедневная проблема. Чтобы активизировать ваше внимание на этой проблеме я расскажу одну поучительную историю.
Однажды для клонирования операционной системы для учебных классов я сделал эталонный компьютер. Как обычно, я стер на нем уникальные GUID'ы с помощью утилиты SYSPREP и GHOST'ом ,склонировал 60 экземпляров операционной системы (в которой я по ошибке установил Office 2000 с компакт-диска). Однако, студенты в учебных классах работать не смогли. Как оказалось, оффис запомнил свойство инсталляции INSTALLLOCATION в виде "D:\". При клонировании это свойство не изменилось. Но когда студенты вошли в Оффис под своими пользовательскими именами, Оффис потребовал наличие инсталляционного пакета DATA1.MSI в устройстве чтения CD-ROM. Так все и зависло на всех машинах в бесконечном цикле. Конечно занятия на всех 60 машиных оказались сорванными. И только когда я перезапустил с помощью групповой политики процесс инсталляции Оффиса с параметром INSTALLOCATION="сетевой_ресурс", Оффис вышел из бесконечного цикла, получив с сетевого ресурса нужный ему файл. Этот сбой заставил меня намного тщательнее относиться к административным установкам и свойствам, задаваемым при инсталляции.
Если мы запустим Setup.Exe из Оффиса с параметром /?, то увидим знакомые параметры Windows Installer'а со следующими изменениями:
- Два ключа Installer'a - /y и /z - в справке Оффиса отсутсвуют (это специальные ключи для регистрации отдельных библиотек в реестре) и их трудно как-нибудь применить при инсталляции Оффиса.
- Все остальные 10 ключей стандартного Windows Installer'а MSIEXEC.EXE - /i, /f, /a, /x, /j, /q, /p, /m, /l, /?, /h - присутсвуют в справке инсталлятора оффиса без изменений.
- Инсталлятор Оффиса добавил к инсталлятору MSIEXC еще три своих ключа - /autorun, /wait, /setting - назначение которых очевидно.
- Наконец, в параметрах командной строки можно задать параметры для управления инсталляцией вида INSTALLLOCATION= "C:\O9PRMCD01".
Обратите внимание, что если этих параметров много, то инсталлятор Оффиса дает нам возможность задать их в файле SETUP.INI совместно с параметром /Setting. При этом файл SETUP.INI имеет свой специальный, но понятный синтаксис, описанный в шаблоне SETUP.INI, поставляемом в дистрибутиве Оффиса.
Таким образом мы видим, что на примере Оффиса очень удобно изучить и освоить все возможности Windows Installer'а (кроме регистрации отдельных библиотек ключами /y и /z). При этом все параметры для управления инсталляцией можно даже не задавать стандартным образом в командной строке, а воспользоваться сервисом инсталлятора Оффиса и хранить их в текстовом файле.
Перед тем, как начать изучать Windows Installer подробнее, давайте посмотрим какие именно параметры можно задать Оффису непосредственно при инсталляции.
В инсталляционном пакете Office 2000 задано 158 свойств. (настроек) процесса инсталляции. Еще 64 свойства могут быть заданы при инсталляции оффиса 2000 в командной строке или в переменных среды - статья KB270920. Интересно, что эксплорер предлагает установить для MSI-файла совсем другие свойства.
Обратите внимание, что задаваемые из командной строки параметры, не могут быть напрямую отредактированы в MSI-файле - параметры командной строки являются переменными, на основании которых вычисляются значения значения ключей в таблицах MSI-файла. Для того, чтобы показать это, я экспортирую из MSI-файла Оффиса все 77 таблиц и ищу в результирующих текстовых IDT-файлах параметр INSTALLLOCATION. Как видите, он упоминается в правой части, т.е. на основании его значения определяются другие переменные (в данном случае _BrowseProperty), управляющие процессом инсталляции. Вот так всего-то 65 параметров и управляют всем огромным процессом инсталляции - а он действительно впечатляет, 77 таблиц, причем некоторые из них, например Registry содержат 7490 записей - устанавливаемых для работы Оффиса ключей реестра.
Пока не сталкиваешься лично и конкретно с этими параметрами, то такое их количество может показаться досужим домыслом. Однако это далеко не так - именно обилие этих параметров и обеспечивает гибкость системы, завоевавшей заслуженное признание в мире. А что касается количества параметров, то альтернативные технологии инсталляции получаются еще более громоздкими даже при более скромных возможностях настройки. Например, только инсталляционный скрипт скромного текстового редактора PrimalScript, который инсталлируется не MSI-файлом, а непосредственно InstallShield'овским скриптом составляет 17214 строк. Скажу больше, скорость Windows Installer API меня, как профессионала, просто впечатляет! А развитый сервис Windows Installer API - типа SQL запросов к инсталляционным базам - просто фантастика!
Поскольку свойства инсталляции могут быть заданы во многих местах и могут противоречить друг другу, то итоговые свойства определяются согласно следующим приоритетам:
- Низший приоритет имеют свойства, определенные при инсталляции как переменные среды.
- Их перекрывают свойства, заданные в командной строке - и очевидно в SETUP.INI-файле для инсталлятора Оффиса.
- Их перекрывают свойства, заданные при административной установке.
- Их перекрывают свойства, заданные при трансформациях.
- Свойства авторизации в Property table MSI-Файла, имеют высший приоритет.
How Setup.exe Bootstraps the Windows Installer when Installing Office 2000 ms-help://MS.VSCC/MS.MSDNVS/msi/app_4puv.htm
5. Windows Installer Roadmap.
Теперь мы знаем достаточно, чтобы перейти непосредственно к изучению Windows Installer'a. Для того, чтобы дальнейшее усвоение материала прошло легче, вам потребуется отсюда сгрузить и установить Windows Installer SDK (размер - 85Mb).
Кстати при работе с SDK, чтобы не оказаться "у разбитого корыта", настоятельно советую обратить внимание не только на полное содержимое платформы SDK, но и на огромный список более не поддерживаемых SDK.
После установки Windows Installer SDK вы получите полное описание Windows Installer'а, 95 исполняемых файлов, 25 замечательных и чрезвычайно важных VB-скриптов и еще 11 отдельных инсталляционных пакетов, в одном из которых будет Windows Installer 2.0 Table Editor - та самая ORCA.
Также с моего сайта можно сгрузить отдельно Орку и скрипты. С документацией сложнее, поскольку она поставляется Microsoft в формате MSHELP 2, который Microsoft не документирует. Саму документацию сгрузить отсюда - а вот как создать пространство имен для доступа к ней и воспользоваться Dexplore без установки Студии - об этом написано здесь. Таким способом вы получите все основные удовольствия от Windows Installer SDK потратив всего 4,7 Mегабайт трафика.
ПРИМЕЧАНИЕ. С некоторых пор страничка INSTALLER'а переехала сюда.
6. Installer Database - MSI-файл.
Изучим MSI-пакет, моей утилиты дампирования состояния системы. При изготовлении инсталляции, как видите, он весьма прост и состоит из:
- Файла Primary Output проекта WinDump - это файл WinDump.exe
- Файла Primary Output проекта WinDumpSet - это файл WinDumpSet.exe
- Сборки Microsoft.Visual.Basic
- Сборки mscorcfg.dll - которую я специально включил в итоговую диреторию приложения, чтобы пользователю не нужно было устанавливать Windows NET SDK.
- Сборки System.Management.dll, тк она не всегда может присутсвоват на кампе пользователя.
- Наконец, в меню добавлен ярлычок на Primary Output проекта WinDump.
Открываем с помощью ORCA MSI-файл, который получился в итоге инсталляции. Наблюдаем в таблице Property те самые свойства проекта, которые мы и устанавливали в студии. Но для того, чтобы понять, какие именно файлы будут установлены на целевую машину пользователя, экспортируем из MSI-файла три таблицы - Component, Direcory и File и открываем их в Excel. Теперь мы видим, как все три указанных файла устанавливаются в директорию TARGETDIR.
Мы посмотрели на самый минимально возможный MSI-пакет, созданный без CUSTOM-action, ключей реестра и прочих изысков. В более сложных инсталляционных проектах эти действия преусмотрены и, соответственно, в MSI-файле появляются таблицы Custom-action.
Теперь посмотрим подробнее формат MSI-пакета. База состоит из нескольких таблиц, которые логически сгруппированы:
- Core Tables Group
- File Tables Group
- Registry Tables Group
- System Tables Group
- Locator Tables Group
- Program Information Tables Group
- Installation Procedure Tables Group
Для манипулирования данными MSI-пакета существует библитека MSI.DLL, которая имеет для этого все необходимые функции. Я не раз использовал эту библиотеку в своих приложениях. Пример такого приложения, которое я выложил на свой сайт со всеми исходными текстами можно посмотреть здесь.
31. Альтернативные технологии.
В Windows есть еще одна вcтроенная технология инсталляции программ - инсталляция драйверов. Эта технология называется Setup API и ее описание находится в том же разделе MSDN - "Setup and System Administration", что и описание Windows Installer.
Кратко суть этой технологии такова: подготавливается текстовый файл специальной структуры - INF-Файл. На этом рисунке красной стрелкой показана секция, в которой копируются нужные файлы и устанавливаются ключи реестра, а синей стрелкой - уникальный идентификатор hw_id, которым идентифицируются Plug&Play устройства - в данном случае видеокарта моего компьютера. А на этом рисунке хорошо видны Plug&Play идентификаторы для флоппи-дисковода, CD-ROM'а, сетевой карты и жесткого диска моего компьютера. С этим инталляционным файлом возможны два режима работы:
- Когда шинный драйвер обнаруживает на шине Plug&Play устройство с этим уникальным идинтификатором, то он автоматически в C:\WINNT\INF ищет INF-файл, обслуживающий такое устройство. Если не находит, то вызывает знакомый всем мастер, который выполняет все необходимые копирования файлов и установку ключей реестра, описанныx в INF-файле, после чего SCM-менеджер загружает и инициализирует драйвер в режиме ядра.
- Второй режим использования INF-файла предусмотрен для устройств, не поддерживающих Plug&Play. В этом случае мы вручную щелкаем на INF-файле мышкой, исполняем его скриптом или добавляем нужный INF-файл мастером установки оборудования. Таким образом можно инсталлировать и запустить в режиме ядра не только реальный драйвер устройства, но и любую свою прогу - например так работают вирусы и антивирусы.
|