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 Azure Virtual Desktop, abyste mohli balíčky otestovat pro připojení aplikace. Rozhraní API, která připojují power app, jsou dostupná pro Windows 11 Enterprise a Windows 10 Enterprise. Tato rozhraní API je možné použít mimo Azure Virtual Desktop k testování, ale mimo Azure Virtual Desktop neexistuje žádná rovina správy pro připojení aplikace nebo připojení aplikace MSIX mimo Azure Virtual Desktop.

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

Požadavky

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

  • Zařízení s Windows 11 Enterprise nebo Windows 10 Enterprise.

  • Aplikace, kterou jste rozšířili z formátu MSIX na obrázek, který můžete použít s připojením aplikace. Zjistěte, jak vytvořit image MSIX pro použití s připojením aplikace ve službě Azure Virtual Desktop.

  • Pokud používáte image CimFS, musíte nainstalovat modul CimDiskImage PowerShellu.

  • Uživatelský účet s oprávněním místního správce na zařízení, které používáte k otestování balíčku MSIX.

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

Poznámka:

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

Fáze

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

  1. Fáze
  2. Registrovat
  3. Odhlásit
  4. Destage

Příprava a destagování jsou operace na úrovni počítače a 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 vaše diskové image ve formátu CimFS, VHDX nebo VHD .

Poznámka:

Všechny balíčky MSIX obsahují certifikát. Zodpovídáte za zajištění důvěryhodnosti certifikátů pro balíčky MSIX ve vašem prostředí.

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

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

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

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

  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. Pro každý počítač stačí spustit jenom následující příkazy.

    #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. Potom 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 připravili počítač na fázi 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. Ponechte proměnnou $deviceId. Tyto informace budete potřebovat dále v tomto článku.

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

Dokončení přípravy image disku

Nakonec je potřeba 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. Získejte úplný název balíčku MSIX a uložte ho do proměnné spuštěním následujících příkazů. Tato proměnná je nutná 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í SPRÁVCE BALÍČKŮ API:

    $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ů monitorujte průběh přípravy balíčku aplikace. Doba potřebnou ke zfázové fázi 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 zaregistrovat balíček MSIX.

Registrace balíčku MSIX

Pokud chcete zaregistrovat balíček MSIX, spusťte ve stejné relaci PowerShellu následující příkazy. Tento příkaz používá proměnnou vytvořenou $msixPackageFullName 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íček MSIX.

Zrušení registrace balíčku MSIX

Jakmile budete s balíčkem MSIX hotovi a budete připraveni ho odebrat, musíte ho nejdřív zrušit. Pokud chcete zrušit registraci balíčku MSIX, spusťte ve stejné relaci PowerShellu následující příkazy. 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íček MSIX

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

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

Odpojení image disků

Pokud chcete dokončit proces destagingu, 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 odpojení disků jste bezpečně odebrali balíček MSIX.

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

Pokud chcete do zařízení přidat a odebrat balíčky MSIX automaticky, můžete pomocí příkazů PowerShellu v tomto článku vytvořit skripty, které se spouštějí při spuštění, přihlášení, odhlášení a vypnutí. Další informace najdete v tématu Použití skriptů pro spuštění, vypnutí, přihlášení a odhlášení v zásadách skupiny. Musíte se ujistit, že všechny proměnné vyžadované pro každou fázi jsou v každém skriptu dostupné.

Pro každou fázi vytvoříte skript:

  • Spouštěcí skript spustí proces fáze .
  • Přihlašovací skript spustí proces registrace .
  • Skript pro odhlášení 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 spustit skript, 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 používáte balíčky z Microsoft Store pro firmy nebo Microsoft Store pro vzdělávání na zařízeních, která nejsou připojená k internetu, musíte získat licence balíčků z Microsoft Storu a nainstalovat je do zařízení, aby se aplikace úspěšně spustila. Pokud je vaše zařízení online a může se připojit k Microsoft Store pro firmy, měly by se požadované licence stahovat automaticky, ale pokud jste offline, musíte licence nastavit ručně.

K instalaci licenčních souborů musíte použít skript PowerShellu, který volá MDM_EnterpriseModernAppManagement_StoreLicenses02_01 třídu ve zprostředkovateli mostu WMI.

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

  1. Stáhněte balíček aplikace, licenci a požadované architektury z Microsoft Store pro firmy. Potřebujete kódované i nekódované licenční soubory. Informace o tom, jak stáhnout offline licencovanou aplikaci, 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 nekó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 vašeho 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 ke syntaxi najdete v našem úložišti GitHub. Tyto skripty fungují s libovolnou verzí PowerShellu a libovolným formátem image disku.

Další kroky

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