Создание unattended-дистрибутивов

Существует целый класс дистрибутивов программного обеспечения, которые устанавливаются тихо и незаметно для пользователя, не вступая с ним ни в какие пререкания (то есть "диалоги"). Спектр применения таких "unattended" (на русский язык это слово понятно и кратко перевести нельзя) дистрибутивов крайне широк. Например, создание самораспаковывающихся видеопрезентаций на компакт-дисках, которые перед началом просмотра устанавливают необходимые видеокодеки автоматически и запускают в плеере определённый видеофайл. Или автоматическая установка программ при входе свежеустановленного компьютера в Windows (а ещё круче - в домен Active Directory). Иногда в таких дистрибутивах нуждаются "продвинутые" компьютерщики, чтобы раздавать их менее "продвинутым", ибо менее "продвинутый" "чайник" может не установить правильно программу.

Надеюсь, с необходимостью научиться делать unattended-дистрибутивы вы смирились. Теперь посмотрим, что нам предлагают производители программ в качестве "рабочих инструментов", то бишь инсталляторов.

К нынешнему моменту выжило только несколько крупных производителей программ-инсталляторов и появилось несколько мелких, но интересных. В качестве первых могу назвать Microsoft Windows Installer (в дальнейшем называемый WI), Wise Installation и Install Shield, переживающий уже 12-ю инкарнацию. Второго типа инсталляторов намного больше, но в качестве основных можно указать InnoSetup или Nullsoft SYS. Их и будем рассматривать в первую очередь, остальные добавим в следующих сериях наших статей (если они доживут к тому моменту).

Как правило, создание Unattended-дистрибутива начинается с разбора официального дистрибутива "по кирпичикам" и выяснения параметров, если такие есть, неофициального задания slipstream (тихой) установки. Мы же дополнительно поставим задачи не только установить программу, но и задать какие-то установки, отличные от установок по умолчанию. Такая "добавка" называется кастомом (статья, посвященная кастомизации MS Office 2003, будет опубликована в одном из ближайших номеров "КВ").

Пару слов о "подопытных кроликах", то есть, о программах, которые мы будем делать UNATTENDED сегодня. Я специально подобрал несколько полностью русскоязычных лёгких для изучения в плане slipstreaming-a программ, которые широко распространены на компьютерах, стоящих в Беларуси.

 

Приглашаю в студию проекты:

  • MinskPhones 2005 (смех в зале)
  • Esmasoft CityInfo 2.7 (аплодисменты)
  • Adobe Reader 9 (бурные аплодисменты)
  • Opera 9.52 (бурные аплодисменты, переходящие в овации)
  • DrWeb 4.44 (аплодисменты становятся тише, продукт-то платный, ковыряние в нём запрещено условиями "Лицензионного соглашения конечного пользователя")
  • "1С:Предприятие" версии 7.7 (администраторы сетей малых предприятий напряглись)
  • WinRAR 3.71 (выкрики "Фу!" "Байан!" и гнилые помидоры с галёрки)

Раскручиваем барабан, и на повестке дня - Unattended MinskPhones 2005.

В принципе, программа не имеет инсталлятора и может просто переписываться в любую папку на жёстком диске и работать оттуда. Но зачем нам хранить на компакт-диске большую программу, а не её маленький архив? Призываем на помощь WinRAR (напомню, неограниченная лицензия на 40 дней - бесплатно) и следуем за мной.

Выделяем папку с MinskPhones и щёлкаем на ней правой кнопкой мыши.

Выбираем пункт контекстного меню "Добавить в архив".

В открывшемся окне "Мастера архивации WinRAR" помечаем флажками опции "SFX" и "непрерывный" (solid). Уходим из закладки "Общие" в закладку "Комментарий" и вставляем в окно комментария следующий текст:

Path=%ProgramFiles%\
SavePath
Setup=MinskPhones2005\phonview.exe
Silent=1
Overwrite=1
Shortcut=D, "MinskPhones2005\phonview.exe", "", "телефонный справочник абонентов МГТС (Минск)", "МГТС Минск"

В первой строке мы указали, что архив при инсталляции будет разархивироваться в папку "Программных файлов". В последней строке указали, что после разархивации на EXE-файл программы будет создан ярлык на Рабочем столе с определённым именем. К сожалению, инсталляция производится от имени определённого пользователя, поэтому ярлык помещается на Рабочий стол этого пользователя, и надо будет его вручную перемещать на Рабочий стол папки Allusers, если пользователей на вашем компьютере несколько.

Возвращаемся в закладку Мастера архивации WinRAR "Общие" и нажимаем кнопку OK. Полученный файл тестируем на любом другом компьютере.

Просто? Всё гениальное просто :)

Следующий игрок - CityInfo 2.7 от ESMA soft Company. Это карта города Минска или, как сейчас модно говорить, геоинформационная система. Имеет инсталлятор от InnoSetup. Официально озвученный ключ командной строки для slipstream-инсталляции звучит как "/s". То есть, необходимо создать BAT- (или CMD) файл, в котором просто запускалось бы озвученное сочетание:

cityinfo27.exe /s

Но в этом мире нет ничего вечного. И схемы транспорта постоянно меняются, и дома новые строятся. Поэтому с регулярностью в месяц программа должна быть поправлена при помощи специального обновления trupdateXX.exe, где ХХ - номер обновления. Как установлено, основная задача обновления - сделать изменения в файлах данных:

city.act
city.chm
city.clf
CityInfo.exe.

Инсталлируем на своём компьютере эту программу, инсталлируем на неё свежее обновление (на момент подготовки материала к печати - 21) и вышепоименованные 4 файла архивируем при помощи WinRAR в отдельный архив, как было показано выше на примере MinskPhones. Теперь в CMD-файл, созданный выше, дописываем к слипстриму вызов unattended-обновления (например, вы его назвали obnovka_dlja_karty.exe)

cityinfo27.exe /s
obnovka_dlja_karty.exe

Сохраняем наш результат и создаём папочку, в которую складываем сам cityinfo27.exe, обновление карты и CMD-файл. Познакомимся ещё с одной функцией WinRAR SFX, а именно - запуском программ после завершения распаковки. Методом, описанным выше, создаём полный unattended-дистрибутив, архивируя свежесозданную папку. Только степень сжатия сейчас выставляем "без сжатия", ведь и инсталлятор, и патч уже сжаты до нас. И в окне комментария дописываем строчку:

Setup=[имя вашего CMD-файла]

Мы создали уже третий RAR-SFX архив. Уместно поговорить о том, как мы их будем различать. WinRAR предоставляет возможность создаваемый самораспаковывающийся архив снабдить иконкой. Чтобы эту возможность использовать, необходимо любыми доступными средствами получить нужную иконку. Я, например, делаю это, натравив BuddySoft IconGrabber на CityInfo.exe. Когда вы будете создавать архив, не поленитесь заглянуть в закладку "Мастера архивации WinRAR" "Текст и графика" и в нижней строчке прописать путь к сохранённой иконке.

Итак, кастом готов. Что же он нам может дать ещё, помимо лёгкости запуска? Обратите внимание на то, что мы до сих пор не устанавливаем флажок "заблокировать архив". Зачем? Ведь кто угодно потом может подменить в нашем архиве наш EXE на свой вирус и давать кастом третьим лицам. С претензиями на вирусную заражённость пользователи придут к нам. Нам это надо?

Не надо. Совершенно лишнее. Но я пока и не говорил, что полученный продукт можно отдавать конечным пользователям. Дело в том, что все сделанные нами пока unattended-дистрибутивы предназначены для нашего пользования. И не блокируются они специально для того, чтобы мы могли в любой момент сами внести в них изменения.

Например, выйдет 22-е обновление CityInfo. Нам будет необходимо переделывать весь архив? Нет. Достаточно будет провести обновление на тестовом компьютере, забрать с него изменившиеся файлы, ОБНОВИТЬ ИМИ файл obnovka_dlja_karty.exe и ЭТИМ ФАЙЛОМ обновить конечный дистрибутив.

Скопировав полученный обновлённый дистрибутив в отдельную папку на своём винчестере (например, с сегодняшней датой), скопируйте его ещё раз, например, в папку "Текущие инсталляции", откройте при помощи WinRAR и ТОЛЬКО ТЕПЕРЬ установите флажок "Защитить архив от изменений". Полученный файл МОЖНО отдавать конечным пользователям. :)

Начинаем разбираться с очень серьёзными проектами. На очереди - Adobe Reader 9, русская версия которого датирована 23 сентября 2008 года.

В Adobe использовали Microsoft WI, поэтому распакованный дистрибутив будет содержать MSI-базу данных и CAB-архив с файлами. Но для того, чтобы конечные пользователи качали с сервера компании всего один файл, производители навесили сверху над MSWI ещё один инсталлятор от NOSSO inc., назначение которого - распаковать файлы WI-инсталлятора.

Чтобы быстро и без проблем найти эти файлы, достаточно запустить верхний инсталлятор на выполнение и затем поискать на системном жёстком диске (как правило, диске С) файлы, созданные СЕГОДНЯ и имеющие размеры более 20 Мб. Вот в том месте, где обнаружился DATA1.CAB, и находятся все остальные распакованные файлы.

Без зазрения совести копируем найденное в сухое и тёплое место на винчестере (например, папку AR9RUS) и... закрываем инсталлятор от NOSSO! Он своё дело сделал.

Если вы внимательно читали мои предыдущие материалы, то уже догадываетесь, что нас ожидает. Ключик для slipstream-инсталляции звучит как "/qn" и может меняться на "/qb-", если мы хотим видеть прогресс-бар.

Попробуйте написать сам комментарий.

Для вашей самопроверки опубликую его:

Path=%TEMP%\
SavePath
Setup=msiexec /i %TEMP%\AR9RUS\AcroRead.msi /qb-
Silent=1
Overwrite=1

Почему %TEMP%\, откуда он взялся? В отличие от некоторых других программ, Adobe reader полностью 32-битная, инсталлятор WI тоже полностью 32-битный и он легко переваривает в путях пробелы и кириллические символы. А если бы вы использовали этот метод (предварительная распаковка во временную папку) для инсталляции 16-битных программ, то вас бы инсталлятор послал туда, куда Билл Гейтс мышей не гонял.

В строке SETUP= можно записать всего ОДНУ команду, которая будет выполнена. А ведь так хочется ещё после установки добавить REG-файл, который закрывал бы надоедливое (для всех пользователей) окошко Beyond The Acrobat Reader - ведь всё равно его никто не использует.

Конечно, можно положить такой REG-файл в одну папку со свежесозданным инсталлятором, написать CMD-файлик, запускающий последовательно сначала unattended-дистрибутив, а затем:

regedit /s no_beyond_reader.reg

И создать ещё один unattended- дистрибутив, но это долго и непродуктивно. Гораздо легче узнать о существовании авторской утилиты Adobe Customization Wizard версии 8, которая лежит непосредственно на сайте Adobe (к сожалению, ссылка на неё доступна только в англоязычной версии сайта) и предназначена для создания MST-трансформаций. Подробнее рассказывать не буду специально, чтобы вас заинтересовать, но упомяну, что она схожа по интерфейсу и назначению с рассмотренным в предыдущей статье Microsoft Office Resource Kit.

Кладём полученный MST-файлик (например, no_beyond_reader.mst) в одну папку к AcroRead.msi, и тогда командная строка в комментарии WinRAR зазвучит так:

Setup=msiexec /i %TEMP%\AR9RUS\AcroRead.msi /qb- /transforms=no_beyond_reader.mst

Аналогичным способом поступаем с Opera 9.52.

Эта программа тоже использует WI для основной инсталляции, но (по тем же соображениям, что и Adobe) производитель её также запаковал другим инсталлятором в один файл. Это - крупный инсталлятор InstallShield. Вообще говоря, IS поверх WI - часто встречающаяся среди крупных проектов комбинация инсталляторов, позволяющая производителю легко сопровождать массу релизов программы, предназначенных для разной аудитории. Но это я отвлёкся, тема большая, вернёмся к нашим баранам.

Ключевой особенностью инсталляции Opera, начиная с версии 9.5, является двойная распаковка WI-файлов. На первом этапе распаковываются общие для всех файлы, а на втором этапе - SETUP.INI-файл для данного компьютера. В IS этот файл вместе с SETUP.EXE отвечает за настройки локализации сообщений инсталлятора. На выбор нужного INI-файла влияют 2 фактора: установка на компьютере определённой раскладки клавиатуры и часовой пояс. Приведу пример. Если взять полностью англоязычный дистрибутив Windows (то есть, кроме английской 409-й раскладки клавиатуры ничего нет) и установить часовой пояс "+2" (Афины), то инсталлятор Оперы запустится... на греческом! А вот если IS видит установленную 419-ю (русскую) раскладку клавиатуры, то переключается на правильный язык, русский.

Поэтому, когда вы запустите основной (IS) инсталлятор "Оперы" и начнёте искать на своём компьютере MSI-файлы Opera, вы найдёте их в двух экземплярах. Присмотритесь к INI-файлам в этих папках. Выберите тот файл, который изменён хотя бы на 1-2 секунду позже. Это и будет нужная папка с нужным WI-дистрибутивом. В принципе, ничего страшного не случится, если вы выберете в качестве рабочего не тот дистрибутив. Просто деинсталляция "Оперы" (если таковая случится) будет сопровождаться сообщениями на греческом. Весёлая жизнь!

Особенно она будет "весёлой", если вы где-то заразитесь компьютерным вирусом. На сцене - многократный чемпион по unattended Dr.Web 4.44!

Копаться в инсталляторе этого антивируса строго запрещено. И вам я делать этого не советую. Зачем? Ведь уже полтора года назад были известны ключи командной строки для slipstream: "/quick /skipscan /noschd /nospml /skipupd /SETUPEXEDIR="%TEMP%\drweb" /auto". Первый и последний отвечают непосредственно за тишину во время работы инсталлятора, второй пропускает автоматическую быструю проверку на вирусы, третий, четвёртый и пятый - не устанавливают "Планировщик", "Проверку почты" и "Обновляльщик", соответственно. А вот далее идёт указание папки, из которой DrWeb инсталлятор переложит в папку инсталлированной программы лицензионный ключ и, при необходимости, обновления.

К сожалению, недостатком slipstream-инсталляции DrWeb (и об этом необходимо постоянно помнить!) является отсутствие автоматической регистрации резидентного сторожа (SPIDER). Поэтому в одну папку с фирменным инсталлятором (назовём его drweb-444-win-ru.exe) кладём ваш drweb32.key и CMD-файл следующего содержания:

%TEMP%\drweb-444-win-ru.exe /quick /skipscan /noschd /nospml /skipupd /SETUPEXEDIR="%TEMP%\drweb" /auto
c:\progra~1\drweb\spidernt /install:auto

От вирусов защитились, пора и поработать. "1С: Предприятие" будет считать наши доходы и расходы, для этого мы его установим.

От старого, частично 16-битного инсталлятора InstallShield многого ожидать не приходится. Поэтому необходимо распаковывать инсталлятор в папку с коротким именем, не содержащим кириллических символов и пробелов. К сожалению, сложно подобрать такую папку, которая была бы у всех и запись в которую не вызвала бы осложнений у RAR SFX-архива, запущенного (по случайности) не с правами локального администратора. Я использую папку c:\install, которую приходится после успешной инсталляции удалять вручную :(.

Ключики slipstreaming-a просты, как огурец: "/s /sms". Предположим, что инсталлятор лежит в папке "1С", внутри которой - DISK1, DISK2, DISK3 и так далее. Сам SETUP.EXE находится на первом диске.

Проконтролируйте себя ещё раз в написании комментария для архива:

Path=c:\install\1C
SavePath
Setup=c:\install\1C\1C77\DISK1\setup.exe /s /sms
Silent=1
Overwrite=1

Получается?

Идентично производим создание unattended для фирменного конвертора 1С MXL в XLS:

Path=c:\install\1c\1cmxl
SavePath
Setup=c:\install\1c\1cmxl\SETUP.EXE /S /SMS
Silent=1
Overwrite=1

Во втором примере я специально привёл ключи командной строки большими буквами, чтобы проиллюстрировать, что 16-битным инсталляторам был неважен их регистр. А современным инсталляторам иногда он важен.

Не забывайте блокировать архивы перед тем, как отдаёте пользователям!

Мы уже столько раз пользовались WinRAR-ом, что он задымился ;) пора научиться делать и его unattended-дистрибутив. Как пишет сам Саша Рошаль, ключ командной строки для слипстриминга есть, "/s", и он работает. Но ведь нужно ещё и положить регистрационный ключик в папку программы, и настройки пользовательского интерфейса определить. Открываем WinRAR, в меню Параметров выбираем "Сохранить настройки" и сохраняем их (например, под именем nastrojki.reg) в одну папку с родным инсталлятором. Пишем CMD-файл:

winrar371ru /s
regedit /s nastrojki.reg

Сохраняем его в эту же папку и делаем unattended-дистрибутив по стандартной методике с запуском этого CMD-файла.

А регистрационный ключ WinRAR сам найдёт в папке дистрибутива и сам переложит в папку программы (с приветом Игорь Данилову :).

Надеюсь, сегодня не сильно вас утомил. Дерзайте сами на благодатной почве слипстриминга!

Дядюшка хардовик,
Mexicanetz Express
crowngold.narod.ru

Версия для печатиВерсия для печати

Номер: 

40 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!