Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Скрипты позволяют ИТ-специалистов динамически настраивать приложение в среде пользователя после его упаковки с помощью 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.
| Имя ключа | Тип значения | Обязательно? | По умолчанию | Описание |
|---|---|---|---|---|
scriptPath |
струна | Да | Не применимо | Путь к скрипту, включая имя и расширение. Путь относится к рабочему каталогу приложения, если он указан, в противном случае он начинается в корневом каталоге пакета. |
scriptArguments |
струна | нет | пусто | Список аргументов с разделителями пространства. Формат совпадает с вызовом скрипта PowerShell. Эта строка добавляется к scriptPath, чтобы сделать вызов PowerShell.exe допустимым. |
runInVirtualEnvironment |
булевый | нет | правда | Указывает, должен ли скрипт выполняться в той же виртуальной среде, в которой выполняется упаковаемое приложение. |
runOnce |
булевый | нет | правда | Указывает, должен ли скрипт выполняться один раз на пользователя на каждую версию. |
showWindow |
булевый | нет | неправда | Указывает, отображается ли окно PowerShell. |
stopOnScriptError |
булевый | нет | неправда | Указывает, следует ли выйти из приложения, если начальный скрипт завершается сбоем. |
waitForScriptToFinish |
булевый | нет | правда | Указывает, следует ли упаковаированному приложению ожидать завершения запуска скрипта перед началом работы. |
timeout |
DWORD (32-битное целое число) | нет | БЕСКОНЕЧНЫЙ | Сколько времени скрипту будет разрешено выполнять. Когда время истекает, скрипт будет остановлен. |
Замечание
Параметр 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)
]
}