Если вы используете несколько файлов ответов с OEM установкой (т.е. предположим вам нужны разные наборы настроек и софта), то вам нужны и разные папки $OEM$, но, к сожалению, при установке с CD (DVD), OEM файлы могут находиться только в корне диска в папке $OEM$ (переменная OemFilesPath= в winnt.sif почему-то игнорируется, видимо используется только при локальных и сетевых установках).
Для того чтобы обойти это ограничение я решил использовать батник, который по маркерному файлу определяет какой из файлов ответов использовался и в соответствии с этим ищет инфу в той или другой папке. Маркерный файл - это файл пустышка, который распаковывается из SFX архива за 39 минут до окончания установки.
Для этого есть специальный ключ:
[GuiUnattended]
DetachedProgram = "%SystemDrive%\Temp\dummy1.exe"
Из примера видно, что файл распаковывается с жесткого диска, т.к. все архивы попадают туда во время текстового этапа установки вместе со всеми другими OEM файлами (в моем случае из папки $OEM$\$1\Temp). В это время копируются все архивы, содержащие в себе по одному маркерному файлу (dummy1.exe, dummy2.exe и т.д.), а на этапе Т-39 распаковывается только нужный, указанный в файле ответов. Чтобы файл распаковался в нужную директорию (Temp), необходимо задать соответствующие настройки SFX архиву. Для WinRAR это можно сделать во время создания архива через закладку Дополнительно) или прямо в закладке Комментарий:
;The comment below contains SFX script commands
Path=%SystemDrive%\Temp
Silent=1
Overwrite=1
Таким образом, когда наступает время применения файлов настроек и установки программ, с помощью пакетного файла можно направить установку в нужную папку к нужным файлам. В моем случае используется bat-файл choice.bat, который запускается из cmdlines.txt
[COMMANDS]
"choice.bat"
и содержит следующие условия:
cmdow @ /HID @echo off
if exist %systemdrive%\Temp\dummy1.fle goto START1 if exist %systemdrive%\Temp\dummy2.fle goto START2 .... goto END :START1 REGEDIT /S Tweaks1.reg .\RunOnce1.cmd .\WinMUI\Muisetup.exe /i 0419 /d 0419 /l /f /r /s goto END