Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u MSIX-pakketten buiten Azure Virtual Desktop koppelt om uw pakketten te testen op App Attach. De API's die power App Attach gebruiken, 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 App Attach buiten Azure Virtual Desktop.
Zie App-koppelen in Azure Virtual Desktop voor meer informatie over app-koppelen.
Vereisten
Voordat u een pakket kunt testen om de aanwijzingen in dit artikel te volgen, hebt u het volgende nodig:
Een apparaat met Windows 11 Enterprise of Windows 10 Enterprise.
Een toepassing die u hebt uitgebreid van DE MSIX-indeling naar een afbeelding die u kunt gebruiken met App Attach. Meer informatie over het maken van een MSIX-installatiekopieën voor gebruik met App Attach in Azure Virtual Desktop.
Als u een CimFS-installatiekopie gebruikt, moet u de CimDiskImage PowerShell-module installeren.
Een gebruikersaccount met lokale beheerdersmachtigingen op het apparaat dat u gebruikt om het MSIX-pakket te testen.
U hebt geen Azure Virtual Desktop-implementatie nodig omdat in dit artikel een proces wordt beschreven voor het testen buiten Azure Virtual Desktop.
Opmerking
Microsoft Ondersteuning biedt geen ondersteuning 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 verschillende fasen die u in de volgende volgorde moet uitvoeren:
- Fase
- Registreer
- Registratie ongedaan maken
- Destage
Fasering en destaging zijn bewerkingen op machineniveau, terwijl registreren en de registratie ongedaan maken bewerkingen op gebruikersniveau zijn. De opdrachten die u moet gebruiken, zijn afhankelijk van de versie van PowerShell die u gebruikt en of uw schijfinstallatiekopieën CimFS-, VHDX - of VHD-indeling hebben.
Opmerking
Alle MSIX-pakketten bevatten een certificaat. U bent er verantwoordelijk voor dat de certificaten voor MSIX-pakketten worden vertrouwd in uw omgeving.
Een MSIX-pakket voorbereiden
Het faseringsscript bereidt uw computer voor op ontvangst 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 vóór de faseringsbewerkingen om de mogelijkheden van het Windows Runtime-pakket naar PowerShell te brengen.
Open een PowerShell-prompt als beheerder.
Voer de volgende opdracht uit om het Windows Runtime-pakket te downloaden en te installeren. U hoeft de volgende opdrachten slechts eenmaal per machine 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-PackageVoer 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 uw MSIX-pakket voltooien.
Een schijfkopieën koppelen
Het proces voor het koppelen van een schijfkopieën varieert, afhankelijk van of u de CimFs-, VHDX- of VHD-indeling voor uw schijfinstallatiekopieën gebruikt. Selecteer het relevante tabblad voor de indeling die u gebruikt.
Een CimFS-schijfinstallatiekopieën koppelen:
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 $deviceIdBehoud de variabele
$deviceId. U hebt deze informatie verderop in dit artikel nodig.Wanneer u klaar bent, gaat u verder met de fasering van een schijfinstallatiekopieën voltooien.
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. Deze opdracht maakt gebruik van de $deviceId variabele die u hebt gemaakt toen u de schijfinstallatiekopieën in de vorige sectie hebt gekoppeld.
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.DirectoryNameHaal de volledige naam van het MSIX-pakket op en sla deze op in een variabele door de volgende opdrachten uit te voeren. Deze variabele is nodig voor latere stappen.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullNameMaak een absolute URI voor de map manifest voor de Package Manager-API door de volgende opdrachten uit te voeren:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUriGebruik de absolute URI om het toepassingspakket te fasereren 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")Bewaak de voortgang van de fasering voor het toepassingspakket door de volgende opdrachten uit te voeren. De tijd die nodig is om het pakket te fasen, is afhankelijk van de grootte. De
Statuseigenschap van de$stagingResultvariabele isRanToCompletionwanneer 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 nu de toepassing openen voor testen en probleemoplossing. Zodra u klaar bent, moet u de registratie van uw MSIX-pakket ongedaan maken en de fase opheffen.
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. Als u de registratie van het MSIX-pakket ongedaan wilt maken, voert u de volgende opdrachten uit in dezelfde PowerShell-sessie. 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 ongedaan maken
Als u ten slotte het MSIX-pakket ongedaan wilt maken, moet u de schijfinstallatiekopieën ontkoppelen, voert u de volgende opdracht uit in dezelfde PowerShell-sessie om ervoor te zorgen dat het pakket nog steeds is geregistreerd voor een gebruiker. Deze opdracht maakt gebruik van de $msixPackageFullName variabele die in een vorige sectie is gemaakt.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
De schijfkopieën ontkoppelen
Om het ontstagingsproces te voltooien, moet u de schijven van het systeem ontkoppelen. De opdracht die u moet gebruiken, is afhankelijk van de indeling van uw schijfinstallatiekopieën. Selecteer het relevante tabblad voor de indeling die u gebruikt.
Als u een CimFS-schijfinstallatiekopieën wilt ontkoppelen, voert u de volgende opdrachten uit in dezelfde PowerShell-sessie:
Dismount-CimDiskImage -DeviceId $deviceId
Zodra u klaar bent met het ontkoppelen van uw schijven, hebt u uw MSIX-pakket veilig verwijderd.
Simulatiescripts instellen voor de app-agent voor koppelen
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 Scripts voor opstarten, afsluiten, aanmelden en afmelden gebruiken in groepsbeleid voor meer informatie. U moet ervoor zorgen dat alle variabelen die voor elke fase zijn vereist, 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 .
- Met het afsluitscript wordt het proces voor het ongedaan maken van de fase uitgevoerd.
Opmerking
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 gebruikt op apparaten die niet zijn verbonden met internet, moet u ervoor zorgen dat de pakketlicenties op uw apparaat zijn geïnstalleerd om de app uit te voeren. Als uw apparaat online is, moeten de vereiste licenties automatisch worden gedownload.
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 offline gebruik:
Download het app-pakket, de licentie en de vereiste frameworks van 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 app met een offlinelicentie.
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:
$contentIDis de ContentID-waarde van het niet-gecodeerde licentiebestand (.xml). U kunt het licentiebestand openen in een teksteditor van uw keuze.$licenseBlobis 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 hulp bij de syntaxis 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 app-koppeling in Azure Virtual Desktop: