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

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

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

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

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

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

  1. .DDF Создайте файл, как показано ниже, заменив file1 и 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%

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

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

Вы можете использовать одну командную строку для каждого пакета подготовки. Пакетные файлы, приведенные выше, — это управляющие сценарии, которые контролируют установку и вызывают все остальные сценарии, включенные в пакет подготовки. Скрипт оркестратора — это то, что должно вызываться из 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 для установки нескольких приложений. Каждый из этих установщиков должен быть указан здесь как ресурс.

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

Если пакетный файл написан и ресурсы, на которые ссылается ссылка, готовы к включению, их можно добавить в пакет подготовки в Designer конфигурации Windows.

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

cmd /c InstallMyApp.bat

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

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

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

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

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

Когда все будет готово, выполните сборку пакета.

Примечания

  1. Взаимодействие с пользователем и вывод на консоль не поддерживаются при использовании ProvisioningCommands. Вся работа должна выполняться автоматически. Если скрипт пытается выполнить одно из следующих действий, это приводит к неопределенному поведению и может привести к невосстановляемому состоянию устройства, если оно выполняется во время установки или в режиме out of Box:

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

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

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

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

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

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

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

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

    Примечание.

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

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