Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie MSIX-Pakete außerhalb von Azure Virtual Desktop einbinden, um Ihre Pakete für App Attach zu testen. Die APIs, mit denen App Attach verwendet wird, sind für Windows 11 Enterprise und Windows 10 Enterprise verfügbar. Diese APIs können außerhalb von Azure Virtual Desktop zu Testzwecken verwendet werden, es gibt jedoch keine Verwaltungsebene für App Attach außerhalb von Azure Virtual Desktop.
Weitere Informationen zu App Attach finden Sie unter App Attach in Azure Virtual Desktop.
Voraussetzungen
Bevor Sie ein Paket testen können, um die Anweisungen in diesem Artikel zu befolgen, benötigen Sie Folgendes:
Ein Gerät, auf dem Windows 11 Enterprise oder Windows 10 Enterprise ausgeführt wird.
Eine Anwendung, die Sie vom MSIX-Format in ein Bild erweitert haben, das Sie mit App Attach verwenden können. Erfahren Sie, wie Sie ein MSIX-Image für die Verwendung mit App Attach in Azure Virtual Desktop erstellen.
Wenn Sie ein CimFS-Image verwenden, müssen Sie das CimDiskImage-PowerShell-Modul installieren.
Ein Benutzerkonto, das über lokale Administratorberechtigungen auf dem Gerät verfügt, das Sie zum Testen des MSIX-Pakets verwenden.
Sie benötigen keine Azure Virtual Desktop-Bereitstellung, da in diesem Artikel ein Testprozess außerhalb von Azure Virtual Desktop beschrieben wird.
Hinweis
Microsoft-Support unterstützt das CimDiskImage-PowerShell-Modul nicht. Wenn also Probleme auftreten, müssen Sie eine Anforderung im GitHub-Repository des Moduls übermitteln.
Phasen
Um MSIX-Pakete außerhalb von Azure Virtual Desktop zu verwenden, müssen Sie vier unterschiedliche Phasen in der folgenden Reihenfolge ausführen:
- Phase
- Registrieren
- Registrierung aufheben
- Bereitstellung aufheben
Staging und Destaging sind Vorgänge auf Computerebene, während registrierung und deregistering vorgänge auf Benutzerebene sind. Die befehle, die Sie verwenden müssen, variieren je nachdem, welche Version von PowerShell Sie verwenden und ob Ihre Datenträgerimages im CimFS-, VHDX - oder VHD-Format vorliegen.
Hinweis
Alle MSIX-Pakete enthalten ein Zertifikat. Sie sind dafür verantwortlich, sicherzustellen, dass die Zertifikate für MSIX-Pakete in Ihrer Umgebung vertrauenswürdig sind.
Vorbereiten der Bereitstellung eines MSIX-Pakets
Das Stagingskript bereitet Ihren Computer auf den Empfang des MSIX-Pakets vor und bindet das entsprechende Paket auf Ihrem Computer ein.
Wählen Sie die relevante Registerkarte für die version von PowerShell aus, die Sie verwenden.
Um Pakete mit PowerShell 6 oder höher zu stagingen, müssen Sie die folgenden Befehle vor den Stagingvorgängen ausführen, um die Funktionen des Windows-Runtime Pakets in PowerShell zu übertragen.
Öffnen Sie eine PowerShell-Eingabeaufforderung als Administrator.
Führen Sie den folgenden Befehl aus, um das Windows-Runtime-Paket herunterzuladen und zu installieren. Sie müssen die folgenden Befehle nur einmal pro Computer ausführen.
#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-PackageFühren Sie als Nächstes den folgenden Befehl aus, um die Windows-Runtime Komponenten in PowerShell verfügbar zu machen:
#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
Bereitstellen eines MSIX-Pakets
Nachdem Sie Ihren Computer für die Bereitstellung von MSIX-Paketen vorbereitet haben, müssen Sie Ihr Datenträgerimage einbinden und dann das Staging Ihres MSIX-Pakets abschließen.
Einbinden eines Datenträgerimages
Der Prozess zum Einbinden eines Datenträgerimages hängt davon ab, ob Sie das CimFs-, VHDX- oder VHD-Format für Ihr Datenträgerimage verwenden. Wählen Sie die relevante Registerkarte für das verwendete Format aus.
So binden Sie ein CimFS-Datenträgerimage ein:
Führen Sie in derselben PowerShell-Sitzung den folgenden Befehl aus:
$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 $deviceIdBehalten Sie die Variable
$deviceIdbei. Sie benötigen diese Informationen weiter unten in diesem Artikel.Wenn Sie fertig sind, fahren Sie mit Fertigstellen des Stagings eines Datenträgerimages fort.
Beenden des Stagings eines Datenträgerimages
Abschließend müssen Sie die folgenden Befehle für alle Imageformate ausführen, um das Staging des Datenträgerimages abzuschließen. Dieser Befehl verwendet die Variable, die $deviceId Sie beim Einbinden Ihres Datenträgerimages im vorherigen Abschnitt erstellt haben.
Rufen Sie in derselben PowerShell-Sitzung die Anwendungsinformationen ab, indem Sie die folgenden Befehle ausführen:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryNameRufen Sie den vollständigen Namen des MSIX-Pakets ab, und speichern Sie es in einer Variablen, indem Sie die folgenden Befehle ausführen. Diese Variable wird für spätere Schritte benötigt.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullNameErstellen Sie einen absoluten URI für den Manifestordner für die Paket-Manager-API, indem Sie die folgenden Befehle ausführen:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUriVerwenden Sie den absoluten URI, um das Anwendungspaket zu stagen, indem Sie die folgenden Befehle ausführen:
$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")Überwachen Sie den Stagingstatus für das Anwendungspaket, indem Sie die folgenden Befehle ausführen. Die Zeit, die zum Staging des Pakets benötigt wird, hängt von seiner Größe ab. Die
Status-Eigenschaft der$stagingResultVariablen istRanToCompletion, wenn die Stagingphase abgeschlossen ist.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
Sobald Ihr MSI-Paket bereitgestellt wurde, können Sie Ihr MSIX-Paket registrieren.
Registrieren eines MSIX-Pakets
Führen Sie zum Registrieren eines MSIX-Pakets die folgenden Befehle in derselben PowerShell-Sitzung aus. Dieser Befehl verwendet die variable, die $msixPackageFullName in einem vorherigen Abschnitt erstellt wurde.
$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register
Nachdem Ihr MSIX-Paket registriert wurde, sollte Ihre Anwendung für die Verwendung in Ihrer Sitzung verfügbar sein. Sie können die Anwendung jetzt zu Test- und Problembehandlungszwecken öffnen. Sobald Sie fertig sind, müssen Sie die Registrierung ihres MSIX-Pakets aufheben und desentstellen.
Aufheben der Registrierung eines MSIX-Pakets
Sobald Sie mit dem MsIX-Paket fertig sind und bereit sind, es zu entfernen, müssen Sie die Registrierung zunächst aufheben. Führen Sie die folgenden Befehle in derselben PowerShell-Sitzung aus, um die Registrierung des MSIX-Pakets aufzuheben. Diese Befehle rufen den Parameter des Datenträgers DeviceId erneut ab und entfernen das Paket mithilfe der variablen, die $msixPackageFullName in einem vorherigen Abschnitt erstellt wurde.
$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
Bereitstellen eines MSIX-Pakets
Um schließlich das MSIX-Paket zu entpacken, müssen Sie die Bereitstellung Ihres Datenträgerimages aufheben, indem Sie den folgenden Befehl in derselben PowerShell-Sitzung ausführen, um sicherzustellen, dass das Paket noch nicht für einen Benutzer registriert ist. Dieser Befehl verwendet die variable, die $msixPackageFullName in einem vorherigen Abschnitt erstellt wurde.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Aufheben der Bereitstellung des Datenträgerimages
Um den Destagingvorgang abzuschließen, müssen Sie die Bereitstellung der Datenträger aus dem System aufheben. Der Befehl, den Sie verwenden müssen, hängt vom Format Ihres Datenträgerimages ab. Wählen Sie die relevante Registerkarte für das verwendete Format aus.
Führen Sie die folgenden Befehle in derselben PowerShell-Sitzung aus, um die Bereitstellung eines CimFS-Datenträgerimages auf heben:
Dismount-CimDiskImage -DeviceId $deviceId
Nachdem Sie die Bereitstellung Ihrer Datenträger aufgehoben haben, haben Sie Ihr MSIX-Paket sicher entfernt.
Einrichten von Simulationsskripts für den App Attach-Agent
Wenn Sie MSIX-Pakete automatisch zu Ihrem Gerät hinzufügen und entfernen möchten, können Sie die PowerShell-Befehle in diesem Artikel verwenden, um Skripts zu erstellen, die beim Starten, Anmelden, Abmelden und Herunterfahren ausgeführt werden. Weitere Informationen finden Sie unter Verwenden von Start-, Herunterfahren-, Anmelde- und Abmeldeskripts in Gruppenrichtlinie. Sie müssen sicherstellen, dass alle variablen, die für jede Phase erforderlich sind, in jedem Skript verfügbar sind.
Sie erstellen ein Skript für jede Phase:
- Das Startskript führt den Phasenprozess aus.
- Das Anmeldeskript führt den Registrierungsprozess aus.
- Das Abmeldungsskript führt den Registrierungsprozess aus.
- Das Skript zum Herunterfahren führt den Destageprozess aus.
Hinweis
Sie können den Aufgabenplaner verwenden, um das Phasenskript auszuführen. Legen Sie zum Ausführen des Skripts den Tasktrigger auf Beim Starten des Computers fest, und aktivieren Sie Ausführen mit den höchsten Berechtigungen.
Offline verwenden von Paketen
Wenn Sie Pakete auf Geräten verwenden, die nicht mit dem Internet verbunden sind, müssen Sie sicherstellen, dass die Paketlizenzen auf Ihrem Gerät installiert sind, um die App erfolgreich ausführen zu können. Wenn Ihr Gerät online ist, sollten die erforderlichen Lizenzen automatisch heruntergeladen werden.
Zum Installieren der Lizenzdateien müssen Sie ein PowerShell-Skript verwenden, das die MDM_EnterpriseModernAppManagement_StoreLicenses02_01 -Klasse im WMI-Bridge-Anbieter aufruft.
So richten Sie eine Lizenz für die Offlineverwendung ein:
Laden Sie das App-Paket, die Lizenz und die erforderlichen Frameworks aus dem Microsoft Store für Unternehmen herunter. Sie benötigen sowohl die codierten als auch die nicht codierten Lizenzdateien. Informationen zum Herunterladen einer offline lizenzierten App finden Sie unter Verteilen von Offline-Apps.
Führen Sie die folgenden PowerShell-Befehle als Administrator aus. Sie können die Lizenz am Ende der Stagingphase installieren. Sie müssen die folgenden Variablen bearbeiten:
$contentIDist der ContentID-Wert aus der nicht codierten Lizenzdatei (.xml). Sie können die Lizenzdatei in einem Text-Editor Ihrer Wahl öffnen.$licenseBlobist die gesamte Zeichenfolge für das Lizenzblob in der codierten Lizenzdatei (.bin). Sie können die codierte Lizenzdatei in einem Text-Editor Ihrer Wahl öffnen.$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 }
Demonstrationsskripts
Demoskripts für alle vier Phasen des Testens von MSIX-Paketen und Syntaxhilfe für deren Verwendung finden Sie in unserem GitHub-Repository. Diese Skripts können mit jeder Version von PowerShell und einem beliebigen Datenträgerimageformat verwendet werden.
Nächste Schritte
Erfahren Sie mehr über App Attach in Azure Virtual Desktop: