Adler
- Стаж: 9 лет 1 месяц
- Сообщений: 1212
- Репутация: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 раз(а)
|
vovan1982
- Стаж: 9 лет 9 месяцев
- Сообщений: 1129
- Репутация:76[+] [-]
- Откуда: Ростов-на-Дону
|
лучше закрыть окно менеджера сразу после запуска установки? На сколько я понимаю, то если сделать так, то произойдет перезагрузка т.к. Shell.exe работает как оболочка. Но точно могут сказать Conty9 или Joker-2013
|
vovan1982
- Стаж: 9 лет 9 месяцев
- Сообщений: 1129
- Репутация:76[+] [-]
- Откуда: Ростов-на-Дону
|
Adler, есть предложение переписать код на С++, чтобы NetFramework был не нужен. Справитесь?
|
Adler
- Стаж: 9 лет 1 месяц
- Сообщений: 1212
- Репутация:65[+] [-]
- Откуда: Луганск
|
25097лучше закрыть окно менеджера сразу после запуска установки? На сколько я понимаю, то если сделать так, то произойдет перезагрузка т.к. Shell.exe работает как оболочка. Но точно могут сказать Conty9 или Jocker-2013 Надо будет как нибудь проверить... В программировании я вообще не силен. С++ для меня темный лес с привидениями, C# то же, но только без привидений и чуточку светлее Я пытался учить в свое время программирование начиная с программируемого калькулятора Электроника МК-61 (в крестики-нолики играл, это я вам скажу, не в дум бегать ) и ZX Basic (кто знает или помнит, что это вообще такое? ), QBasic, VB, Delphi, PHP и ни один так и не выучил. Либо не хватило целеустремленности, либо это просто не мое, хотя поверхностный интерес к программированию остался. На самом деле программа элементарно простая и написана с минимальными знаниями основы языка. Уверен, что при более глубоких знаниях языка её можно было написать значительно короче (в плане объема кода) и оптимизированее (сам знаю несколько мест, которые в теории можно было бы реализовать иначе). Думаю, тем кто имеет знания С++ чуть более необходимых для написания "Hello world!" легко может написать что то подобное... Написал я её по сути для себя и чисто из любопытства в познавательных целях и если она кому то пригодиться, то буду рад, а если нет, то и хрен с ней :)
|
vovan1982
- Стаж: 9 лет 9 месяцев
- Сообщений: 1129
- Репутация:76[+] [-]
- Откуда: Ростов-на-Дону
|
Adler, а исходниками поделитесь, попробую переложить ее на С++ или Delphi, чтобы обходиться без NetFX.
|
SmokieBlahBlah
- Стаж: 9 лет 1 месяц
- Сообщений: 44
- Репутация:2[+] [-]
|
То же самое на AutoIt было бы проще сделать мне кажется И тестить\исправлять ошибки в программе можно прямо в PE вот пример:
|
SmokieBlahBlah
- Стаж: 9 лет 1 месяц
- Сообщений: 44
- Репутация:2[+] [-]
|
25093Как, например, запущенный X:\Setup.exe без параметров находит папку \Source на диске? по файлу sources\setup.exe, расположенному на установочном диске причем версия файла должна быть та же, что и в X:\sources\setup.exe (по сути не та же версия, а прям этот же файл)
|
Adler
- Стаж: 9 лет 1 месяц
- Сообщений: 1212
- Репутация:65[+] [-]
- Откуда: Луганск
|
SmokieBlahBlah, та я же не спорю.. На PEcmd тоже вероятно было бы легко сделать. Или на C++, Delphi или еще чем нибудь другом было бы удобнее (не нужен никакой .Net). Я во первых это сделал для себя, а во вторых на том, что хоть немного знаю (AutoIt, PEcmd, С++, Delphi и др. я не знаю )...
|
SmokieBlahBlah
- Стаж: 9 лет 1 месяц
- Сообщений: 44
- Репутация:2[+] [-]
|
в итоге-то выложили для всех. и к сожалению прога требует .NET Framework, без которого можно было легко обойтись
|
Adler
- Стаж: 9 лет 1 месяц
- Сообщений: 1212
- Репутация:65[+] [-]
- Откуда: Луганск
|
25109по файлу sources\setup.exe, расположенному на установочном диске Но в этом и вопрос. Я за setup.exe в качестве примера привел, при том не совсем удачном. До <какой то диск>:\sources\setup.exe она путем перебора всех дисков добирается или можно как то из boot.wim определить (программно) с какого диска он загружен? Если утрировать, то мне надо из моей программы на boot.wim определить диск с которого он был загружен при том не путем перебора дисков с поиском boot.wim (или какого то другого файла "ключа") по какому то конкретному пути (к примеру, *:\_win\qwerty\boot.wim), а так что бы boot.wim мог находиться в любой папке или корне диска. Вот у меня и вопрос, возможно ли это в принципе и если да, то как?25111в итоге-то выложили для всех. и к сожалению прога требует .NET Framework, без которого можно было легко обойтись SmokieBlahBlah, я вас что, ей пользоваться заставляю? В пятом посте же написаноНаписал я её по сути для себя и чисто из любопытства в познавательных целях и если она кому то пригодиться, то буду рад, а если нет, то и хрен с ней :)
|
SmokieBlahBlah
- Стаж: 9 лет 1 месяц
- Сообщений: 44
- Репутация:2[+] [-]
|
25113можно как то из boot.wim определить (программно) с какого диска он загружен? нет
|
Sergey.del
- Стаж: 10 лет
- Сообщений: 77
- Репутация:4[+] [-]
- Откуда: Новороссийск, Россия
|
Всем Было бы неплохо взглянуть на исходники и переписать (а то и подправить ) либо на Delphi, либо на AutoIt. Хотя, вариант с Delphi мне больше по душе (гибкости поболе будет ). Adler, Видите, какую Вы нужную прогу сваяли - страсти так и кипят
|
Отправлено: 06-Июн-2016 17:07
(спустя 1 час 11 минут)
Adler
- Стаж: 9 лет 1 месяц
- Сообщений: 1212
- Репутация:65[+] [-]
- Откуда: Луганск
|
Sergey.del, только вот мне не понятно, почему нет таких/аналогичных 100500 штук. Такое никому не надо или ... Даже не знаю, что после или... Алгоритм же примитивный - перебрать в цикле диски параллельно производя поиск нужных файлов по заведомо заданному пути из файла конфига, как то это систематизировать (у меня тупо в многомерный массив забивается), потом в зависимости от содержимого массива (есть ли в запись в определенной ячейке или нет) соответственно активировать/деактивировать компонент на форме. И в итоге небольшая функция которая запустит соответствующий setup.exe с соответствующими параметрами взятыми из ранее полученного массива. Я реально больше времени на написание кода потратил на малознакомом мне языке, чем на составление алгоритма, постоянно загугливая какие то банальные вещи, типа "возврат многомерного массива функцией на C#" или "как активировать radiobutton на С#. Даже наверное не так кода, т.к. основные функции поиска и запуска установки я быстро написал, а "прикручивание" этих функций к форме и "вылизывания" формы, в плане, что бы активировалось то что надо когда надо и деактивировалось то что не надо... Алгоритм по сути взят из этого скрипта и только слегка расширен. Собственно этот скрипт меня и сподвиг... Там всего то менее 200 строк кода (без учета использования готового .ini парсера в 50 строк, т.к. свой написать у меня ни фантазии ни знаний не хватило) при том, что многие места в теории можно было бы сократить...
Последний раз редактировалось: Adler (2016-06-06 17:13), всего редактировалось 1 раз
|
Sergey.del
- Стаж: 10 лет
- Сообщений: 77
- Репутация:4[+] [-]
- Откуда: Новороссийск, Россия
|
Adler, Спасибо за скрипт, щаз посмотрю...
|
Страница 1 из 5
Текущее время: 21-Ноя 13:15
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|