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:
- Fas
- Registrera dig
- Avregistrera
- 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.
Öppna en PowerShell-prompt som administratör.
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
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:
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
Behåll variabeln
$deviceId
. Du behöver den här informationen senare i den här artikeln.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.
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
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
Skapa en absolut URI för manifestmappen för Package Manager-API:et genom att köra följande kommandon:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
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")
Ö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 varaRanToCompletion
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 på enheter som inte är anslutna till Internet måste du se till att paketlicenserna är installerade på enheten för att kunna köra appen. Om enheten är online bör de licenser som krävs laddas ned automatiskt.
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:
Ladda ned apppaketet, licensen och nödvändiga ramverk från Microsoft Store för företag. Du behöver både kodade och okodade licensfiler. Information om hur du laddar ned en offlinelicensierad app finns i Distribuera offlineappar.
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: