Testare pacchetti MSIX per il montaggio app
Questo articolo illustra come montare pacchetti MSIX all'esterno di Desktop virtuale Azure per testare i pacchetti per il collegamento di app. Le API che power app attach sono disponibili per Windows 11 Enterprise e Windows 10 Enterprise. Queste API possono essere usate all'esterno di Desktop virtuale Azure per i test, ma non esiste alcun piano di gestione per il collegamento dell'app o il collegamento di app MSIX all'esterno di Desktop virtuale Azure.
Per altre informazioni sul collegamento dell'app e sul collegamento di app MSIX, vedere Collegamento app e collegamento di app MSIX in Desktop virtuale Azure.
Prerequisiti
Prima di poter testare un pacchetto per seguire le istruzioni riportate in questo articolo, sono necessari gli elementi seguenti:
Un dispositivo che esegue Windows 11 Enterprise o Windows 10 Enterprise.
Un'applicazione espansa dal formato MSIX in un'immagine che è possibile usare con app attach. Informazioni su come creare un'immagine MSIX da usare con il collegamento di app in Desktop virtuale Azure.
Se si usa un'immagine CimFS, è necessario installare il modulo PowerShell CimDiskImage.
Un account utente con autorizzazione di amministratore locale per il dispositivo usato per testare il pacchetto MSIX.
Non è necessaria una distribuzione di Desktop virtuale Azure perché questo articolo descrive un processo per il test all'esterno di Desktop virtuale Azure.
Nota
supporto tecnico Microsoft non supporta il modulo PowerShell CimDiskImage. Se si verificano problemi, è necessario inviare una richiesta nel repository GitHub del modulo.
Phases
Per usare pacchetti MSIX all'esterno di Desktop virtuale Azure, è necessario eseguire quattro fasi distinte nell'ordine seguente:
- Fase
- Registrazione
- Annullamento registrazione
- Rimozione gestione temporanea
La gestione temporanea e la destaging sono operazioni a livello di computer, mentre la registrazione e la deregistrazione sono operazioni a livello di utente. I comandi da usare variano in base alla versione di PowerShell in uso e al fatto che le immagini del disco si trovino in formato CimFS, VHDX o VHD .
Nota
Tutti i pacchetti MSIX includono un certificato. È necessario assicurarsi che i certificati per i pacchetti MSIX siano considerati attendibili nell'ambiente in uso.
Preparare l'esecuzione di un pacchetto MSIX
Lo script di staging prepara il computer a ricevere il pacchetto MSIX e monta il pacchetto pertinente nel computer.
Selezionare la scheda pertinente per la versione di PowerShell in uso.
Per preparare i pacchetti usando PowerShell 6 o versione successiva, è necessario eseguire i comandi seguenti prima delle operazioni di gestione temporanea per portare le funzionalità del pacchetto Windows Runtime in PowerShell.
Aprire un prompt di PowerShell come amministratore.
Eseguire il comando seguente per scaricare e installare il pacchetto Windows Runtime. È necessario eseguire i comandi seguenti una sola volta per ogni computer.
#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
Eseguire quindi il comando seguente per rendere disponibili i componenti Windows Runtime 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
Preparare un pacchetto MSIX
Ora che il computer è stato preparato per preparare i pacchetti MSIX, è necessario montare l'immagine del disco, quindi completare la gestione temporanea del pacchetto MSIX.
Montare un'immagine del disco
Il processo di montaggio di un'immagine disco varia a seconda che si usi il formato CimFs, VHDX o VHD per l'immagine del disco. Selezionare la scheda pertinente per il formato in uso.
Per montare un'immagine del disco CimFS:
Nella stessa sessione di PowerShell eseguire il comando seguente:
$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
Mantenere la variabile
$deviceId
. Queste informazioni saranno necessarie più avanti in questo articolo.Al termine, passare a Completare la gestione temporanea di un'immagine del disco.
Completare la gestione temporanea di un'immagine del disco
Infine, è necessario eseguire i comandi seguenti per tutti i formati di immagine per completare la gestione temporanea dell'immagine del disco. Questo comando usa la $deviceId
variabile creata quando è stata montata l'immagine del disco nella sezione precedente.
Nella stessa sessione di PowerShell recuperare le informazioni sull'applicazione eseguendo i comandi seguenti:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryName
Ottenere il nome completo del pacchetto MSIX e archiviarlo in una variabile eseguendo i comandi seguenti. Questa variabile è necessaria per i passaggi successivi.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullName
Creare un URI assoluto per la cartella manifesto per l'API Gestione pacchetti eseguendo i comandi seguenti:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
Usare l'URI assoluto per preparare il pacchetto dell'applicazione eseguendo i comandi seguenti:
$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")
Monitorare lo stato di avanzamento della gestione temporanea per il pacchetto dell'applicazione eseguendo i comandi seguenti. Il tempo necessario per preparare il pacchetto dipende dalle dimensioni. La
Status
proprietà della$stagingResult
variabile saràRanToCompletion
al termine della gestione temporanea.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
Dopo aver eseguito lo staging del pacchetto MSI, è possibile registrare il pacchetto MSIX.
Registrare un pacchetto MSIX
Per registrare un pacchetto MSIX, eseguire i comandi seguenti nella stessa sessione di PowerShell. Questo comando usa la $msixPackageFullName
variabile creata in una sezione precedente.
$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register
Ora che il pacchetto MSIX è registrato, l'applicazione deve essere disponibile per l'uso nella sessione. È ora possibile aprire l'applicazione per il test e la risoluzione dei problemi. Al termine, è necessario annullare la registrazione e destagare il pacchetto MSIX.
Annullare la registrazione di un pacchetto MSIX
Dopo aver completato il pacchetto MSIX e averla rimossa, è prima necessario annullare la registrazione. Per annullare la registrazione del pacchetto MSIX, eseguire i comandi seguenti nella stessa sessione di PowerShell. Questi comandi ottengono di nuovo il parametro del DeviceId
disco e rimuovono il pacchetto usando la $msixPackageFullName
variabile creata in una sezione precedente.
$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
Destage un pacchetto MSIX
Infine, per destagare il pacchetto MSIX, è necessario smontare l'immagine del disco, eseguire il comando seguente nella stessa sessione di PowerShell per assicurarsi che il pacchetto non sia ancora registrato per alcun utente. Questo comando usa la $msixPackageFullName
variabile creata in una sezione precedente.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Smontare l'immagine dei dischi
Per completare il processo di destaging, è necessario smontare i dischi dal sistema. Il comando da usare dipende dal formato dell'immagine del disco. Selezionare la scheda pertinente per il formato in uso.
Per smontare un'immagine del disco CimFS, eseguire i comandi seguenti nella stessa sessione di PowerShell:
Dismount-CimDiskImage -DeviceId $deviceId
Dopo aver smontato i dischi, il pacchetto MSIX è stato rimosso in modo sicuro.
Configurare script di simulazione per l'agente di connessione all'app MSIX
Per aggiungere e rimuovere automaticamente pacchetti MSIX nel dispositivo, è possibile usare i comandi di PowerShell in questo articolo per creare script eseguiti all'avvio, all'accesso, alla disconnessione e all'arresto. Per altre informazioni, vedere Uso di script di avvio, arresto, accesso e disconnessione in Criteri di gruppo. È necessario assicurarsi che tutte le variabili necessarie per ogni fase siano disponibili in ogni script.
Si crea uno script per ogni fase:
- Lo script di avvio esegue il processo di fase .
- Lo script di accesso esegue il processo di registrazione .
- Lo script di disconnessione esegue il processo di annullamento della registrazione .
- Lo script di arresto esegue il processo di destage .
Nota
È possibile usare l'utilità di pianificazione per eseguire lo script di fase. Per eseguire lo script, impostare il trigger dell'attività su All'avvio del computer e abilitare Esegui con privilegi più elevati.
Usare pacchetti offline
Se si usano pacchetti nei dispositivi che non sono connessi a Internet, è necessario assicurarsi che le licenze del pacchetto siano installate nel dispositivo per eseguire correttamente l'app. Se il dispositivo è online, le licenze necessarie devono essere scaricate automaticamente.
Per installare i file di licenza, è necessario usare uno script di PowerShell che chiama la MDM_EnterpriseModernAppManagement_StoreLicenses02_01
classe nel provider bridge WMI.
Ecco come configurare una licenza per l'uso offline:
Scaricare il pacchetto, la licenza e i framework necessari dall'Microsoft Store per le aziende. Sono necessari sia il file di licenza codificato che quello non codificato. Per informazioni su come scaricare un'app con licenza offline, vedere Distribuire app offline.
Eseguire i comandi di PowerShell seguenti come amministratore. È possibile installare la licenza alla fine della fase di gestione temporanea. È necessario modificare le variabili seguenti:
$contentID
è il valore ContentID del file di licenza non codificato (.xml
). Il file di licenza può essere aperto in un editor di testo di propria scelta.$licenseBlob
è l'intera stringa per il BLOB di licenze nel file di licenza codificato (.bin
). Il file di licenza codificato può essere aperto in un editor di testo di propria scelta.$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 }
Script dimostrativi
È possibile trovare script dimostrativi per tutte e quattro le fasi del test dei pacchetti MSIX e della sintassi per informazioni su come usarli nel repository GitHub. Questi script funzionano con qualsiasi versione di PowerShell e qualsiasi formato di immagine del disco.
Passaggi successivi
Altre informazioni sul collegamento di app e sul collegamento di app MSIX in Desktop virtuale Azure:
- app attach e MSIX App Attach.
- Aggiungere e gestire app attach e applicazioni MSIX App Attach.