Рецепт выпечки правильного дистрибутива


1. Постановка задачи

По роду своей деятельности мне часто приходится устанавливать на девственно чистый MS Windows пакет MS Office XP. Некоторый процент инсталляций приходится делать вне моего офиса, без доступа к локальной сети, прямо с компакт-диска. Но в большинстве случаев приходится инсталлировать более-менее стандартный набор компонентов. Сам по себе процесс установки не длителен, но все же занимает время и отвлекает внимание, поскольку приходится перевыбирать компоненты, вводить вручную код продукта и так далее. К тому же, на откровенно слабых компьютерах сам запуск оболочки инсталлятора "съедает" также существенную долю производительности. От невнимательности оператора (забыл подменить mso.dll и уехал, а офис проработал 50 раз и умер) зависит работоспособность программы, а также безопасность системы, в целом (если забыть поставить сервиспаки).

Ставилась задача создать дистрибутив MS Office XP, который при минимальном участии оператора создавал бы стандартную (но все равно предварительно заданную оператором) конфигурацию, мог бы при желании устанавливать полную или выборочную конфигурации, предохранял от ошибок оператора при вводе регистрационного ключа и активации, а также включал в себя последние обновления.


2. Используемое программное обеспечение

  • Любой дистрибутив MS Office XP
  • Один пакет MS Windows Installer SDK (только англоязычный)
  • По два дистрибутива (клиентский и администраторский) Service Pack 1, 2 и 3 (русскоязычные)
  • Командная строка или ее эмулятор из FAR/Total Commander


3. Теоретический минимум


3а. Автоустановка

Сама Microsoft документирует исполнение самоустанавливающихся дистрибутивов через ключи командной строки. Как свидетельствует setup /?, есть два ключа: /q и /qb. Первый просто исполняет команду в "тихом" режиме, второй дополнительно включает "пакетный" режим обработки команд. Это имеет значение при использовании команды setup в BAT- и CMD-файлах. По ключу /q инсталлятор начнет выполнение команды и сразу передаст управление следующей команде файла. Это часто является критически важным, поэтому практически всегда в пакетных файлах используют ключ /qb, по которому выполнение следующей команды ожидает ответа от предыдущей об успешном завершении операции.

Таким образом, в папку дистрибутива следует положить файл s.bat (здесь и далее имена файлов - примерны, если не указано явно обратное) следующего содержания и запускать для автоустановки именно его:

--- s.bat----
@echo off
setup /qb
pause Install Complete
----------

Практически же оказывается, что не у всех это заработает. Давайте разберемся в причинах.


3б. Виды дистрибутивов

Дистрибутивы MS Office XP бывают трех видов. Enterprise, в котором все работает, - самый для нас желанный. Слабее него - OEM дистрибутив. У него не работает "тихая установка", ключ которой описан в п. 3а. Ну и, наконец, дистрибутив Retail - самый слабый, в котором отключены ВСЕ дополнительные опции пакетной инсталляции. Распознать Retail-дистрибутив просто: у него файл настроек называется proret.msi, у OEM - proop.msi, у Enterprise - proplus.msi.

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


4. Вскрытие файла таблиц установки (MSI)

Внутреннее устройство дистрибутива просто. Все файлы сложены в Office1.cab, а параметры настройки - в MSI-файл. Для редактирования настроек необходима утилита ORCA, которая входит в комплект MS Windows Installer SDK. Скачать (доступна только англоязычная версия) его можно на сайте Microsoft по адресу www.microsoft.com/downloads/details.aspx?FamilyID=e96f8abc-62c3-4cc3-93ad-bfc98e3ae4a3&DisplayLang=en. После скачивания 17 мегабайт их надо проинсталлировать, а в полученной папке нужно проинсталлировать ORCA.MSI. Теперь у нас в контекстном меню MSI-файлов появилась позиция "Edit with ORCA" (редактировать с помощью орка). Редактируем наш MSI-файл дистрибутива.

Устроен ORCA просто: в левом фрейме - список таблиц, в правом - сами таблицы. Таблицы состоят из строк. Каждая строка состоит из имени параметра и значения параметра, отображаемых слева и справа, соответственно. Чтобы отсортировать строки по возрастанию или убыванию имени или значения параметра, нужно сделать, соответственно, один или два щелчка по заголовку нужного столбца. Чтобы выделить строку, нужно щелкнуть мышью по малюсенькому серому прямоугольнику слева от нее. Чтобы войти в режим редактирования текста, нужно подвести курсор мыши к нужному месту, а затем дождаться его превращения из стрелочного в текстовый вид. После щелчка вас пропускают в Святая Святых Инсталлятора.

Внимание! Не все, что я буду описывать дальше, может вам пригодиться. Давайте сразу разделимся на две части. Есть люди, которым всего лишь нужно подготовить самоустанавливающийся дистрибутив, а есть люди, которые захотят из него вырезать что-то ненужное или добавить свое. Первые могут читать только пункты, помеченные курсивом. Второй половине необходимо следовать ВСЕМ без исключения пунктам.

  1. В таблице InstallExecute-Sequence убрать запись NoQuietInstallError, разрешив использование невидимого для пользователя режима установки.
  2. В таблицах AdminExecute-Sequence и AdminUISequence убрать записи NoAdminInstallError, разрешив административную установку.
  3. В таблице Property сменить ReleaseType на 0, превратив дистрибутив в Enterprise.
  4. В таблице Property сменить PIDKEY (серийный номер без дефисов). Смена регистрационного ключа необходима для того, чтобы корректно заработали свежие ServicePacks (очень распространенные ключи в SP2 и SP3 заблокированы).
  5. В таблице Feature в значениях Level записаны параметры установки компонентов Office. Следует выставить 100 для тех компонентов, которые не нужны, и 1 - для тех, которые нужны. 99 - это "установка по первому требованию".
  6. В таблицах Feature Components и Feature Dependancy указана зависимость компонентов друг от друга. Если вы хотите, например, инсталлировать какой-то компонент от Access, не устанавливая сам Access, то вам необходимо разорвать связь (убрать соответствующую строку с именем компонента из первой таблицы и единичку из второй).


5. Наложение сервиспаков

На данный момент доступны три Microsoft Office XP Service Pack, скачать которые можно на www.microsoft.com/rus/downloads в разделе Microsoft Office (размер клиентской версии SP1 - 11, SP2 - 12, SP3 - 17 мегабайт).

Во-первых, необходимо определить, какие сервиспаки наложены на ваш дистрибутив (вырезать их очень проблематично, это выходит за узкие рамки статьи). Зайдите в каталог Files вашего дистрибутива и найдите там папку OSP. Если в ней присутствуют папки с языками (например, 1049 - русский язык), проверьте, какие OSP.CAB в ней присутствуют. Присутствие соответствующего кабинета говорит о наличии наложенного сервиспака.

Накладываем недостающие ServicePack на дистрибутив следующим способом:

  1. открываем WinRAR файл с сервиспаком;
  2. извлекаем запакованные файлы в папку дистрибутива;
  3. из командной строки подаем команды (Х - номер сервиспака):
    msiexec /p mainspX.msp /a proret.msi shortfilenames=true /qb
    msiexec /p owc10spX.msp /a owc10.msi shortfilenames=true /qb
  4. удаляем из папки дистрибутива файлы сервиспака.

Третий сервиспак просто так не накладывается. Чтобы наложить его, требуется накладывать АДМИНИСТРТИВНУЮ установку сервиспака (58 мегабайт). А гораздо более элегантно решение, предлагаемое самой Microsoft - накладывайте СРАЗУ И ТОЛЬКО 3-й сервиспак, и ваши волосы будут мягкими и шелковистыми, так как он содержит в себе и 1-й, и 2-й, и все обновления после 2-го. Но если вам достался дистрибутив с наложенным SP1, придется выкачать административную установку и накладывать ее :( Наложение клиентской версии сервиспака проходит за несколько минут, административной - до 10...15 минут на слабых машинах.


6. Редактирование кабинета

Файлы Microsoft Office заархивированы в единый CAB-файл. Некоторым людям хочется те или иные файлы оттуда удалить, чтобы уменьшить размер дистрибутива за счет неиспользуемых файлов. И всем без исключения необходимо подменить файл MSO.DLL, требующий активации "Офиса" через интернет. Ну, нету у нас интернета, нету! :-)

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

В установленном нами пакете Windows Installer SDK есть замечательная программа makecab.exe. Она упаковывает в единый CAB все файлы, которые ей подсовывают при помощи файла директив. Давайте теперь все наши знания увяжем в единую последовательность:

  1. открываем WinRAR файл OFFICE1.CAB;
  2. извлекаем оттуда все файлы в отдельный каталог. Копируем туда же makecab.exe;
  3. убираем ненужные файлы, добавляем нужные ;), ну, вы сами знаете что;
  4. в отдельном окне открываем командную строку. Заходим в каталог распакованных файлов. Лезем в свойства окна в закладку "Расположение". Свойство "Ширина" устанавливаем в 160 символов (иначе у нас будут серьезные проблемы с файлами, имеющими длинные имена);
  5. исполняем команду dir > a.txt;
  6. открываем Microsoft Excel, им открываем файл a.txt, начинаем импорт с 8 строки, кодовая таблица - MSDOS, ячейки фиксированной ширины;
  7. во втором шаге "Мастера Импорта" при помощи двойных щелчков удаляем все ненужные границы ячеек, оставляя только одну - ровно перед началом списка файлов;
  8. в третьем шаге "Мастера Импорта" щелкаем по ненужному первому столбцу и указываем "Пропустить столбец", щелкаем по нужному второму и выбираем формат "текстовый";
  9. сохраняем полученный результат как текстовый файл с разделителями - табуляторами;
  10. открываем файл при помощи Microsoft Word. В "Сервис - Параметры Автозамены - Автоформат при Вводе" убираем флажок "Заменять прямые кавычки парными";
  11. "Правка" - "Заменить" - включаем "Больше". В "Найти" при помощи "Специальный" вводим "знак абзаца", а в "Заменить" ставим этот же "знак абзаца" между двумя знаками двойных кавычек. Нажимаем "Заменить все";
  12. мы получили список имен файлов папки дистрибутива, каждое из которых обрамлено двойными кавычками. Убираем из списка сам makecab.exe и a.txt. Ставим двойные кавычки в начале первой строки и в конце последней, где их не поставил Word в автоматическом режиме;
  13. теперь нужно дописать в начале списка несколько параметров для компилятора. Записываем вслед за мной (директивы начинаются с точки):
    .Set MaxDiskSize=251200000 (указать, что кабинет будет одним файлом ОЧЕНЬ большого размера);
    .Set Cabinet=on (включить режим сжатия всех файлов в один кабинет);
    .Set Compress=on (включить сжатие);
    .Set CompressionType=MSZIP (сжатие по алгоритму ZIP);
    .Set CompressionLevel=7 (максимальный уровень сжатия);
    .Set CabinetNameTemplate="OFFICE*.CAB" (маска имени полученного файла);
    .Set DiskDirectoryTemplate=".." (положить в каталог на уровень выше папки);
  14. сохраняем файл, закрываем, возвращаемся в окно командной строки и исполняем команду makecab /f a.txt". Компиляция занимает около 10 минут на Celeron700/128SDRAM/FujMPG;
  15. кладем полученный OFFICE1.CAB вместо оригинального. Удаляем папку с временно разархивированными файлами, а a.txt и makecab.exe укладываем в сухое теплое место для последующих экспериментов.

Итак, все готово! Запекаем полученный дистрибутив на болванку и делаем тестовую инсталляцию. Удачи вам в нелегком деле!

Дядюшка хардовик Mexicanetz Express,
[email protected]

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

Номер: 

08 за 2005 год

Рубрика: 

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

Комментарии

Страницы

Аватар пользователя Anonim
ЧУШЬ 8) ПОЛНАЯ есть софтина nLite интегрирует сервис паки и офиса и винды и плюсдополнительные опшинсы.

Ознакомиться можно здесь http://nuhi.msfn.org/

З.Ы. Автору совет мозги не компосировать а прессу читать 8) ....

8==========>

Аватар пользователя Savely
Таки у dir есть ключ /b... Не стоит начинать где-то в Екселе, да еще с восьмой строчки..
Аватар пользователя Еще один аноним
Чушь полная насчет NLite. Он с офисом не работает. А приведенный рецепт работает. по крайней мере по части получения административного дистрибутива. Дальше еще не проверил.
Аватар пользователя paragonix
Давно подсознательно ждал такую статью!

По ходу дела возникли такие замечания:

1)после описанной перепаковки Office1.cab увеличился на 31Мб. Уж лучше запаковать нужные файлы в самораспаковывающийся в указанное место в тихом режиме архив или инсталляционный пакет. У меня, то, вы понимаете, о чем я, заняло чуть более 4Мб. И включить в командный файл.

2)Тоже самое с наложением сервиспаков. Папка с дистрибутивом распухла с 240Мб до 680Мб. Хотя возможен простой запуск сервиспака из того же командного файла с ключом /s после установки оффиса.

3)Самое важное. Не получилось-таки выставить флаги инсталляции (LEVEL 1, 99 и 100). Вернее выставить-то получилось, но это не везде сработало. Что-то выставилось правильно (удалось сделать недоступными Аутлук и ПоверПоинт), а многое так и не выставилось правильно. Например, справка Аксесс - выставил 99 (по первому требованию), а она все равно ставится; языковые параметры (расстановка переносов, тезаурус и пр.) - выставил 1 (ставить), а на самом деле расстановка переносов не устанавливается, как будто я оставил там 99. Где-то что-то еще надо крутить. А как у автора все это сложилось?

Аватар пользователя Mexicanetz Express
Уважаемый Аноним! Советую не читать сайты, а работать с nLite на практике. И тогда многое из написанного на сайте будет читаться в другом ключе. Есть такая шутка старая про программистов: "если в программе что-то не работает, обзовите это фишкой, а не багом". Из 19 дистрибутивов W2K SP4 rus ни в один nLite не смог интегрировать хотфиксы полным комплектом.

Для примера приведу сайтик updates.ya1.ru -- тамошний автор тоже собрал коллекцию хотфиксов, написал CMD-файл... НО! на все хотфиксы одинаковые ключи -z-q наложил... Оно, соответственно, и не работает!

мальчик явно пошел по пути nLite %)

Аватар пользователя Mexicanetz Express
Уважаемый Парагоникс!

Увеличение размера кабинета при перепаковке вызвано различием в методах упаковки makecab.exe и тех утилит, которые используются в Microsoft -- насколько я понимаю. Дело в том, что ZIP-сжатие 7й степени, которое описано в статье, по-видимому, менее эффективно нежели применяемый в MS алгоритм.

Если вы внимательно читали предисловие статьи, ставилась цель создать дистрибутив MS Office, а не сторонний программный продукт :) Такой дистрибутив, который бы умел инсталлироваться и по сети, и с компакт-диска, а не создавать временные файлы неизвестно где и неизвестно зачем. И который был бы застрахован от невнимаетльности оператора, забывшего запустить инсталлятор SP3 или BAT-файл целиком :)

Если установка не идет тем путем, которым мы хотим -- причина в таблицах Dependancy. Ищите там.

Аватар пользователя paragonix
По первым 2-ум пунктам понятно - цели у всех немного разные.

Вот последний абзац и остался непонятым.

Можно привести подробный пример хотя бы для "справки Access"?

Не совсем понятны строение таблиц Dependancy и принципы их редактирования.

Аватар пользователя Дмитрий
Все это здорово и замечательно, спасибо за хорошую статью, у меня остался только один вопрос после прочтения, как изменить директорию установки с с:/программ файлс/... на диск с:/офис

спасибо.

Аватар пользователя Инкогнито
И правда флаги 1, 99, 100 не работают. У меня выставлено 1, а оно не ставит.... Как быть? Есть ли какое описание к таблицам Features и пр.
Аватар пользователя lex
Я решил траблу чисто шаманским методом и даже не представляю себе как так получилось. Короче, в той же таблице Features расставляешь Level 1, 99 или 100. Помимо этого еще в колонке Attributes поставил 0 (ноль) и о, чудо, теперь нужный компонент устанавливается! Но, может и нет, что тогда? Тогда полез по иерархии выше и обнаружил, что уровень выставлен 99 или 100. Поставил вместо этого 1 и атрибут 0 и все заработало. Чисто шаманский метод........

Кстати у кого-нибудь есть метода или расшифровка всех атрибутов/колонок/строк в этих MSI-таблицах?

Страницы