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

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

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

Предварительные требования

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

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 или из репозитория GitHub PSF.

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

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

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

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

Имя ключа Тип значения Необходим? По умолчанию Описание
scriptPath строка Да Н/Д Путь к скрипту, включая имя и расширение. Путь относится к рабочему каталогу приложения, если он указан, в противном случае он начинается в корневом каталоге пакета.
scriptArguments строка Нет empty Список аргументов с разделителями пробелов. Формат одинаков для вызова скрипта PowerShell. Эта строка добавляется для scriptPath выполнения допустимого вызова PowerShell.exe.
runInVirtualEnvironment Логическое Нет true Указывает, должен ли скрипт выполняться в той же виртуальной среде, в которой выполняется упаковаемое приложение.
runOnce Логическое Нет true Указывает, должен ли сценарий выполняться один раз для каждого пользователя на версию.
showWindow Логическое Нет false Указывает, отображается ли окно PowerShell.
stopOnScriptError Логическое Нет false Указывает, следует ли выйти из приложения, если начальный скрипт завершается сбоем.
waitForScriptToFinish Логическое Нет true Указывает, должно ли упакованое приложение ожидать завершения начального скрипта перед запуском.
timeout DWORD Нет 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)
  ]
}