Testowanie pakietów MSIX pod kątem dołączania aplikacji
W tym artykule pokazano, jak zainstalować pakiety MSIX poza usługą Azure Virtual Desktop, aby ułatwić testowanie pakietów pod kątem dołączania aplikacji. Interfejsy API dołączane przez aplikację power app są dostępne dla systemów 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 dołączania aplikacji lub dołączania aplikacji MSIX poza usługą Azure Virtual Desktop.
Aby uzyskać więcej informacji na temat dołączania aplikacji i dołączania aplikacji MSIX, zobacz dołączanie aplikacji i dołączanie aplikacji MSIX w usłudze Azure Virtual Desktop.
Wymagania wstępne
Aby można było przetestować pakiet, aby postępować zgodnie z instrukcjami w tym artykule, potrzebne są następujące elementy:
Urządzenie z systemem Windows 11 Enterprise lub Windows 10 Enterprise.
Aplikacja rozszerzona z formatu MSIX na obraz, którego można używać 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 z uprawnieniami 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 wystąpią 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:
- Etap
- Zarejestruj
- Wyrejestrować
- Destage (Destage)
Przemieszczanie i destagowanie to operacje na poziomie maszyny, podczas gdy rejestrowanie i wyrejestrowanie to operacje na poziomie użytkownika. Polecenia, których potrzebujesz, różnią się w zależności od używanej wersji programu PowerShell oraz tego, czy obrazy dysków znajdują się w formacie CimFS, VHDX lub VHD .
Uwaga
Wszystkie pakiety MSIX zawierają certyfikat. Odpowiadasz za upewnienie się, że certyfikaty dla pakietów MSIX są zaufane w danym środowisku.
Przygotowanie do przygotowania do przygotowania pakietu MSIX
Skrypt przejściowy przygotowuje maszynę do odbierania pakietu MSIX i instaluje odpowiedni pakiet 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 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-Package
Nastę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
Teraz, gdy maszyna została przygotowana do przygotowania pakietów MSIX, musisz 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 lub 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 $deviceId
Zachowaj zmienną
$deviceId
. Te informacje będą potrzebne w dalszej części tego artykułu.Po zakończeniu przejdź do sekcji Zakończ przemieszczanie obrazu dysku.
Koń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 instalowanego 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.DirectoryName
Pobierz pełną nazwę pakietu MSIX i zapisz go w zmiennej, uruchamiając następujące polecenia. Ta zmienna jest wymagana do wykonania późniejszych kroków.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullName
Utwórz bezwzględny identyfikator URI dla folderu manifestu dla interfejsu API Menedżer pakietów, uruchamiając następujące polecenia:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
Uż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ść
Status
zmiennej$stagingResult
będzie miećRanToCompletion
miejsce po 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żna 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 zdejmować pakiet MSIX.
Wyrejestrowanie pakietu MSIX
Gdy skończysz z pakietem MSIX i wszystko będzie gotowe do jego usunięcia, najpierw musisz go 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 $msixPackageFullName
zmiennej utworzonej 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) (Destage an MSIX
Na koniec, aby usunąć pakiet MSIX, należy odinstalować obraz dysku, uruchomić następujące polecenie w tej samej sesji programu PowerShell, aby upewnić się, że pakiet nie jest nadal zarejestrowany dla żadnego użytkownika. To polecenie używa zmiennej $msixPackageFullName
utworzonej w poprzedniej sekcji.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Odinstalowywanie obrazu dysków
Aby zakończyć proces usuwania, 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 odinstalowania dysków bezpiecznie usunięto pakiet MSIX.
Konfigurowanie skryptów symulacji dla agenta dołączania aplikacji MSIX
Jeśli chcesz automatycznie dodać i usunąć pakiety MSIX na urządzeniu, możesz użyć poleceń programu PowerShell w tym artykule, aby utworzyć skrypty uruchamiane podczas uruchamiania, logowania, wylogowania i zamykania. Aby dowiedzieć się więcej, zobacz Korzystanie ze skryptów uruchamiania, zamykania, logowania i wylogowywanie w zasadach grupy. Należy się upewnić, że wszystkie zmienne wymagane dla każdej fazy są dostępne w każdym skrypecie.
Utworzysz skrypt dla każdej fazy:
- Skrypt uruchamiania uruchamia proces etapu.
- Skrypt logowania uruchamia proces rejestracji .
- Skrypt wylogowania uruchamia proces wyrejestrowania .
- Skrypt zamykania uruchamia proces destage .
Uwaga
Aby uruchomić skrypt etapu, możesz użyć harmonogramu zadań. Aby uruchomić skrypt, ustaw wyzwalacz zadania na Po uruchomieniu komputera i włącz uruchamianie 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, upewnij 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 na potrzeby korzystania z trybu offline:
Pobierz pakiet aplikacji, licencję i wymagane struktury z Microsoft Store dla Firm. Potrzebne są zarówno zakodowane, jak i niezakodowane pliki licencji. Aby dowiedzieć się, jak pobrać aplikację licencjonowana w trybie offline, zobacz Dystrybucja aplikacji w trybie 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:
$contentID
to wartość ContentID z pliku licencji niekodowanego (.xml
). Możesz otworzyć plik licencji w wybranym edytorze tekstów.$licenseBlob
to cały ciąg obiektu blob licencji w zakodowanym pliku licencji (.bin
). Możesz otworzyć zakodowany plik licencji 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 demonstracyjne
Możesz znaleźć przykładowe skrypty dla wszystkich czterech etapów testowania pakietów MSIX i pomocy składni, aby dowiedzieć się, jak ich używać 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 i dołączaniu aplikacji MSIX w usłudze Azure Virtual Desktop:
- dołączanie aplikacji i dołączanie aplikacji MSIX.
- Dodawanie aplikacji i dołączanie aplikacji MSIX oraz zarządzanie nimi.