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, ale nie ma płaszczyzny zarządzania dołączania aplikacji MSIX lub dołączania aplikacji poza usługą Azure Virtual Desktop.

Aby uzyskać więcej informacji na temat dołączania aplikacji MSIX i dołączania aplikacji, zobacz Dołączanie aplikacji MSIX i dołączanie aplikacji 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:

  1. Etap
  2. Zarejestruj
  3. Wyrejestrować
  4. 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.

  1. Otwórz wiersz polecenia programu PowerShell jako administrator.

  2. 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
    
  3. 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:

  1. 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
    
  2. Zachowaj zmienną $deviceId. Te informacje będą potrzebne w dalszej części tego artykułu.

  3. 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.

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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")
    
  5. 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 usuwa pakiet przy użyciu zmiennej $msixPackageFullName 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 z Microsoft Store dla Firm lub Microsoft Store dla Instytucji Edukacyjnych na urządzeniach, które nie są połączone z Internetem, musisz pobrać licencje pakietów ze Sklepu Microsoft i zainstalować je na urządzeniu, aby pomyślnie uruchomić aplikację. Jeśli urządzenie jest w trybie online i może połączyć się z Microsoft Store dla Firm, wymagane licencje powinny zostać pobrane automatycznie, ale jeśli jesteś w trybie offline, musisz ręcznie skonfigurować licencje.

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:

  1. 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.

  2. 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 MSIX i dołączaniu aplikacji w usłudze Azure Virtual Desktop: