[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
UWI_Shell - менеджер установки различных версий Windows для интеграции в Boot.wim

Принцип работы:
При запуске (из winpeshl.ini или другого скрипта) происходит поиск файлов install.wim(.esd/.swm) по всем логическим дискам, имеющим назначенную букву диска, согласно файла конфигурации UWIS.cfg (описан ниже), где задается корневая папка и папки для каждой конкретной редакции. При нахождении такого файла (install.wim/esd/swm) ищется рядом папка OEM либо $OEM$ и файл unattend.xml либо _unattend.xml. В зависимости от найденных версий в программе становятся активными только те пункты, для которых был найден install.wim/.esd/.swm.
Фактически возможна установка из 9 источников - 3 редакции Windows (7/8.1/10) и 3 варианта (AIO/x32/x64) каждой редакции, которые можно держать на флешке/диске одновременно.
При наличии setup.exe в папке с install.wim/.esd/.swm запускается он, в противном - X:\setup.exe
Особенности: т.к. менеджер написан с использованием .Net Framework на C#, то для работы менеджера необходим интегрированный в BOOT.WIM - WinPE-NetFx.cab
По умолчанию, в стандартном boot.wim он отсутствует. В случае использования своего BOOT.WIM, WinPE-NetFx туда необходимо интегрировать с помощью Assessment and Deployment Kit.
Готовый BOOT.WIM можно взять из ссылки ниже. Отдельно выложены оригинальные "чистые" BOOT.WIM (от Windows 10 - 10.0.10586) 2х разрядностей с интегрированным WinPE-NetFx и BOOT.WIM с интегрированным в них NetFx и UWI_Shell.
Установка и настройка:
Скопировать SHELL.exe в BOOT.wim (по идее не важно, в корень или какую то папку) прописав в winpeshl.ini путь к файлу.
Файл конфигурации разместить в \windows\system32, в случае если SHELL.exe запускается через winpeshl.ini. Если SHELL.exe запускается с какого то промежуточного скрипка, то файл конфигурации должен лежать в той папке, откуда вызывается запуск SHELL.exe. (я сперва себе долго голову ломал вопросом, почему в рабочей ОС все нормально работает, а после интеграции в boot.wim нет, пока не выяснил что та функция, которая должна возвращать путь к запущенному файлу (ну я так думал, что она его должна возвращать) на самом деле возвращает путь, откуда был вызван запуск)
Отредактировать под свои папки...
Файл конфигурации UWIS.cfg имеет следующий вид:
<тут должна быть пустая строка>
[MAIN]
rootdir=_win
cfg=
[W7]
W7AIO=w7_aio
W7x32=w7_x32
W7x64=w7_x64
[W8]
W8AIO=w8_aio
W8x32=w8_x32
W8x64=w8_x64
[W10]
W10AIO=w10_aio
W10x32=w10_x32
W10x64=w10_x64
Особенность - в файле первая строка (перед [MAIN]) должна быть пустая (точнее содержать перенос строки(enter)). Это особенность корявого .ini парсера...
Параметр root - папка в корне диска, по которой происходит поиск папок версий.
По идее параметр может содержать более "глубокое" сложение, к примеру _mywindows\win, но работоспособность такого варианта не проверялась. Это же касается и пути к папкам версий.
P.S. Параметр cfg пока не используется, можно удалить...
В разделах [W7][W8][W10] указываются названия папок, вложенных в папку заданную параметром root, в которых происходит поиск файлов install.wim/.esd.swm. Т.е. при данном файле конфигурации поиск происходит в папках (буква диска):\_win\w7_aio (буква диска):\_win\w7_x32 и т.д.
Программа после загрузки запускается с некоторой задержкой. Это какая то особенность (читать - "тормознутость") .Net. При работе программы так же возможны мелкие подтормаживании т.к. при каждом переключении радио-кнопки происходит перепроверка наличия файлов install.wim/.esd./.swm, такова особенность алгоритма...
Программа тестовая, работоспособность проверялась только поверхностно. Буду благодарен за тестирование, отзывы и предложения...
Пока что в программе отсутствует проверка на наличие файла концигурации. Если файл не находится программа запускается со всеми неактивными пунктами. Допишу позже, т.к. есть еще одна задумка относительно файла конфигураци, но пока руки и голова до этого не дошли...
Программу, а так же готовые boot.wim можно скачать тут - https://yadi.sk/d/VhvlT-gCsH7k4
Небольшое демо-видео - https://www.youtube.com/watch?v=2X8JWVI8Qac (На 0:40 отработала тестовая заглушка setup.exe из папки где лежит install.wim)
07.06.2016 - Перезалил boot_64.wim с интегрированной оболочкой и залил отдельно 64 битную версию Shell.exe (в соответствующем архиве).
11.06.2016 - Исправил косяк с не помещающейся надписью "Перезагруз" (перезалил архивы). Заменил образы с оболочкой с оригинальных на собранные в ADK, работоспособность которых была проверена на реальном железе.
P.S. Вопрос к "знатокам". При запуске установки (нажатия кнопки "Установить") запускается setup.exe, но сама программа остается запущенной и в случае отмены установки (закрытии окна установки) возвращается окно менеджера. Надо ли так делать или лучше закрыть окно менеджера сразу после запуска установки?
И еще вопрос, можно ли с загруженного boot.wim как то определить, с какого именно носителя он загружен? Как, например, запущенный X:\Setup.exe без параметров находит папку \Source на диске? Или путем перебора всех дисков?


Последний раз редактировалось: Adler (2016-09-26 23:13), всего редактировалось 9 раз(а)

[Цитировать]

    Sergey.del
  • 7
  • Стаж: 9 лет 4 месяца
  • Сообщений: 60
  • Репутация:4

    [+] [-]
  • Откуда: Новороссийск, Россия
vovan19822, Весьма признателен. az
P.S. Похоже, не тот смайлик выбрал ab
P.P.S. Получил, начну (начал) изучать.
Для начала, цвета мне не нравятся совсем - нихрена не видно (ни в коем случае не хочу обидеть автора) ab

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
Sergey.del, ну дык, нихрена не видно же на неактивных пунктах (я даже с их цветом не заморачивался), а на активных бледно-желтый на темно-синем фоне по идее должно быть хорошо видно. Цвет фона подобрал под дефолтный бекграунд (который у WinPE от 10), что бы не видно было границ окна. Или о каком вы цвете?


Последний раз редактировалось: Adler (2016-06-07 18:33), всего редактировалось 1 раз

[Цитировать]

    Sergey.del
  • 7
  • Стаж: 9 лет 4 месяца
  • Сообщений: 60
  • Репутация:4

    [+] [-]
  • Откуда: Новороссийск, Россия
Adler, А не(пишется вместе)активные пункты читаются весьма плохо. Я ничего не имею против
выбора цвета автором, но я, с моим зрением ( ah) нихрена не вижу (ни в коем случае не обиду автору).

[Цитировать]

    nik63
  • 1479
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 497
  • Репутация:19

    [+] [-]
  • Откуда: Башкирия г.Салават
Ребята подскажите пожалуйста как это работает?
Как устанавливать Windwos этой прогой?

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
nik63, эта прога не устанавливает виндовс, а только помогает выбрать, что установить...
Я правда не спец в написании мануала, но в первом посте вроде написано, почитайте. Если что то конкретно не понятно, спрашивайте.
Если кратко, то скачать нужный BOOT_(битность).wim, положить куда нибудь на флешке, прописать к нему в BCD путь. Раскидать свои install.wim/.esd./.swm и OEM с unattend.xml, если есть, по соответствующим папкам (w7_aio, w7_x32 и т.д.) в папке _WIN (которая в корне флешки должна быть), загрузиться и ставить винду az
...
Как устанавливать Windwos этой прогой?
Забудьте все, что я написал выше, Windwos она устанавливать к сожалению не умеет ah


Последний раз редактировалось: Adler (2016-06-07 20:08), всего редактировалось 2 раз(а)

[Цитировать]

    nik63
  • 1479
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 497
  • Репутация:19

    [+] [-]
  • Откуда: Башкирия г.Салават
Adler, Спасибо за быстрый ответ! ay

[Цитировать]

    KopBuH91
  • 102
  • Стаж: 9 лет 3 месяца
  • Сообщений: 382
  • Репутация:55

    [+] [-]
  • Откуда: Ташкент
25117
25113можно как то из boot.wim определить (программно) с какого диска он загружен?
нет
SmokieBlahBlah, boot.wim - это всего лишь WinPE
гляньте, HKLM\SYSTEM\CurrentControlSet\Control, значение PEBootRamdiskSourceDrive
по идее, в нём должно содержаться значение диска с которого загружен WinPE
в своей сборке я так идентифицирую его, скриптом:
SET PEBootRamdiskSourceDrive=
FOR /F "tokens=1-3 delims== " %%a in ('reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control" /v "PEBootRamdiskSourceDrive" 2^>nul') do (if %%a.==PEBootRamdiskSourceDrive. @set SourceDrive=%%~dc)
P.S.: может пригодится кому:

Определение параметров загрузки в WinPE (с помощью сценария командной строки) (можно в startnet.cmd)

:: Определение устройства загрузки (диск/сеть)
FOR /F "tokens=3* delims=( " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEBootType') DO SET PEBootType=%%i
IF "%PEBootType%" == "Ramdisk:SourceIdentified" SET WINPEDEVICE=DISK
IF "%PEBootType%" == "Ramdisk:SourceUnidentified" SET WINPEDEVICE=WINRE
IF "%PEBootType%" == "Ramdisk:OpticalDrive" SET WINPEDEVICE=OPTICAL
IF "%PEBootType%" == "Remote" SET WINPEDEVICE=REMOTE
:: Определение типа загрузки (BIOS/UEFI/PXE)
IF "%PEBootType%" == "Ramdisk:SourceIdentified" (FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET PEFirmwareType=%%i)
IF "%PEBootType%" == "Ramdisk:SourceUnidentified" (FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET PEFirmwareType=%%i)
IF "%PEBootType%" == "Ramdisk:OpticalDrive" (FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET PEFirmwareType=%%i)
IF "%PEFirmwareType%" == "0x2" SET WINPEMODE=UEFI
IF "%PEFirmwareType%" == "0x1" SET WINPEMODE=BIOS
IF "%PEBootType%" == "Remote" SET WINPEMODE=PXE
:: Определение IP адреса PXE сервера, с которого был загружен boot.wim (если загрузчик bootmgr от Microsoft)
IF "%PEBootType%" == "Remote" (FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEBootServerAddr') DO SET PXEServerIP=%%i)
IF "%PEBootType%" == "Remote" (FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\System\CurrentControlSet\Control /v PEBootServerName') DO SET PXEServer=%%i)
:: Определение производителя и модели материнской платы
FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\HARDWARE\DESCRIPTION\System\BIOS /v BaseBoardManufacturer') DO (SET BaseBoardManufacturer=%%i)
FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\HARDWARE\DESCRIPTION\System\BIOS /v BaseBoardProduct') DO (SET BaseBoardProduct=%%i)
FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation /v SystemManufacturer') DO (SET SystemManufacturer=%%i)
FOR /F "tokens=3* delims= " %%i in ('reg query HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation /v SystemProductName') DO (SET SystemProductName=%%i %%j)
:: Запись значений производителя и модели материнской платы в окно свойств системы
REG add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /t REG_SZ /v Manufacturer /d "%SystemManufacturer% (%BaseBoardManufacturer%)" /f
REG add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /t REG_SZ /v Model /d "%BaseBoardProduct% / %SystemProductName% (%WINPEARCH% bit / %WINPEMODE%)" /f
:: Поиск загрузочного носителя (папку-маркер "AdminPE" заменить на свою)
SET PEBootRamdiskSourceDrive=
FOR %%d IN (C D E F G H I J K L M N O P Q R S T U V W Y X Z) DO IF EXIST %%d:\AdminPE SET SourceDrive=%%d:
FOR /F "tokens=1-3 delims== " %%a in ('reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control" /v "PEBootRamdiskSourceDrive" 2^>nul') do (if %%a.==PEBootRamdiskSourceDrive. @set SourceDrive=%%~dc)
IF "%WINPEDEVICE%" == "REMOTE" SET SourceDrive=X:
:: Запись локальных переменных в глобальные переменные среды
SETX SOURCEDRIVE "%SOURCEDRIVE%"
SETX WINPEDEVICE "%WINPEDEVICE%"
SETX WINPEMODE "%WINPEMODE%"
SETX PXESERVER "%PXEServer%"
SETX PXESERVERIP "%PXEServerIP%"
SETX BaseBoardManufacturer "%BaseBoardManufacturer%"
SETX BaseBoardProduct "%BaseBoardProduct%"
SETX SystemManufacturer "%SystemManufacturer%"
SETX SystemProductName "%SystemProductName%"

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
25113мне надо из моей программы на boot.wim определить диск с которого он был загружен при том не путем перебора дисков с поиском boot.wim (или какого то другого файла "ключа") по какому то конкретному пути (к примеру, *:\_win\qwerty\boot.wim), а так что бы boot.wim мог находиться в любой папке или корне диска.
Получить буковку диска прямо нельзя. Но для РАМ-сборки можно получить полный путь из корня диска к запущенному wim-ядру, а уж после этого произвести поиск такого пути по всем дискам и получить буковку (если в системе несколько таких дисков, будет найден первый подвернувшийся). В примере - загружено наитив-ядро С9РЕ по пути \2k10\WinPE\C9NE.IM_
-Этот вариант не требует маркера, но желательно использовать уникальный путь или имя. Поиск бантиком реализован как второй вариант подключения в 78setup (StartNet2.cmd).

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
KopBuH91, conty9, спасибо за информацию. Как нибудь попробую разобраться...

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
KopBuH91, в первой попавшейся под руку WinPE (собранная конструктором Win10PE SE такого ключа реестра почему то нет ac )
Как на скрине у conty9 есть, при том в разных ветках...

[Цитировать]

    KopBuH91
  • 102
  • Стаж: 9 лет 3 месяца
  • Сообщений: 382
  • Репутация:55

    [+] [-]
  • Откуда: Ташкент
Adler, это стандартные параметры реестра, работают как на WinPE4, так и на WinPE5, так на WinPE10.
Во всех моих сборках определение основывается на данном ключе, не знаю почему тут его нет.
Может конструктор что-то обрезал? - вы грузите обычно, не нативно?
И как вы его грузите? - не виртуалка какая нибудь?
Загружайте на РЕАЛЬНОЙ машине, не через FiraDisk и тому подобные вещи, а через BootMgr и BCD, как обычно
P.S.: попробуйте загрузить стандартную среду WinPE, и там поищите. Вы ведь для неё свою программу пишите.
P.P.S.: параметр PEBootType равен Ramdisk:OpticalDrive, что наводит на мысль что вы грузите через виртуалку или FiraDisk, или что-то подобное, что нарушает связку BootMgr>BCD>Boot.wim, почему и не видно буквы носителя

Пример правильной загрузки при цепочке USB/CD/DVD>BootMgr>BCD>boot.wim:

При правильной загрузке значение PEBootType будет Ramdisk:SourceIdentified,
что значит "источник идентифицирован", а значение PEBootRamdiskSourceDrive будет содержать букву диска с которого загружен boot.wim (USB/CD/DVD)
P.P.P.S.: Маркер папка-файл вообще нужен только когда источник по каким-то причинам не идентифицирован.

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
KopBuH91, да, я грузился на виртуалке (VirtualBox) с ISO, но связка то BootMgr>BCD>Boot.wim по идее не должна потеряться?
Точно так же проверил на WinPE от Стрельца. При загрузке из образа этого параметра реестра нет, а если загрузиться с того же WinPE но предварительно закатанного на USB флешку (через Virtual Machine USB Boot), то параметр реестра появляется... Т.е. получается, что при загрузке с CD диска это не работает?

[Цитировать]

    KopBuH91
  • 102
  • Стаж: 9 лет 3 месяца
  • Сообщений: 382
  • Репутация:55

    [+] [-]
  • Откуда: Ташкент
Adler, всё работает. если вы грузитесь НЕ ИЗ ОБРАЗА, а из РЕАЛЬНОГО носителя.
Именно его WinPE и определяет, а выше указанный параметр будет содержать его (носителя) текущую букву после загрузки в WinPE

[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 5 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
KopBuH91, ясно, но нет ни диска ни привода, что бы проверить ab Спасибо за ликбез.

[Цитировать]

    KopBuH91
  • 102
  • Стаж: 9 лет 3 месяца
  • Сообщений: 382
  • Репутация:55

    [+] [-]
  • Откуда: Ташкент
Adler, флешка пойдет. Способ рабочий, я сам его использую, работает на USB/CD/DVD (реальный носитель)
ИМХО, всегда надо тестировать на реальном железе.
Ведь люди будут не на виртуалках гонять ваши проги, а на реальном железе :)

Страница 3 из 5


Показать сообщения:    

Текущее время: 28-Мар 22:15

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы