Модификация дистрибутивов на основе Windows Installer::Журнал СА 8.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
20.12.2019г.
Просмотров: 4293
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 5619
Комментарии: 0
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 6853
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 7253
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 6326
Комментарии: 0
Django 2 в примерах

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Модификация дистрибутивов на основе Windows Installer

Архив номеров / 2008 / Выпуск №8 (69) / Модификация дистрибутивов на основе Windows Installer

Рубрика: Администрирование /  Продукты и решения

ИВАН КОРОБКО

Модификация дистрибутивов
на основе Windows Installer

Возможность модификации дистрибутивов на основе Windows Installer всегда прельщала системных администраторов и специалистов системной поддержки. Рассмотрим один из компонентов Windows Installer Resource Kit – orca.exe. Эта утилита специально разработана для решения задач такого рода.

Решение задач автоматической установки программного обеспечения не ограничивается использованием ключей системы инсталляции Windows Installer. Получив возможность изменить пакет инсталляции, доступ к базе данных всех параметров дистрибутива, администратор может создавать пакеты для автоматической установки, не используя внешние файлы, содержащие различные настройки.

Уделим внимание программному управлению базой данных, хранящейся в msi-файлах.

Windows Installer

Это сервис установки и конфигурирования программных продуктов, который входит в состав операционной системы. Также он может устанавливаться как пакет обновления или отдельный дистрибутив.

В настоящее время используется Windows Installer 4.5, который можно бесплатно загрузить с сайта Microsoft в виде заплатки (hotfix) KB842288 – http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsXP-KB942288-v3-x86.exe.

Windows Installer, как и любое другое быстрое исправление, поддерживает ряд ключей командной строки, обеспечивающих управление автоматической установкой пакета:

  • /norestart – не перезагружать компьютер после установки обновления;
  • /queit – выполнить установку в «тихом» режиме;
  • /help – вывод справки на экран, содержащей ключи и их краткое описание.

Файл msiexec.exe

Двойным щелчком мыши по файлу с расширением *.msi осуществляется запуск утилиты:

%SystemRoot%System32msiexec.exe /i *.msi

В таблице 1 приведен список часто используемых параметров командной строки, обеспечивающих автоматическую установку приложения.

Таблица 1. Параметры командной строки msiexec.exe

Параметр

Описание

/i

Установка приложения в обычном режиме

/f [p|o|e|d|c|a|u|m|s|v]

Переустановка приложения. Если задан только ключ /f, то имеется в виду команда /fpecsm:

p – восстановление удаленных файлов;

о – обновление до более новой версии;

e – полная переустановка приложения той же версии;

d – восстановление удаленных файлов и перезапись файлов более старой версии;

c – восстановление удаленных файлов или перезапись файлов, если CRC
(контрольная сумма) установленных файлов не совпадает с CRC файлов в дистрибутиве;

а – переустановка всех файлов;

u – перезапись всех ключей реестра, касающихся данного приложения в ветвях HCKU, HCU;

m – перезапись всех ключей реестра, касающихся данного приложения в ветви HCLM;

s – перезапись всех ярлыков

/a

Выполнение административной установки приложения

/x

Деинсталляция продукта

/j[u|m[/g]]

Управление публикацией программного продукта:

u – публикация для текущего пользователя;

m – публикация для всех пользователей;

g – идентификатор языка (управление установкой языкового интерфейса)

/q[n|b|r|f]

Определение уровня пользовательского интерфейса во время установки:

n – отсутствие интерфейса;

b – базовый интерфейс (по умолчанию);

r – сокращенный интерфейс;

f – полный пользовательский интерфейс

Обычно для установки приложения в автоматическом режиме используют команду:

%SystemRoot%System32msiexec.exe /fa /qn /jm *.msi

где *.msi – полный путь к файлу с расширением MSI, например:

c:Windowssystem32msiexec.exe /fa/qn/jm "acdsee10.msi"

Windows Installer SDK

Пакет утилит, который можно загрузить бесплатно с сайта компании Microsoft, по адресу – http://download.microsoft.com/download/7/c/4/7c426dfc-46e2-4ded-bab4-3b33600ad7d1/msi45sdk.msi, используется для различного рода манипуляций с MSI-файлами.

По умолчанию каталог установки пакета Windows Installer SDK –%ProgramFiles%Windows Installer 4.5 SDK.

В его комплекте несколько утилит, в том числе дистрибутив программы ORC, расположенный в папке Tools.

Оrca.msi

Программа orca.exe, дистрибутив которой находится в папке %ProgramFiles%Windows Installer 4.5 SDKTools, предназначена для модификации *.msi-файлов. С помощью этой утилиты можно не только управлять устанавливаемыми компонентами, но и указать серийный номер продукта, изменить выводимые сообщения и др.

Установка orca.exe осуществляется в папку %:ProgramFiles%Orca запуском файла orca.msi.

Оrca.exe

Запуск программы осуществляется через «Пуск > Программы > orca.exe» (см. рис. 1). После успешного запуска приложения необходимо открыть msi-файл, который необходимо модифицировать. В данном случае в качестве опытного образца использовать дистрибутив AcdSee10 – файл ACDSee 10 Photo Manager.msi, находящийся в каталоге c:ACDSee.

Рисунок 1. Внешний вид утилиты orca.exe

Рисунок 1. Внешний вид утилиты orca.exe

Замечание: дистрибутив ACDSee 10 представляет собой *.ехе-файл – архив, который при запуске распаковывает msi-файл в папке C:Documents and Settings\%username%Local SettingsApplication DataDownloaded Installations{0051E50E-CECD-4E04-A71A-B8C49733542A}ACDSee 10 Photo Manager.msi. Именно этот файл необходимо открыть утилитой orca.exe.

Orca.exe рассматривает msi-файл как SQL-базу данных, где msi-файл – это база данных, левая колонка таблицы (см. рис. 2), в которой хранятся различные настройки и списки. Правая часть – список полей выбранной таблицы с соответствующими значениями.

Рисунок 2. Создание новых полей в таблице

Рисунок 2. Создание новых полей в таблице

Структура msi-файлов

В базе данных пакета среди множества таблиц, которые можно объединить в группы, выделим самые важные из них:

  • базовые таблицы;
  • файловые таблицы;
  • таблицы информации о программе.

Базовые таблицы

К базовым таблицам относят таблицы, описывающие параметры работы инсталлятора, устанавливаемые компоненты. Группа состоит из 11 связанных таблиц, краткое описание которых приведено в таблице 2.

Таблица 2. Базовые таблицы MSI Installer

Имя таблицы

Краткое описание

Feature

Содержит список всех функций программного продукта

Condition

Содержит описание условий, определяющих порядок установки каждой функции, описанной в таблице

FeatureComponents

Связывает функции с компонентами

Component

Содержит список всех компонентов приложения

Directory

Содержит список всех каталогов, необходимых для инсталляции

PublishComponent

Содержит список функций и компонентов, публикуемых для использования в других приложениях

Assembly

Задает установки для сборок .NET Framework CLR и Win32

AssemblyName

Задает схему для именования сборок .NET Framework CLR и Win32

Complus

Содержит информацию, необходимую для установки приложений COM+

IsolatedComponent

Связывает компонент, заданный в столбце Component_Application (обычно .exe), с компонентом, заданным в столбце Component_Shared (обычно .dll)

Upgrade

Содержит информацию для значительных обновлений программного продукта

Файловые таблицы

Эта группа таблиц содержит информацию обо всех файлах, входящих в комплект поставки программного продукта. Большая часть этих файлов перечислена в таблице File. Хотя таблица Directory не входит в эту группу, она тесно связана с ней, так как отражает структуру каталогов приложения. В таблице 3 приведен список файловых таблиц и их краткое описание.

Таблица 3. Файловые таблицы MSI Installer

Имя таблицы

Краткое описание

File

Представляет собой список файлов, которые будут распакованы в ходе инсталляции. Эта таблица связана с таблицей Directory, в которой зафиксирована структура каталогов устанавливаемого приложения и таблица Component, с помощью которой обеспечивается связь с компонентами

RemoveFile

Содержит список файлов, которые необходимо удалить при выполнении операции RemoveFiles

Font

Включает в себя список шрифтов, которые необходимо зарегистрировать в операционной системе

SelfReg

Содержит список саморегистрирующихся модулей. Installer не регистрирует EXE-файлы

Media

В таблице описывается набор дисков инсталляции

BindImage

Содержит информацию о привязках исполняемых файлов или DLL

MoveFile

Содержит список файлов, которые необходимо перенести во время инсталляции из исходного каталога в заданный каталог

DuplicateFile

Содержит список дублируемых файлов либо в другой каталог с тем же именем, что и исходный файл, либо в тот же каталог, но с другим именем

Environment

Используется для задания переменных окружения

Icon

Хранит файлы иконок. Каждая иконка этой таблицы во время инсталляции копируется в отдельный файл на диске

MsiFileHash

Эта таблица хранит 128-разрядное хэш-значение для исходных файлов в пакете инсталляции

Таблицы информации о программе

Таблицы этой группы содержат важную информацию о пакете инсталляции, используемую на протяжении всего процесса инсталляции. В таблице 4 приведена информация о назначении таблиц.

Таблица 4. Файловые таблицы программы

Имя таблицы

Краткое описание

Property

Хранятся все свойства пакета инсталляции

Binary

Содержатся двоичные данные для иконок, растров и т. п. Также здесь хранятся данные для пользовательских операций

Error

Используется для поиска шаблонов форматирования при обработке ошибок. Installer имеет свой собственный механизм обработки ошибок

Shortcut

Здесь хранится вся информация, необходимая для создания файловых ярлыков

ReserveCost

Эта таблица содержит информацию о необходимом дисковом пространстве для каждого компонента приложения

Доступ к msi-файлам программным способом

Для обеспечения программного управления базой данных, хранящейся в msi-файле, используется шаблон, приведенный в листинге 1. Необходимо отметить, что шаблон чтения данных отличается от шаблона коррекции данных. О нем будет рассказано отдельно.

Листинг 1. Шаблон доступа к базе в msi-файле

Set obj = CreateObject ("WindowsInstaller.Installer")

Set base = obj.OpenDatabase (MSI,Mode)

base.OpenView(SQL-query).Execute

base.Commit

В приведенном шаблоне в первой строке осуществляется подключение к COM-объекту, с помощью которого осуществляется доступ к базе данных.

На следующей строке осуществляется подключение к базе данных с помощью метода OpenDatabase, который имеет два аргумента. Первый из них – имя базы, которым является полный путь к msi-файлу. Второй – режим доступа к базе данных:

  • 0 – только чтение;
  • 1 – чтение / запись.

На третьей – реализовано выполнение задаваемого запроса. SQL-запрос задается с помощью метода OpenView, а выполнение запроса – с помощью метода Execute.

Напомним, что в SQL-запросе регистр названия полей и имен таблиц имеет значение.

В последней строке осуществляется запись сделанных изменений в базе с помощью команды Commit.

Работа с таблицами в orca.exe

Рассмотрим подробнее структуру таблиц, содержащихся в msi-файле. Orca – мини-редактор SQL-таблиц, хранящихся как составная часть дистрибутива.

С полями таблиц баз можно совершать следующие действия:

  • чтение существующих полей;
  • создавать новые поля;
  • удалять поля;
  • изменять поля.

Чтение существующих полей

Для реализации шаблона поиска используется шаблон (см. листинг 2), отличный от приведенного в листинге 1. Это объясняется тем, что запись, удаление, замена осуществляются у единичного поля, а вывод на экран осуществляется для всех полей.

Трансформация листинга осуществляется в третьей строке листинга 1. Она разбивается на две подстроки – это строки 3 и 4 в листинге 2. Здесь разносятся методы OpenView и Execute.

Далее осуществляется чтение массива строк. Обратите внимание на то, что в запросе SELECT поля могут быть перечислены только по именам. Значение «*» в данном случае не работает. А во время чтения данных необходимо указывать нумерацию полей (Record.StringData(1)), начиная с единицы (1).

В листинге 2 приведен пример чтения всех полей (Property, Value) таблицы Property файла ACDSee 10 Photo Manager.msi:

Листинг 2. Чтение полей в указанной таблице

Set obj = CreateObject("WindowsInstaller.Installer")

Set ob = obj.OpenDatabase ("C:ACDSeeACDSee 10 Photo Manager.msi",0)

set View=ob.OpenView("SELECT Property, Value FROM Property")

View.Execute

Do

    Set Record = View.Fetch

           If Record Is Nothing Then Exit Do

           Wscript.Echo Record.StringData(1) + vbTab+vbTab+Record.StringData(2)

    Loop

Set View = Nothing

Создание новых полей

Создание новых полей используется достаточно часто, например, для того чтобы записать в дистрибутив программы ее серийный номер. Для этого необходимо добавить в таблицу Property поле PIDKEY с соответствующим значением, содержащим серийным номер продукта. Чтобы добавить новое поле, необходимо установить курсор на нужную таблицу (см. рис. 3) и, нажав в произвольной ее части правую кнопку мыши, выбрать пункт Add Row или нажать комбинацию клавиш . В появившемся диалоговом окне будет приведен список доступных полей. Необходимые значения можно присвоить в этом же окне.

Рисунок 3. Изменение параметра

Рисунок 3. Изменение параметра

Аналогичную операцию можно выполнить программным способом (см. листинг 3). Для этого необходимо вызвать объект WindowsInstaller.Installer. На основе шаблона, приведенного в листинге 1, сформируем листинг 3. В качестве второго параметра метода OpenDatabase необходимо указать 1, поскольку выполняется операция записи данных.

Самым сложным в данном листинге правильно сформировать запрос. Особенность запроса INSERT INFO заключается в том, что в первых по счету скобках, в которых указывается название полей, имя поля должно быть задано с родителем. Все имена параметров в запросе указываются без кавычек; все присваиваемые значения – в кавычках и, наконец, названия полей и таблиц чувствительны к регистру.

Листинг 3. Создание нового атрибута в таблице

Set a = CreateObject("WindowsInstaller.Installer")

Set b = a.OpenDatabase ("C:acdseeACDSee 10 Photo Manager.msi",1)

b.OpenView("INSERT INTO Property ?

    (Property.Property, Property.Value) VALUES ("PIDKEY", "1234567890")").Execute

b.Commit

Удаление существующих полей из таблицы

Удаление какого-либо поля осуществляется в соответствии со следующим алгоритмом:

  • установить курсор на таблицу, в которой необходимо удалить параметр;
  • установить курсор на удаляемый параметр в таблице;
  • нажать кнопку на клавиатуре или правую кнопку мыши, а в контекстном меню – DELETE;
  •  подтвердить намерение удалить параметр.

Эту же задачу можно решить программным способом (см. листинг 4), используя шаблон 1. Для обеспечения возможности записи в таблице необходимо установить второй параметр метода OpenDatabase равным единице (1).

Листинг 4. Удаление существующего атрибута в таблице

Set a = CreateObject("WindowsInstaller.Installer")

Set b = a.OpenDatabase ("C:acdseeACDSee 10 Photo Manager.msi",1)

b.OpenView("DELETE FROM Property WHERE "PIDKEY"="1234567890")").Execute

b.Commit

Изменение значений существующих полей

Изменение значения осуществляется путем установки курсора в необходимую ячейку двойным щелчком левой кнопки мыши (см. рис. 3).

Программное изменение свойства осуществляется по тем же правилам. По сравнению с предыдущими двумя случаями, изменяется только запрос.

В листинге 5 осуществляется отключение компонента Device Detector.

Листинг 5. Изменение значений существующих полей таблицы

Set a = CreateObject("WindowsInstaller.Installer")

Set b = a.OpenDatabase ("C:acdseeACDSee 10 Photo Manager.msi",1)

b.OpenView("UPDATE Feature SET Level="0" WHERE Feature="DevDetect"").Execute

b.Commit

Заключение

Внимательно изучив предложенный вариант, читатель без труда сможет либо с помощью сценария на VBScript, либо с помощью программы orca.exe значительно облегчить себе задачу массовой установки программного обеспечения, что позволит сэкономить массу времени и сил.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru