[Quote]

    Adler
  • 1708
  • Longevity: 4 years 1 month
  • Posts: 983
  • REPUTATION:50

    [+] [-]
  • Location: Луганск
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 на диске? Или путем перебора всех дисков?


Last edited by Adler on 2016-09-26 23:13; edited 9 times in total

[Quote]

    SV-2k10
  • 437
  • Longevity: 4 years 8 months
  • Posts: 269
  • REPUTATION:19

    [+] [-]
Adler, Во … это другое дело … ay


Last edited by SV-2k10 on 2016-06-06 17:01; edited 1 time in total

[Quote]

    vovan1982
  • 214
  • Longevity: 4 years 9 months
  • Posts: 1086
  • REPUTATION:63

    [+] [-]
  • Location: Ростов-на-Дону
лучше закрыть окно менеджера сразу после запуска установки?
На сколько я понимаю, то если сделать так, то произойдет перезагрузка т.к. Shell.exe работает как оболочка. Но точно могут сказать Conty9 или Joker-2013

[Quote]

    vovan1982
  • 214
  • Longevity: 4 years 9 months
  • Posts: 1086
  • REPUTATION:63

    [+] [-]
  • Location: Ростов-на-Дону
Adler, есть предложение переписать код на С++, чтобы NetFramework был не нужен. Справитесь?

[Quote]

    Adler
  • 1708
  • Longevity: 4 years 1 month
  • Posts: 983
  • REPUTATION:50

    [+] [-]
  • Location: Луганск
25097
лучше закрыть окно менеджера сразу после запуска установки?
На сколько я понимаю, то если сделать так, то произойдет перезагрузка т.к. Shell.exe работает как оболочка. Но точно могут сказать Conty9 или Jocker-2013
Надо будет как нибудь проверить...
В программировании я вообще не силен. С++ для меня темный лес с привидениями, C# то же, но только без привидений и чуточку светлее bm
Я пытался учить в свое время программирование начиная с программируемого калькулятора Электроника МК-61 (в крестики-нолики играл, это я вам скажу, не в дум бегать by ) и ZX Basic (кто знает или помнит, что это вообще такое? ab ), QBasic, VB, Delphi, PHP и ни один так и не выучил. Либо не хватило целеустремленности, либо это просто не мое, хотя поверхностный интерес к программированию остался.
На самом деле программа элементарно простая и написана с минимальными знаниями основы языка. Уверен, что при более глубоких знаниях языка её можно было написать значительно короче (в плане объема кода) и оптимизированее (сам знаю несколько мест, которые в теории можно было бы реализовать иначе).
Думаю, тем кто имеет знания С++ чуть более необходимых для написания "Hello world!" легко может написать что то подобное...
Написал я её по сути для себя и чисто из любопытства в познавательных целях и если она кому то пригодиться, то буду рад, а если нет, то и хрен с ней :)

[Quote]

    vovan1982
  • 214
  • Longevity: 4 years 9 months
  • Posts: 1086
  • REPUTATION:63

    [+] [-]
  • Location: Ростов-на-Дону
Adler, а исходниками поделитесь, попробую переложить ее на С++ или Delphi, чтобы обходиться без NetFX.

[Quote]

    SmokieBlahBlah
  • 1736
  • Longevity: 4 years 1 month
  • Posts: 32
  • REPUTATION:1

    [+] [-]
То же самое на AutoIt было бы проще сделать мне кажется
И тестить\исправлять ошибки в программе можно прямо в PE
вот пример:

[Quote]

    SmokieBlahBlah
  • 1736
  • Longevity: 4 years 1 month
  • Posts: 32
  • REPUTATION:1

    [+] [-]
25093Как, например, запущенный X:\Setup.exe без параметров находит папку \Source на диске?
по файлу sources\setup.exe, расположенному на установочном диске
причем версия файла должна быть та же, что и в X:\sources\setup.exe (по сути не та же версия, а прям этот же файл)

[Quote]

    Adler
  • 1708
  • Longevity: 4 years 1 month
  • Posts: 983
  • REPUTATION:50

    [+] [-]
  • Location: Луганск
SmokieBlahBlah, та я же не спорю.. На PEcmd тоже вероятно было бы легко сделать. Или на C++, Delphi или еще чем нибудь другом было бы удобнее (не нужен никакой .Net). Я во первых это сделал для себя, а во вторых на том, что хоть немного знаю (AutoIt, PEcmd, С++, Delphi и др. я не знаю ah )...

[Quote]

    SmokieBlahBlah
  • 1736
  • Longevity: 4 years 1 month
  • Posts: 32
  • REPUTATION:1

    [+] [-]
25110сделал для себя
в итоге-то выложили для всех. и к сожалению прога требует .NET Framework, без которого можно было легко обойтись

[Quote]

    Adler
  • 1708
  • Longevity: 4 years 1 month
  • Posts: 983
  • REPUTATION:50

    [+] [-]
  • Location: Луганск
25109по файлу sources\setup.exe, расположенному на установочном диске
Но в этом и вопрос. Я за setup.exe в качестве примера привел, при том не совсем удачном. До <какой то диск>:\sources\setup.exe она путем перебора всех дисков добирается или можно как то из boot.wim определить (программно) с какого диска он загружен?
Если утрировать, то мне надо из моей программы на boot.wim определить диск с которого он был загружен при том не путем перебора дисков с поиском boot.wim (или какого то другого файла "ключа") по какому то конкретному пути (к примеру, *:\_win\qwerty\boot.wim), а так что бы boot.wim мог находиться в любой папке или корне диска. Вот у меня и вопрос, возможно ли это в принципе и если да, то как?
25111
25110сделал для себя
в итоге-то выложили для всех. и к сожалению прога требует .NET Framework, без которого можно было легко обойтись
SmokieBlahBlah, я вас что, ей пользоваться заставляю? ab
В пятом посте же написано
Написал я её по сути для себя и чисто из любопытства в познавательных целях и если она кому то пригодиться, то буду рад, а если нет, то и хрен с ней :)

[Quote]

    SmokieBlahBlah
  • 1736
  • Longevity: 4 years 1 month
  • Posts: 32
  • REPUTATION:1

    [+] [-]
25113можно как то из boot.wim определить (программно) с какого диска он загружен?
нет

[Quote]

    Sergey.del
  • 7
  • Longevity: 5 years
  • Posts: 44
  • REPUTATION:1

    [+] [-]
  • Location: Новороссийск, Россия
Всем aa
Было бы неплохо взглянуть на исходники и переписать (а то и подправить ah) либо на Delphi, либо на AutoIt.
Хотя, вариант с Delphi мне больше по душе (гибкости поболе будет ab).
Adler, Видите, какую Вы нужную прогу сваяли - страсти так и кипят ab

[Quote]

    Adler
  • 1708
  • Longevity: 4 years 1 month
  • Posts: 983
  • REPUTATION:50

    [+] [-]
  • Location: Луганск
Sergey.del, только вот мне не понятно, почему нет таких/аналогичных 100500 штук. Такое никому не надо или ... Даже не знаю, что после или...
Алгоритм же примитивный - перебрать в цикле диски параллельно производя поиск нужных файлов по заведомо заданному пути из файла конфига, как то это систематизировать (у меня тупо в многомерный массив забивается), потом в зависимости от содержимого массива (есть ли в запись в определенной ячейке или нет) соответственно активировать/деактивировать компонент на форме. И в итоге небольшая функция которая запустит соответствующий setup.exe с соответствующими параметрами взятыми из ранее полученного массива.
Я реально больше времени на написание кода потратил на малознакомом мне языке, чем на составление алгоритма, постоянно загугливая какие то банальные вещи, типа "возврат многомерного массива функцией на C#" или "как активировать radiobutton на С#. Даже наверное не так кода, т.к. основные функции поиска и запуска установки я быстро написал, а "прикручивание" этих функций к форме и "вылизывания" формы, в плане, что бы активировалось то что надо когда надо и деактивировалось то что не надо...
Алгоритм по сути взят из этого скрипта и только слегка расширен. Собственно этот скрипт меня и сподвиг...
Там всего то менее 200 строк кода (без учета использования готового .ini парсера в 50 строк, т.к. свой написать у меня ни фантазии ни знаний не хватило) при том, что многие места в теории можно было бы сократить...


Last edited by Adler on 2016-06-06 17:13; edited 1 time in total

[Quote]

    Sergey.del
  • 7
  • Longevity: 5 years
  • Posts: 44
  • REPUTATION:1

    [+] [-]
  • Location: Новороссийск, Россия
Adler, Спасибо за скрипт, щаз посмотрю... ab

Page 1 of 5


Display posts:    

Current time is: 12-Nov 09:55

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum