Sdílet prostřednictvím


Testování balíčků MSIX pro připojení aplikace

V tomto článku se dozvíte, jak připojit balíčky MSIX mimo Službu Azure Virtual Desktop, abyste mohli otestovat připojení aplikace. Rozhraní API power app attach jsou k dispozici pro Windows 11 Enterprise a Windows 10 Enterprise. Tato rozhraní API je možné použít k testování mimo službu Azure Virtual Desktop, ale pro připojení aplikace mimo Azure Virtual Desktop neexistuje žádná rovina správy.

Další informace o připojení aplikace najdete v tématu Připojení aplikace ve službě Azure Virtual Desktop.

Požadavky

Než budete moct balíček otestovat podle pokynů v tomto článku, potřebujete následující:

Nasazení služby Azure Virtual Desktop nepotřebujete, protože tento článek popisuje proces testování mimo Službu Azure Virtual Desktop.

Poznámka

podpora Microsoftu nepodporuje modul CimDiskImage PowerShellu, takže pokud narazíte na nějaké problémy, budete muset odeslat žádost do úložiště GitHub daného modulu.

Fází

Pokud chcete používat balíčky MSIX mimo Azure Virtual Desktop, musíte provést čtyři různé fáze v následujícím pořadí:

  1. Etapa
  2. Registrace
  3. Odhlásit
  4. Destage

Příprava a destagování jsou operace na úrovni počítače, zatímco registrace a zrušení registrace jsou operace na úrovni uživatele. Příkazy, které potřebujete použít, se liší podle toho, jakou verzi PowerShellu používáte a jestli jsou image disků ve formátu CimFS, VHDX nebo VHD .

Poznámka

Všechny balíčky MSIX obsahují certifikát. Zodpovídáte za to, aby certifikáty pro balíčky MSIX byly ve vašem prostředí důvěryhodné.

Příprava na přípravu balíčku MSIX

Přípravný skript připraví váš počítač na přijetí balíčku MSIX a připojí příslušný balíček k vašemu počítači.

Vyberte příslušnou kartu pro verzi PowerShellu, kterou používáte.

Pokud chcete balíčky připravit pomocí PowerShellu 6 nebo novějšího, musíte před přípravou operací spustit následující příkazy, abyste do PowerShellu přenesli možnosti balíčku prostředí Windows Runtime.

  1. Otevřete příkazový řádek PowerShellu jako správce.

  2. Spuštěním následujícího příkazu stáhněte a nainstalujte balíček prostředí Windows Runtime. Následující příkazy stačí spustit jenom jednou pro každý počítač.

    #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. Dále spuštěním následujícího příkazu zpřístupněte komponenty prostředí Windows Runtime v PowerShellu:

    #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
    

Příprava balíčku MSIX

Teď, když jste počítač připravili na přípravu balíčků MSIX, musíte připojit image disku a pak dokončit přípravu balíčku MSIX.

Připojení image disku

Postup připojení image disku se liší v závislosti na tom, jestli pro image disku používáte formát CimFs, VHDX nebo VHD . Vyberte příslušnou kartu pro formát, který používáte.

Připojení image disku CimFS:

  1. Ve stejné relaci PowerShellu spusťte následující příkaz:

    $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. Zachovejte proměnnou $deviceId. Tyto informace budete potřebovat dále v tomto článku.

  3. Až budete hotovi, pokračujte k dokončení přípravy image disku.

Dokončení přípravy image disku

Nakonec musíte spustit následující příkazy pro všechny formáty imagí, abyste dokončili přípravu image disku. Tento příkaz používá proměnnou $deviceId , kterou jste vytvořili při připojení image disku v předchozí části.

  1. Ve stejné relaci PowerShellu načtěte informace o aplikaci spuštěním následujících příkazů:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Spuštěním následujících příkazů získejte úplný název balíčku MSIX a uložte ho do proměnné. Tato proměnná je potřebná pro pozdější kroky.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Spuštěním následujících příkazů vytvořte absolutní identifikátor URI pro složku manifestu pro rozhraní API Správce balíčků:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Pomocí absolutního identifikátoru URI připravte balíček aplikace spuštěním následujících příkazů:

    $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. Spuštěním následujících příkazů můžete monitorovat průběh přípravy balíčku aplikace. Doba potřebná k vytvoření balíčku závisí na jeho velikosti. Vlastnost Status$stagingResult proměnné bude RanToCompletion po dokončení přípravy.

    $stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation))
    
    while ($stagingResult.Status -eq "WaitingForActivation") {
        Write-Output "Waiting for activation..."
        Start-Sleep -Seconds 5
    }
    
    Write-Output $stagingResult
    

Jakmile je balíček MSI připravený, můžete ho zaregistrovat.

Registrace balíčku MSIX

Pokud chcete zaregistrovat balíček MSIX, spusťte následující příkazy ve stejné relaci PowerShellu. Tento příkaz používá proměnnou $msixPackageFullName vytvořenou v předchozí části.

$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register

Teď, když je váš balíček MSIX zaregistrovaný, by vaše aplikace měla být k dispozici pro použití ve vaší relaci. Teď můžete aplikaci otevřít pro účely testování a řešení potíží. Jakmile budete hotovi, budete muset zrušit registraci a destage balíčku MSIX.

Zrušení registrace balíčku MSIX

Jakmile balíček MSIX dokončíte a budete ho chtít odebrat, musíte ho nejdřív zrušit. Pokud chcete zrušit registraci balíčku MSIX, spusťte následující příkazy ve stejné relaci PowerShellu. Tyto příkazy znovu získají parametr disku DeviceId a odeberou balíček pomocí $msixPackageFullName proměnné vytvořené v předchozí části.

$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 balíčku MSIX

Nakonec, pokud chcete balíček MSIX destage, musíte odpojit image disku, spusťte následující příkaz ve stejné relaci PowerShellu, abyste se ujistili, že balíček stále není zaregistrovaný pro žádného uživatele. Tento příkaz používá proměnnou $msixPackageFullName vytvořenou v předchozí části.

Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue

Odpojení image disků

Pokud chcete dokončit proces destagování, musíte disky odpojit od systému. Příkaz, který potřebujete použít, závisí na formátu image disku. Vyberte příslušnou kartu pro formát, který používáte.

Pokud chcete odpojit image disku CimFS, spusťte ve stejné relaci PowerShellu následující příkazy:

Dismount-CimDiskImage -DeviceId $deviceId

Po dokončení odpojení disků jste bezpečně odebrali balíček MSIX.

Nastavení simulačních skriptů pro agenta připojení aplikace

Pokud chcete do zařízení automaticky přidávat a odebírat balíčky MSIX, můžete pomocí příkazů PowerShellu v tomto článku vytvořit skripty, které se spustí při spuštění, přihlášení, odhlášení a vypnutí. Další informace najdete v tématu Použití spouštěcích, vypínání, přihlašování a odhlašovacích skriptů v Zásady skupiny. Musíte se ujistit, že všechny proměnné vyžadované pro každou fázi jsou k dispozici v každém skriptu.

Skript vytvoříte pro každou fázi:

  • Spouštěcí skript spustí proces fáze .
  • Přihlašovací skript spustí proces registrace .
  • Odhlašovací skript spustí proces zrušení registrace .
  • Skript vypnutí spustí proces destage .

Poznámka

Ke spuštění skriptu fáze můžete použít plánovač úloh. Pokud chcete skript spustit, nastavte trigger úlohy na Při spuštění počítače a povolte Spustit s nejvyššími oprávněními.

Použití balíčků offline

Pokud balíčky používáte na zařízeních, která nejsou připojená k internetu, musíte se ujistit, že jsou na vašem zařízení nainstalované licence balíčků, aby se aplikace úspěšně spustila. Pokud je vaše zařízení online, měly by se požadované licence stahovat automaticky.

Pokud chcete nainstalovat licenční soubory, musíte použít skript PowerShellu MDM_EnterpriseModernAppManagement_StoreLicenses02_01 , který volá třídu v poskytovateli přemostitu WMI.

Tady je postup, jak nastavit licenci pro offline použití:

  1. Stáhněte si balíček aplikace, licenci a požadované architektury z Microsoft Store pro firmy. Potřebujete kódované i nezakódované licenční soubory. Informace o stažení offline licencované aplikace najdete v tématu Distribuce offline aplikací.

  2. Jako správce spusťte následující příkazy PowerShellu. Licenci můžete nainstalovat na konci přípravné fáze. Musíte upravit následující proměnné:

    • $contentID je hodnota ContentID z nezakódovaného licenčního souboru (.xml). Licenční soubor můžete otevřít v textovém editoru podle svého výběru.

    • $licenseBlob je celý řetězec objektu blob licence v zakódovaném licenčním souboru (.bin). Kódovaný licenční soubor můžete otevřít v textovém editoru podle svého výběru.

      $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
      }
      

Ukázkové skripty

Ukázkové skripty pro všechny čtyři fáze testování balíčků MSIX a nápovědu k jejich použití najdete v našem úložišti GitHub. Tyto skripty pracují s libovolnou verzí PowerShellu a libovolným formátem image disku.

Další kroky

Další informace o připojení aplikace ve službě Azure Virtual Desktop: