|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista » 7 / 2008 R2 - Многовариантная установка Microsoft Windows 7 x64 |
|
7 / 2008 R2 - Многовариантная установка Microsoft Windows 7 x64
|
Новый участник Сообщения: 3 |
К сожалению, на habrahabr эти мысли не были востребованы.
Ниже идет сама статья. Идея написания статьи пришла в голову давно, но по сложившимся обстоятельствам вспомнил именно сегодня. Некоторое время назад (можно сказать уже довольно давно) я замучился по просьбам знакомых и друзей переставлять Windows 7 на их ноутбуках/стационарных ПК после очередной “супер новой программы” или неумелого обращения с ПК. Тут можно еще сказать о том, что у самого тоже стоит Windows 7 x64 по сложившимся обстоятельствам – это главная причина статьи т.к. для х86 способов очень много. Естественно запросы и железо у людей различно (да и лицензии для разных версий ОС). В тот момент я и начал искать на животрепещущие ответы на интересующие меня вопросы: как автоматизировать процесс переустановки и добавить свои опции. Windows Automatic Installation Kit – специальный пакет инструментов Microsoft, который должен помочь в процессе развертывания ОС. С самого начала я хотел просто создать файл ответов. Да, признаюсь – некоторое время меня вполне устраивали 2 USB-брелка с полуавтоматической установкой с кучей скриптов в зависимости от редакции. А потом захотелось оптимизации места… Продолжая читать форум и статьи на OS Zone, я открыл для себя способ “склеивания” дистрибутивов различной разрядности, но в итоге я получил большую проблему в структуре диска – Win PE использовалась х86 и, естественно, восстановление системы x64 было невозможно. Мне пришлось смириться с этим горем. Но, как оказалось, ненадолго… Скорее всего, все слышали о скриптовом языке администрирования для Windows под названием AutoIt. В один прекрасный день мне нужно было автоматизировать какое-то мелкое действие, и я наткнулся на AutoIt. Как относится моя ситуация и AutoIt? На первый взгляд совершенно никакой. Дело в том, что этот язык может рисовать и GUI, причем с помощью утилиты из комплекта под названием Aut2exe_x64 можно компилировать нативные х64 exe-скрипты. Забавные интерактивные приложения в некоторых случаях действительно полезны. Win PE – специализированная облегченная версия Windows, предназначенная для запуска со съемных носителей. Именно из неё мы и начинаем установку Vista/7. К сожалению, Win PE x64 не способна работать с x86 приложениями. Раз это уже урезанная система (а не текстовый режим как в XP), то и возможностей у нас гораздо больше. После непродолжительного поиска я наткнулся на подтверждение моих догадок: установка запускается процессом winpeshl.exe (есть и ini файл настройки), который вызывается при загрузки Win PE, запускает setup.exe в корне системного диска (для PE имя этого диска всегда X: ). У Setup.exe же есть параметр /unnatend: <путь до файла ответов>. Тут у меня и появилась идея! Идея в том, чтобы перехватить запуск setup.exe и вывести свою программку с необходимым мне внешним видом и настройками. Так же мы можем запускать наши любые х64 программы в среде Win PE (в разумных пределах — очень урезанная ОС). Сразу оговорюсь, приведенный исходники покажутся некоторым очень неопрятными, непрофессиональными или не оптимизированными – так и есть. Я хочу показать лишь идею. Далекий я от профессионального программирования и скриптинга. Первый шаг: Необходимо «нарисовать наше меню для установки», задать опции и скомпилировать скрипт в exe-файл. Напоминаю: компилировать нужно в х64 бит варианте. Исходники программы-меню + изображения для Win PE на AutoIt3. Для образа с двумя редакциями: Home Premium, Professional #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; main form ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opt("GUIOnEventMode", 1) $Form1 = GUICreate("Установка", 232, 400) GUISetBkColor(0xFFFFFF) GUICtrlCreatePic(@ScriptDir & "\Images\bek6.bmp", 0, 0, 232, 400) GUICtrlSetState(-1, $GUI_DISABLE) $Form1context = GUICtrlCreateContextMenu() $MenuItem1 = GUICtrlCreateMenuItem("О программе", $Form1context) GUICtrlSetOnEvent(-1, "MenuItem1Click") $Group1 = GUICtrlCreateGroup("", 8, 179, 217, 9) GUICtrlCreateGroup("", -99, -99, 1, 1) $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 48, 180, 36) GUICtrlSetOnEvent(-1, "Pic1Click") $Pic2 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 100, 180, 36) GUICtrlSetOnEvent(-1, "Pic2Click") $Pic3 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 197, 180, 36) GUICtrlSetOnEvent(-1, "Pic3Click") $Pic4 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 244, 180, 36) GUICtrlSetOnEvent(-1, "Pic4Click") $Pic5 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 291, 180, 36) GUICtrlSetOnEvent(-1, "RecClick") $Pic6 = GUICtrlCreatePic(@ScriptDir & "\Images\button.bmp", 24, 338, 180, 36) GUICtrlSetOnEvent(-1, "CMDClick") $Label1 = GUICtrlCreateLabel("Выберите действие:", 10, 14, 220, 24,$SS_CENTER) GUICtrlSetFont(-1, 14, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0xC0C0C0) GUICtrlCreateLabel('Обычная установка' ,48, 56, 140, 18, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetcolor(-1, 0xFFFFFF) GUICtrlCreateLabel('Автоматическая установка' ,33, 108, 170, 18, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetcolor(-1, 0xFFFFFF) GUICtrlCreateLabel('Far Manager' ,48, 205, 140, 18, $SS_CENTER) GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetcolor(-1, 0xFFFFFF) GUICtrlCreateLabel('Start GimageX ' ,48, 253, 140, 18, $SS_CENTER) GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetcolor(-1, 0xFFFFFF) GUICtrlCreateLabel("Восстановление", 41, 300, 140, 24,$SS_CENTER) GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlCreateLabel("Командная строка", 41, 346, 140, 24,$SS_CENTER) GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma') GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0xFFFFFF) GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; About ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Form2 = GUICreate("О программе", 408, 248, 619, 147) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") GUISetBkColor(0xFFFFFF) GUICtrlCreatePic(@ScriptDir & '\images\bek6.bmp', 0, 0, 408, 248) GUICtrlSetState(-1, $GUI_DISABLE) $GroupBox1 = GUICtrlCreateGroup("", 16, 16, 377, 185) $Image1 = GUICtrlCreatePic(@ScriptDir & "\images\cat.jpg", 24, 32, 105, 97) $Label1 = GUICtrlCreateLabel("Продукт: Оболочка для установки Win 7 x64", 136, 32, 250, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0xFFFFFF) $Label2 = GUICtrlCreateLabel("Версия: 1.5.0", 136, 56, 79, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 8, 800, 0, "Tahoma") GUICtrlSetColor(-1, 0xFFFFFF) $Label3 = GUICtrlCreateLabel("Автор: DarkHunter", 24, 144, 160, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 8, 800, 0, "Tahoma") GUICtrlSetColor(-1, 0xFFFFFF) $Label5 = GUICtrlCreateLabel(" test field", 20, 168, 220, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 8, 800, 0, "Tahoma") GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button1 = GUICtrlCreateButton("&OK", 172, 208, 75, 25, 0) GUICtrlSetOnEvent(-1, "Button1Click") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Automate menu ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Form3 = GUICreate("Установка", 232, 187, 192, 139) GUISetBkColor(0xFFFFFF) GUICtrlCreatePic(@ScriptDir & '\images\bek6.bmp', 0, 0, 408, 248) GUICtrlSetState(-1, $GUI_DISABLE) GUISetOnEvent($GUI_EVENT_CLOSE, "Form3Close") $Pic5 = GUICtrlCreatePic(@ScriptDir & "\images\button.bmp", 24, 32, 188, 36) GUICtrlSetOnEvent(-1, "Pic5Click") $Pic6 = GUICtrlCreatePic(@ScriptDir & "\images\button.bmp", 24, 98, 188, 36) GUICtrlSetOnEvent(-1, "Pic6Click") GUICtrlCreateLabel("Автоматическая Win 7 x64 Pro", 33, 42, 180, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 8, 800, 0, "Tahoma") GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlCreateLabel("Автоматическая Win 7 x64 HP", 33, 112, 180, 17) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 8, 800, 0, "Tahoma") GUICtrlSetColor(-1, 0xFFFFFF) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GUISetState(@SW_SHOW, $Form1) While 1 Sleep(100) WEnd Func Button1Click() GUISetState(@SW_HIDE, $Form2) EndFunc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Func MenuItem1Click() GUISetState(@SW_SHOW, $Form2) EndFunc Func Pic1Click() Sleep(150) RunWait(@HomeDrive & "\Setup.exe /unattend:" & @ScriptDir & "\scripts\Default.xml") EndFunc Func Pic2Click() Sleep(150) GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form3) EndFunc Func Pic3Click() Sleep(150) Run(@ProgramFilesDir & "\Far\Far.exe") EndFunc Func Pic4Click() Sleep(150) Run(@ProgramFilesDir & "\GimageX\gimagex.exe") EndFunc Func Form1Close() Exit EndFunc Func Form2Close() Exit EndFunc Func Form3Close() Exit EndFunc Func Pic5Click() Sleep(150) GUISetState(@SW_HIDE, $Form3) RunWait(@HomeDrive & "\Setup.exe /unattend:" & @ScriptDir & "\scripts\pro.xml") EndFunc Func Pic6Click() Sleep(150) GUISetState(@SW_HIDE, $Form3) RunWait(@HomeDrive & "\Setup.exe /unattend:" & @ScriptDir & "\scripts\HP.xml") EndFunc func RecClick() sleep(150) RunWait(@HomeDrive & "\sources\recovery\RecEnv.exe") EndFunc Func CMDClick() sleep(150) Run(@HomeDrive & "\Windows\System32\Cmd.exe", @HomeDrive & "\Windows\System32\") EndFunc Второй шаг: Для второго шага нам понадобится: 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 В папке \Sources\ у нас будет папка с нашим «загрузчиком». Мой пример: Где \Images\ папка с ресурсами оформления загрузчика; \scripts\ — папка с файлами ответов для каждой редакции Windows* Loader.exe — сам скрипт В папке \Program Files\ необходимые нам программы (мы же не забыли добавить их в наш скрипт?), которые мы хотим запускать из установочного диска (обязательно натив х64) В папке \Windows\ находится такая структура: Где в winpeshl.ini находится путь до нашего Loader.exe. Пример содержимого winpeshl.ini: Третий шаг: Теперь полученную структуру папок мы копируем в \MountTemp и соглашаемся на слияние. Все. С Win PE можно покончить. Выполняем в консоли: Четвертый шаг: Теперь создаем iso образ и записываем его на диск/USB привычным вам методом. Итог: ![]() ![]() ![]() ![]() * Благодаря /unnatend: ключу Setup.exe можно задавать для различных редакций множественный варианты файлов ответов. В похождениях были изучены справочные материалы команды DISM и сайта OS Zone Спасибо Boa Soft за идею! Спасибо за внимание! |
|
Отправлено: 23:27, 30-10-2011 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - Установка Windows 7 x32 Ultimate на раздел с Windows 7 x64 Home Premium | Кузьмич111 | Microsoft Windows 7 | 8 | 21-03-2011 12:25 | |
2008 R2 - Установка Windows Server 2008 R2 x64 | elektron05 | Windows Server 2008/2008 R2 | 0 | 27-02-2010 13:34 | |
Интернет - [решено] Почему не могу найти в Windows 7 X64 Microsoft Outlook Express? | Baw17 | Microsoft Windows 7 | 4 | 07-10-2009 13:43 | |
Установка драйвера принтера на Windows x64 | dim_alf | Microsoft Windows NT/2000/2003 | 2 | 12-09-2008 11:00 | |
Установка - Удаленная установка принтеров в Windows XP x64 | nikrich | Microsoft Windows 2000/XP | 0 | 11-10-2007 07:45 |
|