Поддержка WIM

Конструктор плагина: 
Область применения: 
Способ запуска приложения: 
Комплектность: 
Автор плагина: 
yurkesha
Дата релиза: 
13.09.2011
Версия плагина: 
13.09.2011
Описание: 

Содержит два независимых компонента: - поддержка WIM-плагинов и реализация прозрачного монтирования и запуска программы из такого плагина. При этом сам WIM-архив выступает как исполняемый файл. (Для применения WIM-плагинов в WIM-загрузках требуется активный FBWF) - автоматическое создание WIM-сборки(работает или в конструкторе (Y)PE или с моей базовой постобработкой - неплагинной).

Раздел форума: 

Документация по WIM_FILE(поддержка WIM-плагинов)

Основной скрипт плагина wim_loader.cmd создан для удобства использования WIM-упакованных приложений.

Основная идея простая - монтирование WIM по заведомо уникальному пути и запуск программы в случае наличия описания или указания исполняемого файла через параметры командной строки. Если же описания нет или параметр не указан - открыть смонтированную папку в выбранном файловом менеджере(по-умолчанию EXPLORER).

Несмотря на кажущуюся сложность скрипта он достаточно прост в применении.

Вот полное описание всех параметров и форматов ввода:

=====================================================

Способы использования скрипта wim_loader.cmd
(даны в порядке убывания приоритетов обработки):
=====================================================
1. Запуск с указанием всех параметров из командной строки
(3 обязательных и 2 необязательных):
1-й - обязательный - WIM-файл для монтирования - полный путь
2-й - обязательный и равен 2 - это признак указания всех параметров из командной строки при его указании игнорируются параметры
из файла запуска
3-й - обязательный - файл для запуска - имя исполняемого файла
с относительным путем внутри WIM - без имени секции)
4-й - необязательный - секция WIM-файла для монтирования - если
не указано то будет использована секция "по умолчанию"
5-й - необязательный - путь для монтирования - полный путь -
если не указано будет использован путь "по умолчанию".

Условие срабатывания:
Скрипт считает что использован этот способ если второй параметр  командной строки равен 2
=====================================================

2. Запуск с подхватыванием параметров запуска из внешнего файла запуска <имя wim-файла без расширения>_wim_par.ini
Принимает 1 обязательный параметр из командной строки:
1-й - обязательный - WIM-файл для монтирования - полный путь
Файл описания запуска должен содержать следующие параметры:
FILE_LOAD = <файл для запуска> - имя исполняемого файла для запуска после монтирования с относительным путем внутри WIM -
без имени секции - обязательный!
WIM_SECTION = <имя секции WIM-файла для запуска> - если не указано будет использована секция "по умолчанию"
MOUNT_PATHS = <путь для монтирования> - если не указано
будет использован путь "по умолчанию"

Условие срабатывания:
Скрипт считает что использован этот способ если второй параметр командной строки отустствует и существует файл
<имя wim-файла без расширения>_wim_par.ini
=====================================================

3. Запуск с подхватыванием параметров запуска из файла _wim_par.ini
расположенного в корне секции для монтирования

Принимает 1 обязательный
1-й - обязательный - WIM-файл для монтирования - полный путь
Файл описания запуска должен содержать следующие параметры:
FILE_LOAD = <файл для запуска> - имя исполняемого файла для запуска после монтирования с относительным путем внутри WIM -
без имени секции - обязательный!

При этом для монтирования всегда используется секция "по умолчанию" то есть 1.
Для монтирования будет использован путь "по умолчанию"

Условие срабатывания:
Скрипт считает что использован этот способ если второй параметр командной строки отустствует и не существует файл
<имя wim-файла без расширения>_wim_par.ini

=====================================================
Теперь примеры:
=====================================================
Предположим мы имеем WIM-файл nod40.wim с секцией 1(то есть создавался по умолчанию), расположенный в %ProgramFiles%\NOD32_40 (то есть при обычной загрузке это абсолютный путь X:\PROGRAMS\NOD32_40). Файлы расположены в корне во вложенной папке NOD32. Так же предполагаем что файл для запуска - скрипт egui.cmd расположенный во вложенной папке NOD32 внутри WIM-файла.
=====================================================
1. Запуск с указанием всех параметров из командной строки
минимальный набор параметров запуска:
wim_loader.cmd "%ProgramFiles%\NOD32_40\nod40.wim" 2 NOD32\egui.cmd

максимальный набор параметров запуска:
wim_loader.cmd "%ProgramFiles%\NOD32_40\nod40.wim" 2 NOD32\egui.cmd 1 "%TEMP%\MY_NOD"
=====================================================
2. Запуск с подхватыванием параметров запуска из внешнего файла запуска
Создамим внешний ini-файл nod40_wim_par.ini в той же папке
где находится nod40.wim
Минимальное содержимое файла nod40_wim_par.ini:
FILE_LOAD=NOD32\egui.cmd

Максимальное содержимое файла nod40_wim_par.ini:
FILE_LOAD=NOD32\egui.cmd
WIM_SECTION=1
MOUNT_PATHS=%TEMP%\MY_NOD32

вызов производится так:
wim_loader.cmd "%ProgramFiles%\NOD32_40\nod40.wim"
=====================================================
3. Запуск с подхватыванием параметров запуска из файла _wim_par.ini
расположенного в корне секции для монтирования

Содержимое файла _wim_par.ini:
FILE_LOAD=egui.cmd

вызов производится так:
wim_loader.cmd "%ProgramFiles%\NOD32_40\nod40.wim"

=====================================================
Общие замечания:
=====================================================
При указании параметров командной строки содержащих пробелы
обязательно обрамляйте их двойными кавычками!
Также обязательно наличие в %SystemRoot%\system32 утилиты imagex.exe"

Путь для монтирования "по умолчанию":
%TEMP%\WIM_PRG\DISK_<Буква диска содержащего WIM-файл>\<путь WIM-файла>\<имя WIM-файла>

Секция для монтирования "по умолчанию": 1

Оба варианта INI-файлов cчитывают именованные параметры без учета секций
Символ ";" является символом коментария.

Если одноименный параметр будет встречен несколько раз то значение
будет считано из последней строки с таким параметром.

Пробелы до знака "=" и сразу после него игнорируются.

Так как обработка расширения WIM у меня реализована таким путем:
0x2, "Classes\wimfile\Shell\open\command",,"%SystemRoot%\SYSTEM32\wim_loader.cmd ""%1"""
то для второго и третьего типов запуска команда
wim_loader.cmd "<имя и путь wim-файла с расширением>"
генерится автоматически - вам остается только обеспечить наличие
нужного WIM-файла.

=====================================================
Приоритеты срабатывания методов монтирования:
=====================================================

- Если указано более одного параметра запуска скрипта - то наличие INI-файлов
рядом или внутри WIM-файла игнорируется - наивысший приоритет.

- Если указан только 1 параметр и рядом с WIM-файлом находится INI-файл вида
<имя wim-файла без расширения>_wim_par.ini
  наличие INI-файлов внутри WIM-файла игнорируется - средний приоритет

- Если указан только 1 параметр и рядом с WIM-файлом нет INF-файл вида
  <имя wim-файла без расширения>_wim_par.ini то обрабатывается INI-файл внутри WIM-файла - низший приоритет.

- Если указан только 1 параметр и рядом с WIM-файлом нет INF-файл вида
<имя wim-файла без расширения>_wim_par.ini и отсутствует INI-файл
  внутри WIM-файла - WIM смонтируется и будет открыта папка монтирования в  текущем шелле.