Тестирование пакетов MSIX для подключения приложений
В этой статье показано, как подключить пакеты MSIX за пределами виртуального рабочего стола Azure, чтобы протестировать пакеты для подключения приложений. ИНТЕРФЕЙСы API, присоединенные к power app, доступны для Windows 11 Корпоративная и Windows 10 Корпоративная. Эти API можно использовать за пределами виртуального рабочего стола Azure для тестирования, однако нет плоскости управления для подключения приложений или подключения приложения MSIX за пределами виртуального рабочего стола Azure.
Дополнительные сведения о присоединении приложений и присоединении приложений MSIX см. в статье "Подключение приложений" и подключение приложений MSIX в Виртуальном рабочем столе Azure.
Необходимые компоненты
Прежде чем протестировать пакет, чтобы выполнить инструкции в этой статье, вам потребуется следующее:
Устройство под управлением Windows 11 Корпоративная или Windows 10 Корпоративная.
Приложение, развернутое из формата MSIX, в изображение, которое можно использовать с присоединением приложения. Узнайте, как создать образ MSIX для использования с подключением приложений в Виртуальном рабочем столе Azure.
Если вы используете образ CimFS, необходимо установить модуль CimDiskImage PowerShell.
Учетная запись пользователя с разрешением локального администратора на устройстве, которое вы используете для тестирования пакета MSIX.
Развертывание виртуального рабочего стола Azure не требуется, так как в этой статье описывается процесс тестирования за пределами виртуального рабочего стола Azure.
Примечание.
служба поддержки Майкрософт не поддерживает модуль PowerShell CimDiskImage, поэтому при возникновении проблем вам потребуется отправить запрос в репозитории GitHub модуля.
Этапы
Чтобы использовать пакеты MSIX за пределами виртуального рабочего стола Azure, необходимо выполнить четыре этапа, которые необходимо выполнить в следующем порядке:
- Этап
- Регистр
- Отмена регистрации
- Отмена размещения
Промежуточные и дестационные операции — это операции на уровне компьютера, а регистрация и отмена регистрации — это операции на уровне пользователя. Команды, которые необходимо использовать, зависят от используемой версии PowerShell и того, находятся ли образы дисков в CimFS, VHDX или VHD-формате.
Примечание.
Все пакеты MSIX включают сертификат. Вы несете ответственность за обеспечение доверия сертификатов для пакетов MSIX в вашей среде.
Подготовка к этапу пакета MSIX
Промежуточный скрипт подготавливает компьютер к получению пакета MSIX и подключает соответствующий пакет к компьютеру.
Выберите соответствующую вкладку для используемой версии PowerShell.
Чтобы выполнить этапы пакетов с помощью PowerShell 6 или более поздней версии, необходимо выполнить следующие команды перед промежуточными операциями, чтобы перенести возможности пакета среда выполнения Windows в PowerShell.
Откройте запрос PowerShell от имени администратора.
Выполните следующую команду, чтобы скачать и установить пакет среда выполнения Windows. Для каждого компьютера необходимо выполнить только следующие команды.
#Required for PowerShell 6 and later $nuGetPackageName = 'Microsoft.Windows.SDK.NET.Ref' Register-PackageSource -Name MyNuGet -Location https://www.nuget.org/api/v2 -ProviderName NuGet Find-Package $nuGetPackageName | Install-Package
Затем выполните следующую команду, чтобы сделать компоненты среда выполнения Windows доступными в PowerShell:
#Required for PowerShell 6 and later $nuGetPackageName = 'Microsoft.Windows.SDK.NET.Ref' $winRT = Get-Package $nuGetPackageName $dllWinRT = Get-ChildItem (Split-Path -Parent $winRT.Source) -Recurse -File WinRT.Runtime.dll $dllSdkNet = Get-ChildItem (Split-Path -Parent $winRT.Source) -Recurse -File Microsoft.Windows.SDK.NET.dll Add-Type -AssemblyName $dllWinRT.FullName Add-Type -AssemblyName $dllSdkNet.FullName
Этап пакета MSIX
После подготовки компьютера к этапу пакетов MSIX необходимо подключить образ диска, а затем завершить промежуточное выполнение пакета MSIX.
Подключение образа диска
Процесс подключения образа диска зависит от того, используется ли формат CimFs, VHDX или VHD для образа диска. Выберите соответствующую вкладку для используемого формата.
Чтобы подключить образ диска CimFS, выполните приведенные ниже действия.
В том же сеансе PowerShell выполните следующую команду:
$diskImage = "<Local or UNC path to the disk image>" $mount = Mount-CimDiskImage -ImagePath $diskImage -PassThru -NoMountPath #We can now get the Device Id for the mounted volume, this will be useful for the destage step. $deviceId = $mount.DeviceId Write-Output $deviceId
Сохраните переменную
$deviceId
. Эти сведения потребуются позже в данной статье.По завершении перейдите к завершению промежуточного образа диска.
Завершение промежуточного образа диска
Наконец, необходимо выполнить следующие команды для всех форматов образов, чтобы завершить промежуточное выполнение образа диска. Эта команда использует $deviceId
переменную, созданную при подключении образа диска в предыдущем разделе.
В том же сеансе PowerShell получите сведения о приложении, выполнив следующие команды:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryName
Получите полное имя пакета MSIX и сохраните его в переменной, выполнив следующие команды. Эта переменная необходима для последующих шагов.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullName
Создайте абсолютный универсальный код ресурса (URI) для папки манифеста для API диспетчер пакетов, выполнив следующие команды:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
Используйте абсолютный универсальный код ресурса (URI) для этапа пакета приложения, выполнив следующие команды:
$asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.ToString() -eq 'System.Threading.Tasks.Task`1[TResult] AsTask[TResult,TProgress](Windows.Foundation.IAsyncOperationWithProgress`2[TResult,TProgress])' })[0] $asTaskAsyncOperation = $asTask.MakeGenericMethod([Windows.Management.Deployment.DeploymentResult], [Windows.Management.Deployment.DeploymentProgress]) $packageManager = New-Object -TypeName Windows.Management.Deployment.PackageManager $asyncOperation = $packageManager.StagePackageAsync($folderAbsoluteUri, $null, "StageInPlace")
Отслеживайте промежуточный ход выполнения пакета приложения, выполнив следующие команды. Время, необходимое для этапа пакета, зависит от его размера. Свойство
Status
переменной$stagingResult
будет происходитьRanToCompletion
после завершения промежуточного выполнения.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
После завершения пакета MSI можно зарегистрировать пакет MSIX.
Регистрация пакета MSIX
Чтобы зарегистрировать пакет MSIX, выполните следующие команды в том же сеансе PowerShell. Эта команда использует $msixPackageFullName
переменную, созданную в предыдущем разделе.
$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register
После регистрации пакета MSIX приложение должно быть доступно для использования в сеансе. Теперь можно открыть приложение для тестирования и устранения неполадок. После завершения необходимо отменить регистрацию и отвести пакет MSIX.
Отмена регистрации пакета MSIX
После завершения работы с пакетом MSIX и готовы удалить его, сначала необходимо отменить регистрацию. Чтобы отменить регистрацию пакета MSIX, выполните следующие команды в том же сеансе PowerShell. Эти команды снова получают параметр диска DeviceId
и удаляют пакет с помощью $msixPackageFullName
переменной, созданной в предыдущем разделе.
$appPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') $msixPackageFullName
$folderInfo = Get-Item $appPath
$deviceId = '\\?\' + $folderInfo.Target.Split('\')[0] +'\'
Write-Output $deviceId #Save this for later
Remove-AppxPackage $msixPackageFullName -PreserveRoamableApplicationData
Destage a MSIX package
Наконец, чтобы отключить пакет MSIX, необходимо отключить образ диска, выполните следующую команду в том же сеансе PowerShell, чтобы убедиться, что пакет еще не зарегистрирован для любого пользователя. Эта команда использует $msixPackageFullName
переменную, созданную в предыдущем разделе.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Отключение образа дисков
Чтобы завершить процесс дедестов, необходимо отключить диски из системы. Команда, используемая для использования, зависит от формата образа диска. Выберите соответствующую вкладку для используемого формата.
Чтобы отключить образ диска CimFS, выполните следующие команды в том же сеансе PowerShell:
Dismount-CimDiskImage -DeviceId $deviceId
После завершения отключения дисков вы безопасно удалили пакет MSIX.
Настройка сценариев моделирования для агента подключения приложения MSIX
Если вы хотите автоматически добавлять и удалять пакеты MSIX на устройство, можно использовать команды PowerShell в этой статье для создания скриптов, выполняемых при запуске, входе в систему, выходе и завершении работы. Дополнительные сведения см. в статье "Использование скриптов запуска, завершения работы, входа и выхода в групповую политику". Необходимо убедиться, что все переменные, необходимые для каждого этапа, доступны в каждом сценарии.
Вы создаете скрипт для каждого этапа:
- Скрипт запуска запускает процесс этапа .
- Скрипт входа запускает процесс регистрации .
- Скрипт выхода запускает процесс отмены регистрации .
- Скрипт завершения работы запускает процесс дестажа .
Примечание.
Планировщик задач можно использовать для запуска скрипта этапа. Чтобы запустить скрипт, установите триггер задачи на момент запуска компьютера и включите запуск с высокими привилегиями.
Использование пакетов в автономном режиме
Если вы используете пакеты на устройствах, которые не подключены к Интернету, необходимо убедиться, что лицензии на пакет установлены на устройстве для успешного запуска приложения. Если устройство подключено к сети, необходимые лицензии должны загружаться автоматически.
Чтобы установить файлы лицензий, необходимо использовать сценарий PowerShell, который вызывает MDM_EnterpriseModernAppManagement_StoreLicenses02_01
класс в поставщике моста WMI.
Вот как настроить лицензию для автономного использования:
Скачайте пакет приложения, лицензию и необходимые платформы из Microsoft Store для бизнеса. Вам нужны как закодированные, так и незакодированные файлы лицензий. Сведения о том, как скачать автономное приложение, см. в статье "Распространение автономных приложений".
Выполните следующие команды PowerShell от имени администратора. Вы можете установить лицензию в конце промежуточного этапа. Необходимо изменить следующие переменные:
$contentID
— это значение ContentID из незакодированного файла лицензии (.xml
). Вы можете открыть файл лицензии в любом текстовом редакторе по своему усмотрению.$licenseBlob
— это вся строка для большого двоичного объекта лицензии в кодированном файле лицензии (.bin
). Вы можете открыть закодированный файл лицензии в любом текстовом редакторе по своему усмотрению.$namespaceName = "root\cimv2\mdm\dmmap" $className = "MDM_EnterpriseModernAppManagement_StoreLicenses02_01" $methodName = "AddLicenseMethod" $parentID = "./Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses" #Update $contentID with the ContentID value from the unencoded license file (.xml) $contentID = "{'ContentID'_in_unencoded_license_file}" #Update $licenseBlob with the entire String in the encoded license file (.bin) $licenseBlob = "{Entire_String_in_encoded_license_file}" $session = New-CimSession #The final string passed into the AddLicenseMethod should be of the form <License Content="encoded license blob" /> $licenseString = '<License Content='+ '"' + $licenseBlob +'"' + ' />' $params = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection $param = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("param",$licenseString ,"String", "In") $params.Add($param) try { $instance = New-CimInstance -Namespace $namespaceName -ClassName $className -Property @{ParentID=$parentID;InstanceID=$contentID} $session.InvokeMethod($namespaceName, $instance, $methodName, $params) } catch [Exception] { Write-Host $_ | Out-String }
Демонстрационные сценарии
Демонстрационные сценарии для всех четырех этапов тестирования пакетов MSIX и синтаксиса помогут использовать их в репозитории GitHub. Эти скрипты работают с любой версией PowerShell и любым форматом образа диска.
Следующие шаги
Дополнительные сведения о присоединении приложений и присоединении приложений MSIX в Виртуальном рабочем столе Azure:
- подключение приложения и подключение приложения MSIX.
- Добавление приложений присоединения и присоединение приложений MSIX и управление ими.