Использование сценария для установки классических приложений в пакетах подготовки

Относится к:

  • Windows 10
  • Windows 11

В этом погонах описывается, как включить сценарии в пакет Windows для установки приложений Win32. Можно также выполнить сценарийные операции, не устанавливающие приложения. Однако требуется некоторое внимание, чтобы избежать непреднамеренного поведения во время выполнения скрипта (см. ниже Примечания ).

Сборка ресурсов приложения

  1. На устройстве, где создается пакет, поместите все ваши ресурсы в известное расположение. Каждый ресурс должен иметь уникальное имя файла, так как все файлы будут скопированы в одну папку temp на устройстве. Довольно часто у разных приложений установщик размещается в файле под названием install.exe или подобном ему, и из-за этого может возникнуть конфликт имен. Чтобы устранить эту проблему, можно использовать метод, описанный в следующем пункте, для включения полной структуры каталогов, которая затем будет развернута во временной папке на устройстве. Чаще всего для этого создают подкаталог для каждого приложения.

  2. Если вы хотите включить структуру каталогов с файлами, необходимо поместить ресурсы в файлы с расширением .cab, что позволит легко включить в них пакеты подготовки.

Помещение ресурсов приложения в CAB-файлы

  1. Создайте .DDF файл как ниже, заменив файл1 и file2 файлами, которые необходимо упаковть, и добавив имя файла/каталога.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    
    ;
    
    .OPTION EXPLICIT  ; Generate errors on variable typos
    
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    
    ; scanning is not too slow
    
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    
    .Set CompressionType=MSZIP
    
    ;** All files are compressed in cabinet files
    
    .Set Cabinet=on
    
    .Set Compress=on
    
    ;-------------------------------------------------------------------
    
    ;** CabinetNameTemplate = name of cab
    
    ;** DiskDirectory1 = output directory where cab will be created
    
    ;-------------------------------------------------------------------
    
    .Set CabinetNameTemplate=tt.cab
    
    .Set DiskDirectory1=.
    
    ;-------------------------------------------------------------------
    
    ; Replace <file> with actual files you want to package
    
    ;-------------------------------------------------------------------
    
    <file1>
    
    <file2>
    
    ;*** <the end>  
    
  2. Используйте команду makecab для создания CAB-файлов.

    Makecab -f <path to DDF file>
    

Создание сценария для установки приложения

Создайте сценарий для выполнения любой работы, необходимой для установки одного или нескольких приложений. Ниже приведены примеры, которые помогут вам начать работу с создания управляющего сценария, который будет выполнять необходимые установщики. На практике управляющий сценарий может использовать гораздо большее число ресурсов, чем в этих примерах.

Вам не нужно создавать сценарий оркестратора. В одном приложении может быть только одна командная строка. При необходимости можно создать сценарий, который записывает выходные данные каждого приложения, как описано ниже (вместо одного управляющего сценария для всего пакета подготовки).

Примечание

Все действия, выполняемые сценарием, должны производиться без отображения пользовательского интерфейса и без участия пользователя.

Сценарии будут выполняться на устройстве в системном контексте.

Пример отладки

Функция подробного ведения журнала не является встроенной, поэтому процедуры для записи журнала должны быть включены в сам сценарий. Вот образец сценария, который записывает в файл журнала фразу Hello World. При запуске на устройстве файл журнала будет доступен после завершения подготовки. Как вы увидите в следующих примерах, рекомендуется записывать в журнал каждое действие, выполняемое сценарием.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE% 

Пример с .exe

В этом примере показан сценарий создания файла вывода журнала на системном диске, .exe установки приложения из установщика и эхо результатов в файл журнала.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Пример с .msi

Здесь нет отличий от предыдущего установщика кроме того, что приложение устанавливается из установщика с расширением MSI. Обратите внимание, что команда msiexec вызывается с флагом /quiet для соблюдения требований по фоновому выполнению сценариев из пакета подготовки.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Пример PowerShell

Это пример сценария с ведением журнала, который показывает, как запустить сценарий PowerShell из параметра команд подготовка. Сценарий PowerShell, на который ссылается этот пример, также должен быть включен в пакет и выполнять те же требования, что и все скрипты, выполняемые из пакета подготовка: он должен выполняться молча, без взаимодействия с пользователем.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Выдержка из примера с CAB-файлом

В этом примере скрипт показывает расширение .cab из сценария команд подготовка и установку расширенного setup.exe

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Вызов нескольких сценариев в пакете

Пакет подготовка может включать несколько командных линий.

На каждый пакет подготовка разрешена одна командная линия. Пакетные файлы, приведенные выше, — это управляющие сценарии, которые контролируют установку и вызывают все остальные сценарии, включенные в пакет подготовки. Из параметра CommandLine, указанного в пакете, должен вызываться именно управляющий сценарий.

Ниже приведена таблица с описанием этих взаимосвязей на основе приведенного выше примера для PowerShell.

Параметр ICD Значение Описание
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat Командная строка, необходимая для вызова управляющего сценария.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat Один управляющий сценарий, указанный в командной строке, который обрабатывает вызовы всех необходимых установщиков и выполнение всех остальных действий, таких как разворачивание CAB-файлов. Ведение журнала должно обеспечиваться этим сценарием.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 Другие ресурсы, указанные в управляющем сценарии. В этом примере имеется только один, но здесь может быть много ссылок на ресурсы. Довольно часто управляющий сценарий используют для вызова ряда установщиков вида setup.exe или install.exe для установки нескольких приложений. Каждый из этих установщиков должен быть указан здесь как ресурс.

Добавление сценария в пакет подготовки

При написании пакетного файла и готовых к включению со ссылками активов их можно добавить в пакет подготовка в Windows Configuration Designer.

С помощью конструктора конфигураций Windows укажите всю информацию о том, как сценарий должен выполняться с использованием параметра CommandLine в пакете подготовки. Сюда входят флаги и любые другие параметры, которые вы обычно вводите в командной строке. Поэтому, если пакет содержит установщик приложения под названием install.exe и сценарий для автоматизации установки под названием InstallMyApp.bat, параметр ProvisioningCommands/DeviceContext/CommandLine должен иметь следующее значение:

cmd /c InstallMyApp.bat

В конструкторе конфигураций Windows это выглядит следующим образом:

Командная строка в выбранных настройках.

Также необходимо добавить соответствующие ресурсы для этого параметра командной строки, включая управляющий сценарий и все остальные ресурсы, на которые он ссылается, например установщики или CAB-файлы.

В конструкторе конфигураций Windows это выполняется путем добавления файлов в параметр ProvisioningCommands/DeviceContext/CommandFiles.

Командные файлы в выбранных настройках.

По завершении всех действий выполните сборку пакета.

Примечания

  1. Взаимодействие с пользователем и вывод на консоль не поддерживаются при использовании ProvisioningCommands. Вся работа должна выполняться автоматически. Если ваш сценарий попытается выполнить какие-либо из указанных ниже действий, это приведет к возникновению неопределенного поведения, что может привести устройство в не подлежащее восстановлению состояние, если эти действия выполняются во время установки или запуска при первом включении: а) Вывод на консоль. б) Отображение каких-либо данных на экране. в) Отображение пользователю диалогового окна или мастера установки.

  2. При применении во время первой загрузки подготовка выполняется на ранней стадии загрузки и до установления пользовательского контекста, поэтому важно включать сюда только те установщики, которые могут выполняться в этот момент. Другие установщики можно подготовить с помощью средства управления.

  3. Если из-за плохого сценария устройство находится в неустановленное состояние, его можно сбросить с помощью параметров восстановления в Windows клиенте.

  4. Ресурсы CommandFile развертываются на устройстве во временную папку, уникальную для каждого пакета.

    1. Для пакетов, добавленных во время неявного опыта, обычно это %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      После 0 ссылается Commands\ на порядок установки и указывает первое приложение, которое будет установлено. Для каждого приложения в пакете номер будет возрастать.

    2. Для пакетов, добавленных двойным щелчком по уже развернутому устройству, это будет временная папка пользователя, выполняющего пакет подготовки: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. Параметры командной строки будут выполняться в том каталоге, в котором файлы CommandFiles развернуты как в рабочий каталог. Это означает, что вам не нужно указывать полный путь к ресурсам в командной строке и в сценариях.

  6. Компонент подготовки среды выполнения будет пытаться запускать сценарии из пакета подготовки как можно раньше, в зависимости от того, на какой стадии пакет PPKG был добавлен. Например, если пакет добавлен во время запуска при первом включении, он будет выполняться сразу же после применения пакета, когда процедура запуска при первом включении еще не закончена. Это происходит до того, как пользователю будут предложены варианты настройки учетной записи. На экране появится диалоговое окно с вращающимся индикатором хода выполнения и надписью «подождите».

    Примечание

    С этого момента время ожидания для процесса подготовки составляет 30 минут. Все сценарии и процедуры установки должны быть завершены в течение этого времени.

  7. Сценарии выполняются в фоновом режиме, по мере того как продолжается выполнение остальных частей процесса подготовки. Для пакетов, добавленных в существующие системы путем двойного щелчка для установки, уведомлений о том, что подготовка или выполнение сценария завершены, нет.

Связанные статьи