Выполнение сценариев с помощью платформы поддержки пакетов

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

Платформу поддержки пакетов (PSF) можно использовать для запуска одного скрипта PowerShell перед запуском исполняемого файла упаковаемого приложения и одним скриптом PowerShell после выполнения исполняемого файла приложения для очистки. Каждый исполняемый файл приложения, определенный в манифесте приложения, может иметь собственные скрипты. Скрипт можно настроить для запуска только один раз при первом запуске приложения и без отображения окна PowerShell, чтобы пользователи не завершили скрипт преждевременно по ошибке. Существуют другие параметры настройки способа запуска скриптов, показанные ниже.

Необходимые компоненты

Чтобы включить выполнение скриптов, необходимо задать для политики выполнения PowerShell значение RemoteSigned. Для этого выполните следующую команду:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Политика выполнения должна быть задана как для 64-разрядного исполняемого файла PowerShell, так и для 32-разрядного исполняемого файла PowerShell. Обязательно откройте каждую версию PowerShell и выполните одну из приведенных выше команд.

Ниже приведены расположения каждого исполняемого файла.

  • 64-разрядный компьютер:
    • 64-разрядный исполняемый файл: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • 32-разрядный исполняемый файл: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 32-разрядный компьютер:
    • 32-разрядный исполняемый файл: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Дополнительные сведения о политиках выполнения PowerShell см . в этой статье.

🚩 Обязательно включите в пакет файл StartingScriptWrapper.ps1 и поместите его в ту же папку, что и исполняемый файл. Этот файл можно скопировать из пакета NuGet PSF или из репозитория PSF Github.

Включение скриптов

Чтобы указать, какие скрипты будут выполняться для каждого упаковаемого исполняемого файла приложения, необходимо изменить файл config.json. Чтобы сообщить PSF запустить скрипт перед выполнением упаковаемого приложения, добавьте элемент конфигурации с именем startScript. Чтобы сообщить PSF запустить скрипт после завершения упаковаемого приложения, добавьте элемент конфигурации с именем endScript.

Элементы конфигурации скрипта

Ниже приведены элементы конфигурации, доступные для скриптов. Конечный скрипт игнорирует waitForScriptToFinish элементы конфигурации и stopOnScriptError элементы конфигурации.

Имя ключа Тип значения Обязательное? По умолчанию. Description
scriptPath string Да Н/П Путь к скрипту, включая имя и расширение. Путь относится к рабочему каталогу приложения, если он указан, в противном случае он начинается в корневом каталоге пакета.
scriptArguments строка Нет empty Список аргументов с разделителями пространства. Формат совпадает с вызовом скрипта PowerShell. Эта строка добавляется для scriptPath выполнения допустимого вызова PowerShell.exe.
runInVirtualEnvironment boolean No true Указывает, должен ли скрипт выполняться в той же виртуальной среде, в которой выполняется упаковаемое приложение.
runOnce boolean No true Указывает, должен ли скрипт выполняться один раз на пользователя на каждую версию.
showWindow boolean No false Указывает, отображается ли окно PowerShell.
stopOnScriptError boolean No false Указывает, следует ли выйти из приложения, если начальный скрипт завершается сбоем.
waitForScriptToFinish boolean No true Указывает, следует ли упаковаированному приложению ожидать завершения запуска скрипта перед началом работы.
timeout DWORD No INFINITE Сколько времени скрипту будет разрешено выполнять. Когда время истекает, скрипт будет остановлен.

Примечание.

Параметр stopOnScriptError: true и waitForScriptToFinish: false для примера приложения не поддерживается. Если вы задали оба этих элемента конфигурации, PSF вернет ошибку ERROR_BAD_CONFIGURATION.

Пример конфигурации

Ниже приведен пример конфигурации с использованием двух разных исполняемых файлов приложения.

{
  "applications": [
    {
      "id": "Sample",
      "executable": "Sample.exe",
      "workingDirectory": "",
      "stopOnScriptError": false,
      "startScript":
      {
        "scriptPath": "RunMePlease.ps1",
        "scriptArguments": "\\\"First argument\\\" secondArgument",
        "runInVirtualEnvironment": true,
        "showWindow": true,
        "waitForScriptToFinish": false
      },
      "endScript":
      {
        "scriptPath": "RunMeAfter.ps1",
        "scriptArguments": "ThisIsMe.txt"
      }
    },
    {
      "id": "CPPSample",
      "executable": "CPPSample.exe",
      "workingDirectory": "",
      "startScript":
      {
        "scriptPath": "CPPStart.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runInVirtualEnvironment": true
      },
      "endScript":
      {
        "scriptPath": "CPPEnd.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runOnce": false
      }
    }
  ],
  "processes": [
    ...(taken out for brevity)
  ]
}