Предисловие
Некоторое время назад (можно сказать уже довольно давно) я замучился по просьбам знакомых и друзей переставлять 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 привычным вам методом.
Итог:



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