                     __          _______           _
                     \ \        / /_   _|         | |
                      \ \  /\  / /  | |  _ __  ___| |_
                       \ \/  \/ /   | | | '_ \/ __| __|
                        \  /\  /   _| |_| | | \__ \ |_
                         \/  \/   |_____|_| |_|___/\__|

                           *** Windows Installer ***

0. Назначение
   ----------
   Установка Windows 7-10 через:
   - автоматизацию запуска стандартной программы установки Windows setup.exe с ключами
     командной строки. Для установки новых редакций Windows 10 применяется метод
     подмены стандартной библиотеки winsetup.dll
   - развёртывание Windows на жёсткий диск (как с возможностью его разметки, так и на
     уже подготовленный) или в контейнер VHD с помощью программы wimlib-imagex.exe и
     последующим добавлением в список загрузки.

1. Терминология
   ------------
                            Папка дистрибутива (ПД)
                            ~~~~~~~~~~~~~~~~~~~~~~~
   Папка, в которой содержатся:
   - установочный файл с расширением WIM, ESD, SWM. Обычно это "install.esd"
   - файл описания (необязательно) {формат файла описания см. в "Примечания"}
   - папка $OEM$ (необязательно)
   - файл ответов unattend.xml (необязательно)
   - установочный комплект setup.exe (необязательно)

   Допускается наличие в ПД множественных установочных файлов с файлами описаниями.

                               Общая папка (ОП)
                               ~~~~~~~~~~~~~~~~
   Папка, в которой содержатся:
   - папки дистрибутивов
   - папка $OEM$ (необязательно)
   - файл(-ы) ответов unattend.xml (<любое_имя>.xml)

2. Концепция
   ---------
   Возможны три варианта расположения ПД:

                                 Классический
                                 ~~~~~~~~~~~~
   ОП находится в произвольном месте флешки. Например:

   F:\
      ОП\
         ПД\
         ПД\
         ПД\
         ...

                                  Портативный
                                  ~~~~~~~~~~~
   ОП называется "WInstall" и находится в папке с установочным скриптом WInst
"WInst.cmd". Например:

   F:\
      Folder\
             WInst\
                   WInstall\
                            ПД\
                            ПД\
                            ПД\
                            ...
                   WInst.cmd


                                 Произвольный
                                 ~~~~~~~~~~~~
   Папка ОП отсутствует, ПД располагаются в любом месте флешки. Например:

   F:\
      Folder\
             ПД
      Folder1\
              Folder2\
                      ПД
                      ПД
                      Folder3\
                              ПД


3. Выполнение
   ----------
                              Поиск и отображение
                              ~~~~~~~~~~~~~~~~~~~
   Сначала выполняется поиск ПД, расположенных в варианте "классический".
Для указания расположения ОП служит файл dirlist.txt
Например, у нас есть флешка с такой структурой папок:

   F:\
      Install\
              Windows\
                      Win7x86\
                      Win81x64\
                      Win10x64\

   В данном примере ОП - это F:\Install\Windows\
   Отбрасываем букву диска с двоеточием и завершающий слэш, получаем "\Install\Windows"
   Именно это и записываем в файл dirlist.txt:

   \Install\Windows

   Если ОП больше одной, то добавляем в dirlist.txt соответствующие строки.

   Допускается указание в dirlist.txt непосредственно ПД (это целесообразно, если ПД
содержит множественные установочные файлы). Если брать структуру папок из примера выше,
то записываем в dirlist.txt:

   \Install\Windows\Win7x86\@
   \Install\Windows\Win81x64\@
   \Install\Windows\Win10x64\@

   Далее выполняется поиск ПД, расположенных в варианте "портативный" (папка WInstall).

   Если поиск в вариантах "классический" и "портативный" не дал результатов, и в папке
программы существует файл fudlist.txt (см. ниже), то информация о дистрибутивах берётся
из него.

   Варианты отображения найденных дистрибутивов:
- если для установочного файла существует файл описания, то отображается его содержимое
- если файла описания нет, то берётся информация из первого индекса дистрибутива

                           Дополнительные возможности
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~
   Переключить режим отображения: "версия/путь" - переключить вид с информации из
                                                  первого индекса на полный путь к
                                                  дистрибутиву.
   Выбрать дистрибутив вручную - самостоятельно выбрать файл дистрибутива (файл с
                                 расширением ESD, WIM, SWM).
   Искать дистрибутивы на выбранных дисках - поиск на выбранных дисках файлов с
                                             расширением WIM, ESD, SWM и размером
                                             более 1 000 000 000 байт.
   Предварительная разметка диска - разметить новый (или без сохранения данных)
                                    накопитель с использованием сценариев diskpart.
   Создать/Открыть VHD(X) - создать новый/открыть существующий VHD(X)-файл и
                            присоединить его к системе для последующей установки
                            в него Windows.
   Техническое обслуживание - добавить раздел/VHD-контейнер в загрузчик Windows;
                              интегрировать драйверы/установочные пакеты;
                              удалить/откатить установленные драйверы;
                              восстановить загрузочные записи раздела/диска.

   Поиск используется, в основном, при "произвольном" расположении ПД. Результаты
поиска записываются в файл fudlist.txt и могут быть использованны при последующих
запусках WInst (в отличие от dirlist.txt, содержит полные пути (без диска) к
найденным дистрибутивам). Файл fudlist.txt можно конвертировать в dirlist.txt. Для
этого переименуйте:
  fudlist.txt -> fud2dir.txt (или просто fud2dir) для перезаписи dirlist.txt
  fudlist.txt -> fud4dir.txt (или просто fud4dir) для добавления к dirlist.txt
и запустите WInst.

   Предупреждение установщика о невозможности использовать раздел VHD для установки
Windows нужно игнорировать.

   Опция "Fix boot":
   * MBR/PBR (PBR)         - обновить только загрузочные записи.
   * MBR/PBR + update BCD  - обновить загрузочные записи и BCD.
   * Advanced Boot Options - включить при загрузке меню "Advanced Boot Options".

   - для раздела "WINDOWS" обновляется загрузочная запись раздела;
   - для раздела "BOOTLOADER" обновляется загрузочная запись раздела и MBR диска,
     содержащего раздел "BOOTLOADER";
   - после применения "Advanced Boot Options" в корне раздела "WINDOWS" создаётся
     файл "AdvBootOpt_off.cmd" для отключения опции.

   При интеграции драйверов средствами WInst в папке "\Windows\Temp" целевой системы
создаётся файл "WInst_Add_Drivers.bak", содержащий список драйверов, установленных
до интеграции. Таким образом, откат установленных драйверов - это удаление всех
драйверов, которых нет в данном списке.

                                Опции установки
                                ~~~~~~~~~~~~~~~
   Дистрибутив  - переключение вида "версия/путь"
   Папка $OEM$  - может располагаться в трех местах: ПД, ОП, WInstall. Соответственно,
                  будет отображаться как: $OEM$, ..\$OEM$, _WInst_\$OEM$
                  Если существуют все три варианта, нужный можно выбрать вручную.
   Файл ответов - аналогично папке $OEM$. Будет отображаться как:
                  unattend.xml, ..\unattend.xml, _WInst_\unattend.xml
                  В папках ОП и WInstall может быть несколько файлов с расширением xml,
                  нужный можно выбрать вручную.
   Установщик   - Если в ПД существует setup.exe, то он будет предложен для запуска.
                  Выбрать встроенный setup.exe можно вручную.
                  Если в файле настроек определены переменные "setup_x86.exe" и/или
                  "setup_x64.exe", содержащие путь к setup.exe распакованного комплекта
                  установки, то именно этот комплект будет использован в качестве
                  встроенного установщика.

   Проверка целостности - перед установкой будет запущена проверка установочного файла.
   Перезагрузка         - можно отменить перезагрузку после установки или развёртывания
                          дистрибутива.
   Лицензия EI.cfg      - переключение между Volume/Retail
   Выбор языка          - язык установки берётся из первого индекса дистрибутива или
                          может быть выбран вручную.
   Выбор Winsetup.dll   - по умолчанию "прямой". Если в процессе установки появляется
                          ошибка "Не найдено лицензионное соглашение", то можно сменить
                          на "обратный".


4. Развёртывание
   -------------
   Суть развёртывания состоит в:
   - распаковке файла дистрибутива на раздел жёсткого диска (или в контейнер VHD)
   - добавлении нового пункта в меню загрузки Windows (или создании этого меню)

   Порядок действий:
   1. Выбрать раздел, куда будет распакован дистрибутив;
   2. Выбрать раздел, где находится (или будет создан) загрузчик;
   3. Выбрать тип загрузки.

   Разделы должны иметь файловую систему (нельзя использовать RAW)
   Окно выбора раздела для распаковки дистрибутива содержит в "шапке" [ WINDOWS = ... ]
   - если на разделе уже есть Windows, то будет предложено отформатировать раздел
   Окно выбора раздела для установки загрузчика содержит в "шапке" [ BOOTLOADER = ... ]
   - можно не устанавливать/не изменять загрузчик
   Тип загрузки может быть:
   * ALL  - загружать систему и в режиме BIOS, и в режиме UEFI
   * BIOS - загружать систему только в режиме BIOS
   * UEFI - загружать систему только в режиме UEFI

                              Опции развёртывания
                              ~~~~~~~~~~~~~~~~~~~

   New BCD - создать новый файл конфигурации BCD (вместо добавления новой записи в
             существующую конфигурацию) и обновить файлы загрузчика.
   Drivers - операции с драйверами после выполнения развёртывания.
   Reboot  - перезагрузка после завершения развёртывания.

   Операции с драйверами:
   * Добавление - выбрать папку с распакованными драйверами, которые будут
                  интегрированы в развёрнутую Windows. Дополнительно папка может
                  содержать установочные пакеты Windows (файлы с расширением ".msu"
                  или ".cab"), которые также будут интегрированы.
   * Удаление - удалить все сторонние драйверы из развёрнутой Windows.
   * Удаление+добавление - комбинация предыдущих пунктов.

5. Состав:
   ------
   docs      - папка с файлами справки.
   packs     - папка с комплектами установки и вспомогательными утилитами.
   schemes   - папка со сценариями diskpart для "Предварительной разметки диска".
   WInst.cmd - файл запуска.

   Опционально:
   ~~~~~~~~~~~
   dirlist.txt  - список ОП и ПД для поиска по "классическому" варианту.
   settings.txt - файл настроек для изменения значений параметров, используемых
                  по умолчанию.
   WInstall    - папка для размещения общих $OEM$, unattend.xml и ПД для "портативного"
                 варианта расположения ПД.

6. Примечания
   ----------
- предназначено для запуска:
  * для установки через setup.exe: из-под WinPE 7-10 x86/x64
  * для установки через развёртывание: из-под Win7-10 x86/x64 и WinPE 7-10 x86/x64
- поиск папок из dirlist.txt и файлов из fudlist.txt производится по всем дискам
- в случае "произвольного" расположения ПД, также можно пользоваться общими $OEM$ и
  unattend.xml из папки WInstall
- при "Развёртывании" и "Техническом обслуживании" создаются резервные копии файла
  конфигурации BCD в папках "\Boot\{WInst}.bak" и "\EFI\Microsoft\Boot\{WInst}.bak"
  для BIOS и UEFI соответственно.

  Формат файла описания:
  - кодировка WIN-1251
  - имя файла описания = имя установочного файла + расширение "txt"
    Например: "install.esd.txt"
  - содержание:
    * первая строка - описание самой установки
    * следующие строки - описания редакций (необязательно) в формате "N=Title"
    Например, содержимое "install.esd.txt":

    Windows 7 SP1 (x86-x64) Russian

    1=Windows 7 (x86)    Максимальная
    2=Windows 7 (x86_64) Максимальная
    7=Windows 7 (x86)    Домашняя базовая
    8=Windows 7 (x86_64) Домашняя базовая

  При развёртывании редакции, для которой есть описание в файле описания, новый пункт
в меню загрузки Windows будет называться как описание редакции, а не стандартно
"Windows 7" или "Windows 10". Если такая редакция будет развёрнута на одном ПК
несколько раз, то к названию будет добавляться индекс [N], где N=2,3 и.т.д.

__________________
(c) 2018, Ander_73

