Статья заняла призовое место на конкурсе статей OSZone.net
Аннотация
Цель этой статьи – показать методику переупаковки дополнений и обновлений Windows Vista в один установочный пакет с высокой степенью сжатия.
Обновления для Windows Vista
В-основном, дополнения и обновления для ОС Windows Vista распространяются в виде изолированных пакетов обновления (файлы с расширением msu). Имена этих файлов назначаются по общим правилам, например, в имени «Windows6.0-KB905866-v6-x86.msu»:
«Windows6.0» обозначает версию Windows, для которой предназначено обновление
«-KB905866» это номер статьи в базе знаний Microsoft, посвященной этому обновлению
«-v6» это номер версии обновления (отсутствует у обновления, выпущенного впервые)
«-x86» это архитектура процессора, для которой предназначена ОС Windows Vista и соответствующее обновление (ещё одно возможное значение для этого элемента «-x64»)
Файлы msu являются архивами формата cab. Основную часть пакета составляет файл cab одноименный с файлом msu. Остальные файлы, включенные в msu, нас пока не интересуют. Для установки обновления они не требуются, поэтому, исключив их, можно сэкономить порядка 120кБ на каждом обновлении.
Содержимое файла DataStore.edb
Некоторые обновления, в том числе и Ultimate Extras, можно получить непосредственно в виде архивов cab. Все обновления, скачанные с сайта Windows Update, сохраняются в каталоге «C:\Windows\SoftwareDistribution\Download» и его подкаталогах.
Кроме того, в файле «C:\Windows\SoftwareDistribution\DataStore\DataStore.edb» содержатся прямые ссылки на скачивание обновлений с сайта Microsoft.
Содержимое этого файла выглядит достаточно странно. Дело в том, что вместо того, чтобы использовать для хранения информации об обновлениях открытый формат, например xml, здесь используется двоичный файл огромного размера (3-5МБ). В этом файле, ближе к концу, расположены ссылки на обновления Windows Vista в 3-х основных форматах - exe, cab, psf. Наряду со ссылками на актуальные обновления в этом файле можно найти ссылки и на устаревшие обновления, так что к информации, полученной из этого файла, следует относиться с осторожностью. Ссылки в файле закодированы в Unicode и размещены достаточно беспорядочно.
Рисунок 1 - Просмотр файла DataStore.edb в MS Excel
Все эти ссылки указывают на сервер:
«http://www.download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/».
При этом к имени файла в конце еще добавляется его контрольная сумма, рассчитанная по алгоритму sha1, которая позволяет проверить целостность файла после скачивания.
Имя файла при этом будет выглядеть примерно так:
«windows6.0-kb933246-x86_158e0e639d96d8f638a844fce3b58a6d940fd1a7.cab».
Для наших целей эта возможность не понадобится, поэтому знак подчеркивания и следующие за ним 40 символов можно из имени файла смело удалять.
Особые обновления
Отдельно надо отметить следующие обновления:
А) Средство удаления вредоносных программ Microsoft Windows (KB890830)
Это обновление выпускается каждый месяц в виде исполняемого файла в трех вариантах.
windows-kb890830-v1.28.exe (содержит базу вредоносных программ полностью)
windows-kb890830-v1.28-deltavista.exe (базы начиная от выпуска Windows Vista)
windows-kb890830-v1.28-delta.exe (содержит обновление базы за последний месяц)
Нам, очевидно, понадобится 2-й вариант.
Б) Обновление определений для Windows Defender (KB915597)
Это обновление выпускается примерно раз в неделю в виде исполняемого файла в двух вариантах.
mpas-fe.exe (содержит полную версию определений)
mpas-d.exe (содержит определения вышедшие после выпуска полной версии)
Нам, вероятно, потребуются оба этих файла.
Переупаковка обновлений
Системные требования
Для переупаковки потребуется компьютер:
с установленной операционной системой Windows Vista (поскольку для распаковки архивов используется системная утилита «expand.exe» версии 6.0.6000.16386)
с объемом оперативной памяти не менее 512МБ (для упаковки архиватором 7-zip)
с объемом свободного места на жестком диске не менее 1ГБ (для временных файлов)
Необходимые программы
Нам потребуется архиватор 7-zip, который можно скачать по адресу:
«http://www.7-zip.org»
А конкретно из всего дистрибутива понадобятся:
Методика переупаковки
Создадим временную рабочую папку на диске с достаточным объемом свободного места (например «c:\temp») и скопируем в нее файлы «7za.exe», «7zSD.sfx» и файлы «config.txt» и «repack.bat», содержимое которых показано ниже.
Внутри рабочей папки создадим папку для обновлений в формате msu (например «c:\temp\msu») и скопируем в нее эти обновления.
Внутри рабочей папки создадим папку для обновлений в формате cab (например «c:\temp\cab») и скопируем в нее эти обновления.
Внутри рабочей папки создадим папку для распаковки обновлений (например «c:\temp\repack») и скопируем в нее обновления «windows-kb890830-v1.28-deltavista.exe», «mpas-fe.exe», «mpas-d.exe» и файл «setup.bat», содержимое которого показано ниже.
Рисунок 2 - Содержимое временной папки
Для переупаковки надо запустить файл repack.bat
Обратите внимание
Сценарий переупаковки не проверяет пакеты обновлений на корректность, но при установке пакеты не подходящие по архитектуре процессора или поддерживаемым языкам установлены не будут
После выхода новой версии обновления KB890830 в сценарий установки придется внести очевидные изменения
Если у вас имеется актуальная полная версия KB915597 (mpas-fe.exe) установку mpas-d.exe можно исключить.
Приложение. Необходимые файлы
Setup.bat
Содержимое файла setup.bat (должен быть сохранен в кодировке DOS):
@echo off
cls
color 1e
title Выполняется установка перепакованных обновлений для Windows Vista
echo Устанавливается "Средство удаления вредоносных программ Microsoft Windows"
echo (обновление Windows-KB890830-v1.28-deltavista.exe)...
start /wait windows-kb890830-v1.28-deltavista.exe /quiet /norestart
echo Устанавливается "Обновление определений Windows Defender - полное"...
start /wait mpas-fe.exe /quiet /norestart
echo Устанавливается "Обновление определений Windows Defender - дополнение"...
start /wait mpas-d.exe /quiet /norestart
echo Начата установка перепакованных обновлений для Windows Vista.
echo Внимание, это может занять несколько десятков минут.
echo После установки компьютер будет принудительно перезагружен через 15 сек.
for /d %%a in (*) do call :update %%a
shutdown.exe -r -t 15
exit
:update
echo Устанавливается обновление %1...
start /wait pkgmgr /ip /m:%1 /quiet /norestart
goto :eof
exit
repack.bat
Содержимое файла repack.bat (должен быть сохранен в кодировке DOS):
@echo off
cls
color 1e
title Выполняется переупаковка обновлений
echo Выполняется распаковка обновлений из файлов msu
for %%a in (msu\*.msu) do expand %%a -f:%%~na.cab cab
echo Выполняется распаковка обновлений из файлов cab
for %%a in (cab\*.cab) do md repack\%%~na&expand %%a -f:* repack\%%~na
echo Выполняется переупаковка обновлений в архив 7z
cd repack
..\7za a -r -mx9 ..\repack.7z *
echo Выполняется добавление модуля самораспаковки
cd ..
copy /b 7zSD.sfx + config.txt + repack.7z Vista_updates.exe
echo Перепакованные обновления находятся в файле Vista_updates.exe
pause&exit
config.txt
Содержимое файла config.txt (должен быть сохранен в кодировке UTF-8):
;!@Install@!UTF-8!
Title="Выполняется распаковка обновлений Windows Vista"
RunProgram="setup.bat"
;!@InstallEnd@!