Dela via


Testa MSIX-paket för App Attach

Den här artikeln visar hur du monterar MSIX-paket utanför Azure Virtual Desktop för att testa dina paket för appanslutning. DE API:er som power app-anslutning är tillgängliga för Windows 11 Enterprise och Windows 10 Enterprise. Dessa API:er kan användas utanför Azure Virtual Desktop för testning, men det finns inget hanteringsplan för appanslutning eller MSIX-appanslutning utanför Azure Virtual Desktop.

Mer information om appanslutning och MSIX-appanslutning finns i Bifoga app och BIFOGA MSIX-app i Azure Virtual Desktop.

Förutsättningar

Innan du kan testa ett paket för att följa anvisningarna i den här artikeln behöver du följande:

  • En enhet som kör Windows 11 Enterprise eller Windows 10 Enterprise.

  • Ett program som du har expanderat från MSIX-format till en bild som du kan använda med appkoppling. Lär dig hur du skapar en MSIX-avbildning som ska användas med appanslutning i Azure Virtual Desktop.

  • Om du använder en CimFS-avbildning måste du installera PowerShell-modulen CimDiskImage.

  • Ett användarkonto som har lokal administratörsbehörighet på den enhet som du använder för att testa MSIX-paketet.

Du behöver ingen Azure Virtual Desktop-distribution eftersom den här artikeln beskriver en process för testning utanför Azure Virtual Desktop.

Kommentar

Microsoft Support stöder inte CimDiskImage PowerShell-modulen, så om du stöter på problem måste du skicka en begäran på modulens GitHub-lagringsplats.

Faser

Om du vill använda MSIX-paket utanför Azure Virtual Desktop finns det fyra olika faser som du måste utföra i följande ordning:

  1. Fas
  2. Registrera dig
  3. Avregistrera
  4. Destage

Mellanlagring och destaging är åtgärder på maskinnivå, medan registrering och avregistrering är åtgärder på användarnivå. De kommandon som du behöver använda varierar beroende på vilken version av PowerShell du använder och om diskbilderna är i CimFS-, VHDX - eller VHD-format .

Kommentar

Alla MSIX-paket innehåller ett certifikat. Du ansvarar för att se till att certifikaten för MSIX-paket är betrodda i din miljö.

Förbereda för att mellanlagra ett MSIX-paket

Mellanlagringsskriptet förbereder datorn för att ta emot MSIX-paketet och monterar det relevanta paketet på datorn.

Välj relevant flik för den version av PowerShell som du använder.

Om du vill mellanlagra paket med PowerShell 6 eller senare måste du köra följande kommandon före mellanlagringsåtgärderna för att ta funktionerna i Windows Runtime-paketet till PowerShell.

  1. Öppna en PowerShell-prompt som administratör.

  2. Kör följande kommando för att ladda ned och installera Windows Runtime-paketet. Du behöver bara köra följande kommandon en gång per dator.

    #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. Kör sedan följande kommando för att göra Windows Runtime-komponenterna tillgängliga i 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
    

Mellanlagra ett MSIX-paket

Nu när du har förberett datorn för att mellanlagra MSIX-paket måste du montera diskavbildningen och sedan slutföra mellanlagringen av MSIX-paketet.

Montera en diskbild

Processen för att montera en diskbild varierar beroende på om du använder CimFs-, VHDX- eller VHD-format för diskbilden. Välj relevant flik för det format du använder.

Så här monterar du en CimFS-diskbild:

  1. Kör följande kommando i samma PowerShell-session:

    $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. Behåll variabeln $deviceId. Du behöver den här informationen senare i den här artikeln.

  3. När du är klar fortsätter du till Slutför mellanlagringen av en diskavbildning.

Slutför mellanlagringen av en diskavbildning

Slutligen måste du köra följande kommandon för alla avbildningsformat för att slutföra mellanlagringen av diskbilden. Det här kommandot använder variabeln $deviceId som du skapade när du monterade diskbilden i föregående avsnitt.

  1. I samma PowerShell-session hämtar du programinformationen genom att köra följande kommandon:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Hämta det fullständiga namnet på MSIX-paketet och lagra det i en variabel genom att köra följande kommandon. Den här variabeln behövs för senare steg.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Skapa en absolut URI för manifestmappen för Upravljač za pakete-API:et genom att köra följande kommandon:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Använd den absoluta URI:n för att mellanlagra programpaketet genom att köra följande kommandon:

    $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. Övervaka mellanlagringsstatusen för programpaketet genom att köra följande kommandon. Hur mycket tid det tar att mellanlagra paketet beror på dess storlek. Egenskapen Status för variabeln $stagingResult kommer att vara RanToCompletion när mellanlagringen är klar.

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

När MSI-paketet har mellanlagrats kan du registrera MSIX-paketet.

Registrera ett MSIX-paket

Om du vill registrera ett MSIX-paket kör du följande kommandon i samma PowerShell-session. Det här kommandot använder variabeln $msixPackageFullName som skapades i ett tidigare avsnitt.

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

Nu när MSIX-paketet har registrerats bör programmet vara tillgängligt för användning i sessionen. Nu kan du öppna programmet för testning och felsökning. När du är klar måste du avregistrera och avstage ditt MSIX-paket.

Avregistrera ett MSIX-paket

När du är klar med MSIX-paketet och är redo att ta bort det måste du först avregistrera det. Om du vill avregistrera MSIX-paketet kör du följande kommandon i samma PowerShell-session. Dessa kommandon hämtar diskens parameter igen och tar bort paketet med hjälp av variabeln $msixPackageFullName som skapades DeviceId i ett tidigare avsnitt.

$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

Avstage ett MSIX-paket

För att kunna avinstallera MSIX-paketet måste du demontera diskavbildningen genom att köra följande kommando i samma PowerShell-session för att säkerställa att paketet inte fortfarande är registrerat för någon användare. Det här kommandot använder variabeln $msixPackageFullName som skapades i ett tidigare avsnitt.

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

Demontera diskavbildningen

För att slutföra destagingsprocessen måste du demontera diskarna från systemet. Vilket kommando du behöver använda beror på formatet på diskbilden. Välj relevant flik för det format du använder.

Om du vill demontera en CimFS-diskavbildning kör du följande kommandon i samma PowerShell-session:

Dismount-CimDiskImage -DeviceId $deviceId

När du har demonterat diskarna har du tagit bort MSIX-paketet på ett säkert sätt.

Konfigurera simuleringsskript för MSIX-appanslutningsagenten

Om du vill lägga till och ta bort MSIX-paket till enheten automatiskt kan du använda PowerShell-kommandona i den här artikeln för att skapa skript som körs vid start, inloggning, utloggning och avstängning. Mer information finns i Använda start-, avstängnings-, inloggnings- och utloggningsskript i Grupprincip. Du måste se till att alla variabler som krävs för varje fas är tillgängliga i varje skript.

Du skapar ett skript för varje fas:

  • Startskriptet kör fasprocessen .
  • Inloggningsskriptet kör registreringsprocessen .
  • Utloggningsskriptet kör avregistreringsprocessen.
  • Avstängningsskriptet kör avstageprocessen.

Kommentar

Du kan använda schemaläggaren för att köra scenskriptet. Om du vill köra skriptet anger du aktivitetsutlösaren till När datorn startar och aktiverar Kör med högsta behörighet.

Använda paket offline

Om du använder paket från Microsoft Store za preduzeća eller Microsoft Store za obrazovanje på enheter som inte är anslutna till Internet måste du hämta paketlicenserna från Microsoft Store och installera dem på enheten för att kunna köra appen. Om enheten är online och kan ansluta till Microsoft Store za preduzeća bör de licenser som krävs laddas ned automatiskt, men om du är offline måste du konfigurera licenserna manuellt.

Om du vill installera licensfilerna måste du använda ett PowerShell-skript som anropar MDM_EnterpriseModernAppManagement_StoreLicenses02_01 klassen i WMI Bridge-providern.

Så här konfigurerar du en licens för offlineanvändning:

  1. Ladda ned apppaketet, licensen och nödvändiga ramverk från Microsoft Store za preduzeća. Du behöver både kodade och okodade licensfiler. Information om hur du laddar ned en offlinelicensierad app finns i Distribuera offlineappar.

  2. Kör följande PowerShell-kommandon som administratör. Du kan installera licensen i slutet av mellanlagringsfasen. Du måste redigera följande variabler:

    • $contentID är ContentID-värdet från den okodade licensfilen (.xml). Du kan öppna licensfilen i valfri textredigerare.

    • $licenseBlob är hela strängen för licensbloben i kodad licensfil (.bin). Du kan öppna den kodade licensfilen i valfri textredigerare.

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

Demonstrationsskript

Du hittar demonstrationsskript för alla fyra stegen i testningen av MSIX-paket och syntaxhjälp för hur du använder dem på vår GitHub-lagringsplats. Dessa skript fungerar med valfri version av PowerShell och valfritt diskbildformat.

Nästa steg

Läs mer om appanslutning och MSIX-appanslutning i Azure Virtual Desktop: