Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak zainstalować pakiety MSIX poza usługą Azure Virtual Desktop, aby ułatwić testowanie pakietów na potrzeby dołączania aplikacji. Interfejsy API, które zasilają aplikację App Attach, są dostępne dla Windows 11 Enterprise i Windows 10 Enterprise. Te interfejsy API mogą być używane poza usługą Azure Virtual Desktop do testowania, jednak nie ma płaszczyzny zarządzania dla dołączania aplikacji poza usługą Azure Virtual Desktop.
Aby uzyskać więcej informacji na temat dołączania aplikacji, zobacz Dołączanie aplikacji w usłudze Azure Virtual Desktop.
Wymagania wstępne
Zanim będzie można przetestować pakiet, aby postępować zgodnie z instrukcjami podanymi w tym artykule, potrzebne są następujące elementy:
Urządzenie z systemem Windows 11 Enterprise lub Windows 10 Enterprise.
Aplikacja rozwinięta z formatu MSIX do obrazu, którego można użyć z dołączaniem aplikacji. Dowiedz się, jak utworzyć obraz MSIX do użycia z dołączaniem aplikacji w usłudze Azure Virtual Desktop.
Jeśli używasz obrazu CimFS, musisz zainstalować moduł CimDiskImage programu PowerShell.
Konto użytkownika, które ma uprawnienia administratora lokalnego na urządzeniu używanym do testowania pakietu MSIX.
Nie potrzebujesz wdrożenia usługi Azure Virtual Desktop, ponieważ w tym artykule opisano proces testowania poza usługą Azure Virtual Desktop.
Uwaga
pomoc techniczna firmy Microsoft nie obsługuje modułu CimDiskImage programu PowerShell, więc jeśli napotkasz jakiekolwiek problemy, musisz przesłać żądanie w repozytorium GitHub modułu.
Fazy
Aby korzystać z pakietów MSIX poza usługą Azure Virtual Desktop, istnieją cztery odrębne fazy, które należy wykonać w następującej kolejności:
- Scena
- Zarejestruj
- Wyrejestrować
- Destage
Przemieszczanie i usuwanie tagów to operacje na poziomie maszyny, natomiast rejestrowanie i wyrejestrowywanie to operacje na poziomie użytkownika. Polecenia, których należy użyć, różnią się w zależności od używanej wersji programu PowerShell oraz tego, czy obrazy dysków są w formacie CimFS, VHDX czy VHD .
Uwaga
Wszystkie pakiety MSIX zawierają certyfikat. Odpowiadasz za upewnienie się, że certyfikaty dla pakietów MSIX są zaufane w twoim środowisku.
Przygotowanie do przygotowania pakietu MSIX
Skrypt przejściowy przygotowuje maszynę do odebrania pakietu MSIX i instalowania odpowiedniego pakietu na maszynie.
Wybierz odpowiednią kartę dla używanej wersji programu PowerShell.
Aby przygotować pakiety przy użyciu programu PowerShell 6 lub nowszego, należy uruchomić następujące polecenia przed operacjami przejściowymi, aby przenieść możliwości pakietu środowisko wykonawcze systemu Windows do programu PowerShell.
Otwórz wiersz polecenia programu PowerShell jako administrator.
Uruchom następujące polecenie, aby pobrać i zainstalować pakiet środowisko wykonawcze systemu Windows. Wystarczy uruchomić następujące polecenia tylko raz na maszynę.
#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-PackageNastępnie uruchom następujące polecenie, aby udostępnić składniki środowisko wykonawcze systemu Windows w programie 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
Przygotowywanie pakietu MSIX
Po przygotowaniu maszyny do przygotowania pakietów MSIX należy zainstalować obraz dysku, a następnie zakończyć przemieszczanie pakietu MSIX.
Instalowanie obrazu dysku
Proces instalowania obrazu dysku różni się w zależności od tego, czy używasz formatu CimFs, VHDX czy VHD dla obrazu dysku. Wybierz odpowiednią kartę dla używanego formatu.
Aby zainstalować obraz dysku CimFS:
W tej samej sesji programu PowerShell uruchom następujące polecenie:
$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 $deviceIdZachowaj zmienną
$deviceId. Te informacje będą potrzebne w dalszej części tego artykułu.Po zakończeniu przejdź do pozycji Zakończ przemieszczanie obrazu dysku.
Zakończenie przemieszczania obrazu dysku
Na koniec należy uruchomić następujące polecenia dla wszystkich formatów obrazów, aby ukończyć przemieszczanie obrazu dysku. To polecenie używa zmiennej utworzonej $deviceId podczas instalowania obrazu dysku w poprzedniej sekcji.
W tej samej sesji programu PowerShell pobierz informacje o aplikacji, uruchamiając następujące polecenia:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryNamePobierz pełną nazwę pakietu MSIX i zapisz go w zmiennej, uruchamiając następujące polecenia. Ta zmienna jest potrzebna do późniejszych kroków.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullNameUtwórz bezwzględny identyfikator URI dla folderu manifestu dla interfejsu API menedżera pakietów, uruchamiając następujące polecenia:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUriUżyj bezwzględnego identyfikatora URI, aby przygotować pakiet aplikacji, uruchamiając następujące polecenia:
$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")Monitoruj postęp przejściowy pakietu aplikacji, uruchamiając następujące polecenia. Czas potrzebny na przygotowanie pakietu zależy od jego rozmiaru. Właściwość
Statuszmiennej$stagingResultbędzieRanToCompletionpo zakończeniu przemieszczania.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
Po przygotowaniu pakietu MSI możesz zarejestrować pakiet MSIX.
Rejestrowanie pakietu MSIX
Aby zarejestrować pakiet MSIX, uruchom następujące polecenia w tej samej sesji programu PowerShell. To polecenie używa zmiennej $msixPackageFullName utworzonej w poprzedniej sekcji.
$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register
Po zarejestrowaniu pakietu MSIX aplikacja powinna być dostępna do użycia w sesji. Teraz możesz otworzyć aplikację do testowania i rozwiązywania problemów. Po zakończeniu należy wyrejestrować i rozesłać pakiet MSIX.
Wyrejestrowyowanie pakietu MSIX
Po zakończeniu pracy z pakietem MSIX i przygotowaniu go do usunięcia należy najpierw wyrejestrować. Aby wyrejestrować pakiet MSIX, uruchom następujące polecenia w tej samej sesji programu PowerShell. Te polecenia ponownie pobierają parametr dysku DeviceId i usuwają pakiet przy użyciu zmiennej utworzonej $msixPackageFullName w poprzedniej sekcji.
$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 an MSIX package (Destage an MSIX package)
Na koniec, aby odinstalować pakiet MSIX, należy odinstalować obraz dysku, uruchom następujące polecenie w tej samej sesji programu PowerShell, aby upewnić się, że pakiet nie jest jeszcze zarejestrowany dla żadnego użytkownika. To polecenie używa zmiennej $msixPackageFullName utworzonej w poprzedniej sekcji.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Odinstaluj obraz dysków
Aby zakończyć proces usuwania tagów, należy odinstalować dyski z systemu. Polecenie, którego należy użyć, zależy od formatu obrazu dysku. Wybierz odpowiednią kartę dla używanego formatu.
Aby odinstalować obraz dysku CimFS, uruchom następujące polecenia w tej samej sesji programu PowerShell:
Dismount-CimDiskImage -DeviceId $deviceId
Po zakończeniu odinstalowywania dysków pakiet MSIX został bezpiecznie usunięty.
Konfigurowanie skryptów symulacji dla agenta dołączania aplikacji
Jeśli chcesz automatycznie dodawać i usuwać pakiety MSIX do urządzenia, możesz użyć poleceń programu PowerShell w tym artykule, aby utworzyć skrypty uruchamiane podczas uruchamiania, logowania, logowania i zamykania. Aby dowiedzieć się więcej, zobacz Używanie skryptów uruchamiania, zamykania, logowania i wylogowywanie w zasady grupy. Musisz upewnić się, że wszystkie zmienne wymagane dla każdej fazy są dostępne w każdym skryptze.
Tworzysz skrypt dla każdej fazy:
- Skrypt uruchamiania uruchamia proces etapowy .
- Skrypt logowania uruchamia proces rejestrowania .
- Skrypt wylogowywania uruchamia proces wyrejestrowywania .
- Skrypt zamykania uruchamia proces destage .
Uwaga
Za pomocą harmonogramu zadań można uruchomić skrypt etapu. Aby uruchomić skrypt, ustaw wyzwalacz zadania na wartość Po uruchomieniu komputera i włączeniuopcji Uruchom z najwyższymi uprawnieniami.
Używanie pakietów w trybie offline
Jeśli używasz pakietów na urządzeniach, które nie są połączone z Internetem, musisz upewnić się, że licencje pakietów są zainstalowane na urządzeniu, aby pomyślnie uruchomić aplikację. Jeśli urządzenie jest w trybie online, wymagane licencje powinny zostać pobrane automatycznie.
Aby zainstalować pliki licencji, należy użyć skryptu programu PowerShell, który wywołuje klasę MDM_EnterpriseModernAppManagement_StoreLicenses02_01 w dostawcy mostka WMI.
Poniżej przedstawiono sposób konfigurowania licencji do użytku w trybie offline:
Pobierz pakiet aplikacji, licencję i wymagane struktury z Microsoft Store dla Firm. Potrzebne są zarówno zakodowane, jak i niekodowane pliki licencji. Aby dowiedzieć się, jak pobrać aplikację licencjonowaną w trybie offline, zobacz Dystrybucja aplikacji offline.
Uruchom następujące polecenia programu PowerShell jako administrator. Licencję można zainstalować na końcu fazy przejściowej. Musisz edytować następujące zmienne:
$contentIDto wartość ContentID z niekodowany plik licencji (.xml). Plik licencji można otworzyć w wybranym edytorze tekstów.$licenseBlobto cały ciąg obiektu blob licencji w pliku licencji kodowanej (.bin). Zakodowany plik licencji można otworzyć w wybranym edytorze tekstów.$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 }
Skrypty demonstracyjnych
Skrypty demonstracyjne dla wszystkich czterech etapów testowania pakietów MSIX i pomoc w składni dotyczącej sposobu ich używania w naszym repozytorium GitHub. Te skrypty działają z dowolną wersją programu PowerShell i dowolnym formatem obrazu dysku.
Następne kroki
Dowiedz się więcej o dołączaniu aplikacji w usłudze Azure Virtual Desktop: