Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista » 7 / 2008 R2 - Многовариантная установка Microsoft Windows 7 x64

Ответить
Настройки темы
7 / 2008 R2 - Многовариантная установка Microsoft Windows 7 x64

Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: DarkHunter
Дата: 30-10-2011
Описание: дополнение к посту
Вложения
Тип файла: 7z AutoIt3LoaderWin7Code.7z
(77.7 Kb, 40 просмотров)
К сожалению, на 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
Теперь необходимо сформировать где-нибудь такую структуру папок:
Код: Выделить весь код
<Ваш путь>\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
Спасибо Boa Soft за идею!
Спасибо за внимание!
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:27, 30-10-2011

 


Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista » 7 / 2008 R2 - Многовариантная установка Microsoft Windows 7 x64

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - Установка 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




 
Переход