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


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

В этой статье показано, как подключить пакеты MSIX за пределами Виртуального рабочего стола Azure, чтобы протестировать пакеты для подключения приложений. API-интерфейсы, которые используют подключение приложений, доступны для Windows 11 Корпоративная и Windows 10 Корпоративная. Эти API-интерфейсы можно использовать за пределами Виртуального рабочего стола Azure для тестирования, однако нет плоскости управления для подключения приложений за пределами Виртуального рабочего стола Azure.

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

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

Прежде чем протестировать пакет для выполнения инструкций, описанных в этой статье, вам потребуется следующее:

Развертывание Виртуального рабочего стола Azure не требуется, так как в этой статье описывается процесс тестирования за пределами Виртуального рабочего стола Azure.

Примечание.

служба поддержки Майкрософт не поддерживает модуль PowerShell CimDiskImage, поэтому при возникновении каких-либо проблем вам потребуется отправить запрос в репозитории модуля GitHub.

Этапы

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

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

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

Примечание.

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

Подготовка к созданию пакета MSIX

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

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

Чтобы выполнить этап пакетов с помощью PowerShell 6 или более поздней версии, необходимо выполнить следующие команды перед промежуточными операциями, чтобы перенести возможности пакета среда выполнения Windows в 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 на устройство, можно использовать команды 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
      }
      

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

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

Дальнейшие действия

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