Предисловие



Некоторое время назад (можно сказать уже довольно давно) я замучился по просьбам знакомых и друзей переставлять Windows 7 на их ноутбуках/стационарных ПК после очередной “супер новой программы” или неумелого обращения с ПК. Тут можно еще сказать о том, что у самого тоже стоит Windows 7 x64 по сложившимся обстоятельствам – это главная причина статьи т.к. для х86 способов очень много. Естественно запросы и железо у людей различно (да и лицензии для разных версий ОС). В тот момент я и начал искать на животрепещущие ответы на интересующие меня вопросы: как автоматизировать процесс переустановки и добавить свои опции.


WAIK


Windows Automatic Installation Kit – специальный пакет инструментов Microsoft, который должен помочь в процессе развертывания ОС.
С самого начала я хотел просто создать файл ответов. Да, признаюсь – некоторое время меня вполне устраивали 2 USB-брелка с полуавтоматической установкой с кучей скриптов в зависимости от редакции. А потом захотелось оптимизации места…
Продолжая читать форум и статьи на OS Zone, я открыл для себя способ “склеивания” дистрибутивов различной разрядности, но в итоге я получил большую проблему в структуре диска – Win PE использовалась х86 и, естественно, восстановление системы x64 было невозможно. Мне пришлось смириться с этим горем. Но, как оказалось, ненадолго…

AutoIt3


Скорее всего, все слышали о скриптовом языке администрирования для Windows под названием AutoIt. В один прекрасный день мне нужно было автоматизировать какое-то мелкое действие, и я наткнулся на AutoIt. Как относится моя ситуация и AutoIt? На первый взгляд совершенно никакой. Дело в том, что этот язык может рисовать и GUI, причем с помощью утилиты из комплекта под названием Aut2exe_x64 можно компилировать нативные х64 exe-скрипты. Забавные интерактивные приложения в некоторых случаях действительно полезны.

Win PE


Win PE – специализированная облегченная версия Windows, предназначенная для запуска со съемных носителей. Именно из неё мы и начинаем установку Vista/7. К сожалению, Win PE x64 не способна работать с x86 приложениями. Раз это уже урезанная система (а не текстовый режим как в XP), то и и возможностей у нас гораздо больше. После непродолжительного поиска я наткнулся на подтверждение моих догадок: установка запускается процессом winpeshl.exe (есть и ini файл настройки), который вызывается при загрузки Win PE, запускает setup.exe в корне системного диска (для PE имя этого диска всегда X: ). У Setup.exe же есть параметр /unnatend: <путь до файла ответов>.
Тут у меня и появилась идея!

Let's go!


Идея в том, чтобы перехватить запуск setup.exe и вывести свою программку с необходимым мне внешним видом и настройками. Так же мы можем запускать наши любые х64 программы в среде Win PE (в разумных пределах — очень урезаная ОС).
Сразу оговорюсь, приведенный исходники покажутся некоторым очень неопрятным, непрофессиональным или не оптимизированным – так и есть. Я хочу показать лишь идею. Далекий я от профессионального программирования.

Первый шаг:
Необходимо «нарисовать наше меню для установки», задать опции и скомпилировать скрипт в exe-файл.
Напоминаю: компилировать нужно в х64 бит варианте.
Из-за большого объема скрипта я не стал выкладывать его «простыню» в мой пост.

Исходники программы-меню + изображения для Win PE на AutoIt3.
В приложенном архиве полностью готовый для компилирования скрипт со всем моим оформлением.

Второй шаг:
Для второго шага нам понадобится: DISM, который интегрирован уже в Windows 7; образ Windows 7 x64.

— Распаковываем наш образ операционной системы в любую папку.
— Удаляем файл ei.cfg из /sources
— Выделяем гигабайт 10 на диске, создаем там какую-либо папку для временного монтирования Win PE (допустим TempMount)
— Открываем cmd.exe и монтируем boot.wim с индексом 2 из распакованного образа диска в папку TempMount так:
DISM /Mount-Wim /WimFile:<Ваш путь>\sources\boot.wim /Index:2 /MountDir:<путь до папки>TempMount

Теперь необходимо сформировать где-нибудь такую структуру папок:
<Ваш путь>\Program Files\
<Ваш путь>\Sources\
<Ваш путь>\Windows\


В папке \Sources\ у нас будет папка с нашим «загрузчиком».
Мой пример:
\Sources\Loader\Images\
\Sources\Loader\scripts\
\Sources\Loader\Loader.exe


Где \Images\ папка с ресурсами оформления загрузчика;
\scripts\ — папка с файлами ответов для каждой редакции Windows*
Loader.exe — сам скрипт

В папке \Program Files\ необходимые нам программы (мы же не забыли добавить их в наш скрипт?), которые мы хотим запускать из установочного диска (обязательно натив х64)

В папке \Windows\ находится такая структура: \System32\winpeshl.ini
Где в winpeshl.ini находится путь до нашего Loader.exe.

Пример содержимого winpeshl.ini:
[LaunchApps]
%SYSTEMDRIVE%\sources\Loader\loader.exe


Третий шаг:
Теперь полученную структуру папок мы копируем в \MountTemp и соглашаемся на слияние.
Все. С Win PE можно покончить.
Выполняем в консоли:
DISM /UnMount-Wim /MountDir:<Ваш путь>\tempMount /commit

Четвертый шаг:
Теперь создаем iso образ и записываем его на диск/USB привычным вам методом.

Итог:


image
image
image

* Благодаря /unnatend: ключу Setup.exe можно задавать для различных редакций множественный варианты файлов ответов.

В похождениях были изучены справочные материалы команды DISM и сайта OS Zone

Спасибо за внимание!