Tester des packages MSIX pour l’attachement d’application

Cet article vous présente comment attacher des packages MSIX en dehors d’Azure Virtual Desktop afin de tester vos packages pour l’attachement d’application. Les API qui alimentent l’attachement d’application sont disponibles pour Windows 11 Entreprise et Windows 10 Entreprise. Vous pouvez utiliser ces API en dehors d’Azure Virtual Desktop pour les tests. Toutefois, il n’existe aucun plan de gestion pour l’attachement d’application MSIX ou l’attachement d’application en dehors d’Azure Virtual Desktop.

Pour obtenir plus d’informations sur l’attachement d’application et l’attachement d’application MSIX, consultez Attachement d’application et attachement d’application MSIX dans Azure Virtual Desktop.

Prérequis

Avant de pouvoir tester un package pour suivre les instructions de cet article, vous aurez besoin des éléments suivants :

Vous n’avez pas besoin d’un déploiement Azure Virtual Desktop, car cet article décrit un processus de test en dehors d’Azure Virtual Desktop.

Remarque

Le Support Microsoft ne prend pas en charge le module CimDiskImage PowerShell. Par conséquent, si vous rencontrez des problèmes, vous devez envoyer une demande sur le référentiel GitHub du module.

Phases

Pour utiliser des packages MSIX en dehors d’Azure Virtual Desktop, vous devez effectuer quatre phases distinctes dans l’ordre suivant :

  1. Étape
  2. Inscrire
  3. Désinscrire
  4. Retrait

La mise en préproduction et le retrait de production sont des opérations au niveau de l’ordinateur, tandis que l’inscription et la désinscription sont des opérations au niveau de l’utilisateur. Les commandes que vous devez utiliser varient en fonction de la version de PowerShell que vous utilisez et selon que vos images de disque sont au format CimFS ou VHDX ou VHD.

Remarque

Tous les packages MSIX incluent un certificat. Il vous incombe de vérifier que les certificats pour les packages MSIX sont approuvés dans votre environnement.

Préparer un package MSIX en vue de son enregistrement

Le script de mise en préproduction prépare votre machine à recevoir le package MSIX et monte le package approprié sur votre ordinateur.

Sélectionnez l’onglet pertinent pour la version PowerShell que vous utilisez.

Si vous souhaitez préparer des packages à des fins d’enregistrement en utilisant PowerShell 6 ou version ultérieure, vous devez exécuter les commandes suivantes avant les opérations préalables à l’enregistrement afin d’intégrer les fonctionnalités du package Windows Runtime dans PowerShell.

  1. Ouvrez une invite PowerShell en tant qu’administrateur.

  2. Exécutez les commandes suivantes pour télécharger et installer le package Windows Runtime. Vous devez exécuter les commandes suivantes une seule fois par machine.

    #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. Ensuite, exécutez la commande suivante pour rendre les composants Windows Runtime disponibles dans 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
    

Préparer l’enregistrement d’un package MSIX

Maintenant que vous avez préparé votre machine à des fins d’enregistrement de packages MSIX, vous devez monter votre image de disque, puis terminer l’enregistrement de votre package MSIX.

Monter une image de disque

Le processus de montage d’une image de disque varie selon que vous utilisez le format CimFS, VHDX ou VHD pour votre image de disque. Sélectionnez l’onglet pertinent pour le format que vous utilisez.

Pour monter une image disque CimFS :

  1. Dans la même session PowerShell, exécutez la commande suivante :

    $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. Conservez la variable $deviceId. Ces informations vous seront nécessaires plus loin dans cet article.

  3. Une fois terminé, passez à Terminer l’enregistrement d’une image de disque.

Terminer l’enregistrement d’une image de disque

Enfin, vous devez exécuter les commandes suivantes pour tous les formats d’image afin d’effectuer l’enregistrement de l’image de disque. Cette commande utilise la variable $deviceId que vous avez créée lorsque vous avez monté votre image de disque dans la section précédente.

  1. Dans la même session PowerShell, récupérez les informations d’application en exécutant les commandes suivantes :

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Obtenez le nom complet du package MSIX et stockez-le dans une variable en exécutant les commandes suivantes. Cette variable est nécessaire lors d’étapes ultérieures.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Créez un URI absolu pour le dossier manifeste pour l’API Gestionnaire de package en exécutant les commandes suivantes :

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Utiliser l’URI absolu pour préparer l’enregistrement du package d’application en exécutant les commandes suivantes :

    $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. Monitorez le processus d’enregistrement du package d’application en exécutant les commandes suivantes. Le temps nécessaire à l’enregistrement du package varie en fonction de sa taille. La propriété Status de la variable $stagingResult est RanToCompletion une fois l’enregistrement terminé.

    $stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation))
    
    while ($stagingResult.Status -eq "WaitingForActivation") {
        Write-Output "Waiting for activation..."
        Start-Sleep -Seconds 5
    }
    
    Write-Output $stagingResult
    

Une fois votre package MSIX enregistré, vous pouvez inscrire ce dernier.

Enregistrer un package MSIX

Si vous souhaitez enregistrer un package MSIX, exécutez les commandes suivantes dans la même session PowerShell. Cette commande utilise la variable $msixPackageFullName créée dans une section précédente.

$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register

Maintenant que votre package MSIX est inscrit, votre application devrait être disponible pour une utilisation dans votre session. Vous pouvez maintenant ouvrir l’application pour les tests et la résolution des problèmes. Une fois terminé, vous devez désenregistrer et désactiver après le désenregistrement de votre package MSIX.

Désenregistrer un package MSIX

Une fois que vous en avez terminé avec votre package MSIX et que vous êtes prêt à le supprimer, vous devez d’abord le désenregistrer. Si vous souhaitez désenregistrer le package MSIX, exécutez les commandes suivantes dans la même session PowerShell. Ces commandes obtiennent à nouveau le paramètre DeviceId du disque et suppriment le package en utilisant la variable $msixPackageFullName créée dans une section précédente.

$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

Désactiver un package MSIX après son désenregistrement

Enfin, si vous souhaitez désactiver un package MSIX après son désenregistrement, vous devez démonter votre image de disque. Exécutez les commandes suivantes dans la même session PowerShell vérifier que le package n’est plus enregistré pour n’importe quel utilisateur. Cette commande utilise la variable $msixPackageFullName créée dans une section précédente.

Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue

Démonter l’image de disque

Pour terminer le processus de désactivation, vous devez démonter les disques du système. La commande que vous devez utiliser varie en fonction du format de votre image de disque. Sélectionnez l’onglet pertinent pour le format que vous utilisez.

Si vous souhaitez démonter une image de disque CimFS, exécutez les commandes suivantes dans la même session PowerShell :

Dismount-CimDiskImage -DeviceId $deviceId

Une fois le démontage de vos disques avez terminé, vous avez supprimé votre package MSIX en toute sécurité.

Configurer des scripts de simulation pour l’agent d’attachement de l’application MSIX

Si vous souhaitez ajouter et supprimer automatiquement des packages MSIX dans votre appareil, vous pouvez utiliser les commandes PowerShell de cet article pour créer des scripts qui s’exécutent au démarrage, à l’ouverture de session, à la déconnexion et à l’arrêt. Pour obtenir plus d’informations, consultez Utiliser des scripts de démarrage, d’arrêt, d’ouverture de session et de fermeture de session dans une stratégie de groupe. Vous devez vérifier que les variables nécessaires pour chaque phase sont disponibles dans tous les scripts.

Vous créez un script pour chaque phase :

  • Le script de démarrage exécute le processus d’enregistrement.
  • Le script d’ouverture de session exécute le processus enregistrer.
  • Le script de fermeture de session exécute le script de désenregistrement.
  • Le script d’arrêt exécute le script de désactivation.

Remarque

Vous pouvez utiliser le planificateur de tâches pour exécuter le script d’enregistrement. Pour exécuter le script, définissez le déclencheur de la tâche sur Au démarrage de l’ordinateur, puis activez Exécuter avec les privilèges les plus élevés.

Utiliser des packages hors connexion

Si vous utilisez des packages du Microsoft Store pour Entreprises ou du Microsoft Store pour Éducation sur des appareils qui ne sont pas connectés à Internet, vous devez obtenir les licences de package à partir du Microsoft Store et les installer sur votre appareil pour exécuter correctement l’application. Si votre appareil est en ligne et peut se connecter au Microsoft Store pour Entreprises, les licences requises doivent être téléchargées automatiquement, mais si vous êtes hors connexion, vous devez configurer les licences manuellement.

Pour installer les fichiers de licence, vous devez utiliser un script PowerShell qui appelle la classe MDM_EnterpriseModernAppManagement_StoreLicenses02_01 dans le fournisseur de pont WMI.

Voici comment configurer une licence pour une utilisation hors connexion :

  1. Téléchargez le package d’application, la licence et les infrastructures requis à partir du Microsoft Store pour Entreprises. Vous avez besoin à la fois des fichiers de licence encodés et non codés. Si vous souhaitez découvrir comment télécharger une application sous licence hors connexion, consultez Distribuer des applications hors connexion.

  2. Exécutez les commandes PowerShell suivantes en tant qu’administrateur. Vous pouvez installer la licence à la fin de la phase d’enregistrement. Vous devez modifier les variables suivantes :

    • $contentID est la valeur ContentID du fichier de licence non codé (.xml). Vous pouvez ouvrir le fichier de licence dans l’éditeur de texte de votre choix.

    • $licenseBlob est la chaîne entière pour l’objet blob de licence dans le fichier de licence codé (.bin). Vous pouvez ouvrir le fichier de licence encodé dans l’éditeur de texte de votre choix.

      $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
      }
      

Scripts de démonstration

Vous trouverez des scripts de démonstration pour les quatre étapes du processus de test des packages MSIX et une aide sur la syntaxe pour les utiliser dans notre référentiel GitHub. Ces scripts fonctionnent avec n’importe quelle version de PowerShell et n’importe quel format d’image de disque.

Étapes suivantes

Découvrez plus d’informations sur l’attachement d’application MSIX et l’attachement d’application dans Azure Virtual Desktop :