MSIX-pakketten testen voor app-bijlage

In dit artikel leest u hoe u MSIX-pakketten buiten Azure Virtual Desktop koppelt om uw pakketten te testen voor app-koppeling. De API's die power app koppelen, zijn beschikbaar voor Windows 11 Enterprise en Windows 10 Enterprise. Deze API's kunnen buiten Azure Virtual Desktop worden gebruikt voor testen, maar er is geen beheervlak voor het koppelen van MSIX-apps of app-koppelen buiten Azure Virtual Desktop.

Zie MSIX-appkoppeling en app-bijlage in Azure Virtual Desktop voor meer informatie over msix-appkoppeling en app-bijlage.

Vereisten

Voordat u een pakket kunt testen om de instructies in dit artikel te volgen, hebt u het volgende nodig:

U hebt geen Azure Virtual Desktop-implementatie nodig omdat in dit artikel een proces wordt beschreven voor het testen buiten Azure Virtual Desktop.

Notitie

Microsoft Ondersteuning geen ondersteuning biedt voor de CimDiskImage PowerShell-module, dus als u problemen ondervindt, moet u een aanvraag indienen in de GitHub-opslagplaats van de module.

Fasen

Als u MSIX-pakketten buiten Azure Virtual Desktop wilt gebruiken, zijn er vier afzonderlijke fasen die u in de volgende volgorde moet uitvoeren:

  1. Fase
  2. Registreer
  3. Registratie ongedaan maken
  4. Destage

Fasering en destaging zijn bewerkingen op machineniveau, terwijl registratie en registratie bewerkingen op gebruikersniveau zijn. De opdrachten die u moet gebruiken, variëren afhankelijk van de versie van PowerShell die u gebruikt en of uw schijfinstallatiekopieën zich in CimFS-, VHDX - of VHD-indeling bevinden.

Notitie

Alle MSIX-pakketten bevatten een certificaat. U bent verantwoordelijk voor het controleren of de certificaten voor MSIX-pakketten worden vertrouwd in uw omgeving.

Een MSIX-pakket voorbereiden

Het faseringsscript bereidt uw computer voor op het ontvangen van het MSIX-pakket en koppelt het relevante pakket aan uw computer.

Selecteer het relevante tabblad voor de versie van PowerShell die u gebruikt.

Als u pakketten wilt faseren met PowerShell 6 of hoger, moet u de volgende opdrachten uitvoeren voordat de faseringsbewerkingen de mogelijkheden van het Windows Runtime-pakket naar PowerShell brengen.

  1. Open een PowerShell-prompt als beheerder.

  2. Voer de volgende opdracht uit om het Windows Runtime-pakket te downloaden en te installeren. U hoeft de volgende opdrachten slechts eenmaal per computer uit te voeren.

    #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. Voer vervolgens de volgende opdracht uit om de Windows Runtime-onderdelen beschikbaar te maken in 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
    

Een MSIX-pakket fasen

Nu u uw computer hebt voorbereid om MSIX-pakketten te faseren, moet u de schijfinstallatiekopieën koppelen en vervolgens het MSIX-pakket klaarzetten.

Een schijfinstallatiekopieën koppelen

Het proces voor het koppelen van een schijfinstallatiekopie is afhankelijk van of u de CimFs-, VHDX- of VHD-indeling voor uw schijfinstallatiekopie gebruikt. Selecteer het relevante tabblad voor de indeling die u gebruikt.

Een CimFS-schijfinstallatiekopie koppelen:

  1. Voer in dezelfde PowerShell-sessie de volgende opdracht uit:

    $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. Houd de variabele $deviceId. U hebt deze informatie verderop in dit artikel nodig.

  3. Wanneer u klaar bent, gaat u verder met het faseren van een schijfinstallatiekopieën.

De fasering van een schijfinstallatiekopieën voltooien

Ten slotte moet u de volgende opdrachten uitvoeren voor alle installatiekopieën om de fasering van de schijfinstallatiekopieën te voltooien. Met deze opdracht wordt de $deviceId variabele gebruikt die u hebt gemaakt bij het koppelen van de schijfinstallatiekopieën in de vorige sectie.

  1. Haal in dezelfde PowerShell-sessie de toepassingsgegevens op door de volgende opdrachten uit te voeren:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Haal de volledige naam van het MSIX-pakket op en sla het op in een variabele door de volgende opdrachten uit te voeren. Deze variabele is nodig voor latere stappen.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Maak een absolute URI voor de manifestmap voor de Pakketbeheer-API door de volgende opdrachten uit te voeren:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Gebruik de absolute URI om het toepassingspakket klaar te zetten door de volgende opdrachten uit te voeren:

    $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. Controleer de voortgang van de fasering voor het toepassingspakket door de volgende opdrachten uit te voeren. De tijd die nodig is om het pakket klaar te maken, is afhankelijk van de grootte. De Status eigenschap van de $stagingResult variabele is RanToCompletion wanneer de fasering is voltooid.

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

Zodra uw MSI-pakket is gefaseerd, kunt u uw MSIX-pakket registreren.

Een MSIX-pakket registreren

Als u een MSIX-pakket wilt registreren, voert u de volgende opdrachten uit in dezelfde PowerShell-sessie. Deze opdracht maakt gebruik van de $msixPackageFullName variabele die in een vorige sectie is gemaakt.

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

Nu uw MSIX-pakket is geregistreerd, moet uw toepassing beschikbaar zijn voor gebruik in uw sessie. U kunt de toepassing nu openen voor testen en probleemoplossing. Zodra u klaar bent, moet u de registratie van het MSIX-pakket ongedaan maken en de fase van het MSIX-pakket ongedaan maken.

De registratie van een MSIX-pakket ongedaan maken

Zodra u klaar bent met uw MSIX-pakket en klaar bent om het te verwijderen, moet u het eerst de registratie ongedaan maken. Voer de volgende opdrachten uit in dezelfde PowerShell-sessie om de registratie van het MSIX-pakket ongedaan te maken. Met deze opdrachten wordt de parameter van DeviceId de schijf opnieuw opgehaald en wordt het pakket verwijderd met behulp van de $msixPackageFullName variabele die in een vorige sectie is gemaakt.

$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

Een MSIX-pakket destage ongedaan maken

Voer ten slotte de volgende opdracht uit in dezelfde PowerShell-sessie om ervoor te zorgen dat het pakket nog niet is geregistreerd voor een gebruiker om het MSIX-pakket af te schermen. Deze opdracht maakt gebruik van de $msixPackageFullName variabele die in een vorige sectie is gemaakt.

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

De schijfinstallatiekopieën ontkoppelen

Als u het uitstagingsproces wilt voltooien, moet u de schijven van het systeem ontkoppelen. De opdracht die u moet gebruiken, is afhankelijk van de indeling van de schijfinstallatiekopieën. Selecteer het relevante tabblad voor de indeling die u gebruikt.

Als u een CimFS-schijfinstallatiekopie wilt ontkoppelen, voert u de volgende opdrachten uit in dezelfde PowerShell-sessie:

Dismount-CimDiskImage -DeviceId $deviceId

Nadat u klaar bent met het ontkoppelen van uw schijven, hebt u het MSIX-pakket veilig verwijderd.

Simulatiescripts instellen voor de MSIX-app-bijlageagent

Als u MSIX-pakketten automatisch aan uw apparaat wilt toevoegen en verwijderen, kunt u de PowerShell-opdrachten in dit artikel gebruiken om scripts te maken die worden uitgevoerd bij het opstarten, aanmelden, afmelden en afsluiten. Zie Opstart-, afsluit-, aanmeldings- en afmeldingsscripts gebruiken in Groepsbeleid voor meer informatie. U moet ervoor zorgen dat alle variabelen die vereist zijn voor elke fase beschikbaar zijn in elk script.

U maakt een script voor elke fase:

  • Het opstartscript voert het faseproces uit.
  • Het aanmeldingsscript voert het registratieproces uit.
  • Het afmeldingsscript voert het registratieproces uit.
  • Het afsluitscript voert het faseerproces uit.

Notitie

U kunt taakplanner gebruiken om het fasescript uit te voeren. Als u het script wilt uitvoeren, stelt u de taaktrigger in op Wanneer de computer wordt gestart en schakelt u Uitvoeren met de hoogste bevoegdheden in.

Pakketten offline gebruiken

Als u pakketten van de Microsoft Store voor Bedrijven of de Microsoft Store voor Onderwijs gebruikt op apparaten die niet zijn verbonden met internet, moet u de pakketlicenties ophalen uit de Microsoft Store en deze installeren op uw apparaat om de app succesvol uit te voeren. Als uw apparaat online is en verbinding kan maken met de Microsoft Store voor Bedrijven, moeten de vereiste licenties automatisch worden gedownload, maar als u offline bent, moet u de licenties handmatig instellen.

Als u de licentiebestanden wilt installeren, moet u een PowerShell-script gebruiken dat de MDM_EnterpriseModernAppManagement_StoreLicenses02_01 klasse aanroept in de WMI Bridge Provider.

U kunt als volgt een licentie instellen voor offlinegebruik:

  1. Download het app-pakket, de licentie en de vereiste frameworks uit de Microsoft Store voor Bedrijven. U hebt zowel de gecodeerde als niet-gecodeerde licentiebestanden nodig. Zie Offline-apps distribueren voor meer informatie over het downloaden van een offline gelicentieerde app.

  2. Voer de volgende PowerShell-opdrachten uit als beheerder. U kunt de licentie installeren aan het einde van de faseringsfase. U moet de volgende variabelen bewerken:

    • $contentID is de ContentID-waarde uit het niet-gecodeerde licentiebestand (.xml). U kunt het licentiebestand openen in een teksteditor van uw keuze.

    • $licenseBlob is de volledige tekenreeks voor de licentie-blob in het gecodeerde licentiebestand (.bin). U kunt het gecodeerde licentiebestand openen in een teksteditor van uw keuze.

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

Demonstratiescripts

U vindt demonstratiescripts voor alle vier de fasen van het testen van MSIX-pakketten en syntaxishulp voor het gebruik ervan in onze GitHub-opslagplaats. Deze scripts werken met elke versie van PowerShell en elke schijfinstallatiekopieënindeling.

Volgende stappen

Meer informatie over MSIX-app koppelen en app-koppelen in Azure Virtual Desktop: