Поделиться через


Тестирование пакетов MSIX для подключения приложений

Это важно

Технология присоединения приложений MSIX будет снята с поддержки 1 июня 2025 года. Обязательно переместите все приложения в App Attach до этой даты.

В этой статье показано, как подключить пакеты MSIX за пределами виртуального рабочего стола Azure, чтобы протестировать пакеты для подключения приложений. API-интерфейсы, поддерживающие присоединение приложений, доступны для Windows 11 Enterprise и Windows 10 Enterprise. Эти 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, необходимо выполнить четыре этапа, которые необходимо выполнить в следующем порядке:

  1. Этап
  2. Регистрация
  3. Отмена регистрации
  4. Отмена размещения

Промежуточные и дестационные операции — это операции на уровне компьютера, а регистрация и отмена регистрации — это операции на уровне пользователя. Команды, которые необходимо использовать, зависят от используемой версии PowerShell и того, находятся ли образы дисков в CimFS, VHDX или VHD-формате.

Примечание.

Все пакеты MSIX включают сертификат. Вы несете ответственность за обеспечение доверия сертификатов для пакетов MSIX в вашей среде.

Подготовьте пакет MSIX к развёртыванию

Промежуточный скрипт подготавливает компьютер к получению пакета MSIX и подключает соответствующий пакет к компьютеру.

Выберите соответствующую вкладку для используемой версии PowerShell.

Чтобы подготовить пакеты с помощью PowerShell версии 6 или более поздней, необходимо выполнить следующие команды перед операциями подготовки, чтобы добавить возможности пакета Windows Runtime в PowerShell.

  1. Откройте запрос PowerShell от имени администратора.

  2. Выполните следующую команду для загрузки и установки пакета среды выполнения 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
    
  3. Затем выполните следующую команду, чтобы сделать компоненты среда выполнения 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, выполните приведенные ниже действия.

  1. В том же сеансе 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
    
  2. Сохраните переменную $deviceId. Эти сведения потребуются позже в данной статье.

  3. По завершении перейдите к окончательной подготовке образа диска.

Завершение подготовки образа диска

Наконец, необходимо выполнить следующие команды для всех форматов образов, чтобы завершить промежуточное выполнение образа диска. Эта команда использует $deviceId переменную, созданную при подключении образа диска в предыдущем разделе.

  1. В том же сеансе PowerShell получите сведения о приложении, выполнив следующие команды:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Получите полное имя пакета MSIX и сохраните его в переменной, выполнив следующие команды. Эта переменная необходима для последующих шагов.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Создайте абсолютный URI для папки манифеста для API диспетчера пакетов, выполнив следующие команды:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Используйте абсолютный 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")
    
  5. Отслеживайте промежуточный ход выполнения пакета приложения, выполнив следующие команды. Время, необходимое для подготовки пакета, зависит от его размера. Свойство 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

Убрать пакет MSIX

Наконец, чтобы отключить пакет 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.

Вот как настроить лицензию для автономного использования:

  1. Скачайте пакет приложения, лицензию и необходимые платформы из Microsoft Store для бизнеса. Вам нужны как закодированные, так и незакодированные файлы лицензий. Для получения сведений о том, как скачать приложение, имеющее автономную лицензию, см. статью «Распространение автономных приложений».

  2. Выполните следующие команды 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
      }
      

Демонстрационные сценарии

В нашем репозитории GitHub вы можете найти демонстрационные сценарии для всех четырех этапов тестирования пакетов MSIX, а также подсказки по синтаксису для их использования. Эти скрипты работают с любой версией PowerShell и любым форматом образа диска.

Следующие шаги

Дополнительные сведения о присоединении приложений и присоединении приложений MSIX в Виртуальном рабочем столе Azure: