Testování a řešení potíží s balíčky MSIX pomocí připojení aplikace MSIX
V tomto článku se dozvíte, jak pomocí aplikace MSIX připojit balíčky MSIX mimo Azure Virtual Desktop pro účely testování a řešení potíží.
Pokud chcete použít připojení aplikace MSIX s Azure Virtual Desktopem, můžete k přidání a publikování aplikací použít Azure Portal nebo Azure PowerShell .
Předpoklady
Než budete moct pomocí připojení aplikace MSIX postupovat podle pokynů v tomto článku, budete potřebovat následující věci:
Klient Windows 10 nebo 11.
Aplikace, kterou jste rozšířili z formátu MSIX do formátu připojení aplikace. Informace o rozšíření aplikace MSIX najdete v tématu Použití nástroje MSIXMGR.
Pokud používáte image CimFS, budete si muset před zahájením práce nainstalovat následující modul:
Install-Module CimDiskImage Import-Module CimDiskImage
Tyto pokyny nevyžadují nasazení služby Azure Virtual Desktop, protože popisují proces testování mimo Azure Virtual Desktop.
Poznámka:
podpora Microsoftu tento modul image disku CimFS v současné době nepodporuje, takže pokud narazíte na nějaké problémy, budete muset odeslat žádost do úložiště GitHub modulu.
Fáze připojení aplikace MSIX
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í, jinak to nebude fungovat:
- Fáze
- Registrovat
- Zrušit registraci
- Destage
Příprava a destagování jsou operace na úrovni počítače a registrace jsou operace na úrovni uživatele. Příkazy, které budete potřebovat použít, se budou lišit v závislosti na tom, jakou verzi PowerShellu používáte a jestli jsou vaše image disků ve formátu CimFS nebo VHD(X).
Poznámka:
Všechny balíčky aplikací MSIX obsahují certifikát. Zodpovídáte za zajištění důvěryhodnosti certifikátů pro aplikace MSIX ve vašem prostředí.
Příprava 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. Následující příkazy budete muset spustit jenom jednou na počítač.
Pokud ale používáte image ve formátu CimFS nebo verzi PowerShellu větší než 5.1, pokyny budou vypadat trochu jinak. Novější verze PowerShellu jsou více platforem, což znamená, že části aplikací pro Windows jsou rozdělené do vlastního balíčku označovaného jako prostředí Windows Runtime. K instalaci balíčku s více platformami PowerShellu budete muset použít mírně odlišnou verzi příkazů.
Ke spuštění příkazů v následujících částech budete muset spustit PowerShell jako Správa istrator.
V dalším kroku se budete muset rozhodnout, které pokyny je potřeba provést, abyste mohli balíček vytvořit podle toho, jakou verzi PowerShellu používáte.
PowerShell 6 a novější
Pokud chcete zfázovat balíčky při spuštění pomocí PowerShellu 6 nebo novějšího, musíte před přípravnou operací spustit následující příkazy, abyste mohli přenést možnosti balíčku prostředí Windows Runtime, který jste dříve nainstalovali do relace PowerShellu.
Nejprve spuštěním tohoto příkazu získejte balíček prostředí Windows Runtime:
#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
Potom spuštěním následujícího příkazu zpřístupněte komponenty prostředí Windows Runtime v relaci 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
PowerShell 5.1 a starší
Spuštěním následujícího příkazu připravte balíčky při spuštění pomocí PowerShellu verze 5.1 nebo starší:
#Required for PowerShell versions less than or equal to 5.1
[Windows.Management.Deployment.PackageManager,Windows.Management.Deployment,ContentType=WindowsRuntime] | Out-Null
Add-Type -AssemblyName System.Runtime.WindowsRuntime
Připojení image disku
Teď, když jste připravili počítač na přípravu balíčků připojení aplikace MSIX, budete muset připojit image disku. Tento proces se bude lišit v závislosti na tom, jestli pro image disku používáte formát VHD (X) nebo CimFs .
Poznámka:
Nezapomeňte zaznamenat ID zařízení pro každou aplikaci ve výstupu příkazu. Tyto informace budete potřebovat, abyste mohli postupovat podle pokynů dále v tomto článku.
Připojení image disku CimFS:
Spusťte tento příkaz:
$diskImage = "<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
Až budete hotovi, pokračujte dokončením přípravy image disku.
Dokončení přípravy image disku
Nakonec budete muset spustit následující příkaz pro všechny formáty imagí, abyste dokončili přípravu image disku. Tento příkaz použije proměnnou $DeviceId
, kterou jste vytvořili při připojení image disku v předchozí části.
#Once the volume is mounted we can retrieve the application information
$manifest = Get-Childitem -LiteralPath $DeviceId -Recurse -File AppxManifest.xml
$manifestFolder = $manifest.DirectoryName
#We can now get the MSIX package full name, this will be needed for later steps.
$msixPackageFullName = $manifestFolder.Split('\')[-1]
Write-Output $msixPackageFullName
#We need to create an absolute uri for the manifest folder for the Package Manager API
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
$folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
#Package Manager will now use the absolute uri to stage the application package
$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")
$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation))
#You can check the $stagingResult variable to monitor the staging progress for the application package
Write-Output $stagingResult
Váš balíček MSIX je teď připravený k registraci.
Registrace balíčku MSIX
Pokud chcete zaregistrovat balíček MSIX, spusťte následující rutiny PowerShellu se zástupnými hodnotami nahrazenými hodnotami, které platí pro vaše prostředí.
Parametr $msixPackageFullName
by měl být úplný název balíčku z předchozí části, ale formát by měl být podobný následujícímu příkladu: Publisher.Application_version_Platform__HashCode
.
Pokud jste po přípravě aplikace nenačetli parametr, můžete ho najít také jako název složky pro samotnou aplikaci v C:\Program Files\WindowsApps.
$msixPackageFullName = "<package full name>"
$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íží.
Zrušení registrace balíčku MSIX
Pokud jste s balíčkem hotovi a jste připraveni ho odebrat, je teď čas ho zrušit. Pokud chcete zrušit registraci, budete znovu potřebovat $msixPackageFullName
parametr.
Pokud chcete balíček zrušit, spusťte následující příkaz po nahrazení zástupného textu příslušnými hodnotami:
$msixPackageFullName = "<package full name>"
Remove-AppxPackage $msixPackageFullName -PreserveRoamableApplicationData
Destage balíček MSIX
Pokud chcete balíček MSIX destage, ujistěte se, že používáte příkazový řádek PowerShellu se zvýšenými oprávněními. Abyste získali parametr disku, musíte spustit následující příkaz PowerShellu DeviceId
. Zástupný symbol nahraďte $packageFullName
názvem balíčku, který testujete. V produkčním nasazení doporučujeme tento příkaz spustit pouze při vypnutí systému.
$msixPackageFullName = "<package full name>"
#If you don't know the DeviceId of the mounted disk, you can find it using the following code.
$appPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') $msixPackageFullName
$folderInfo = Get-Item $appPath
$DeviceId = '\\?\' + $folderInfo.LinkTarget.Split('\')[0] +'\'
Write-Output $DeviceId #Save this for later
Remove-AppxPackage -AllUsers -Package $msixPackageFullName
Remove-AppxPackage -Package $msixPackageFullName
Odpojte disky od systému.
Pokud chcete dokončit proces destagingu, budete muset disky odpojit od systému. Příkaz, který budete potřebovat použít, závisí na formátu image disku.
Pokud je vaše image ve formátu CimFS, spusťte tuto rutinu:
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 balíčky MSIX přidávat a odebírat automaticky, můžete pomocí příkazů PowerShellu v tomto článku vytvořit skripty, které se spouští při spuštění, přihlášení, odhlášení a vypnutí. Další informace o těchto typech skriptů najdete v tématu Použití skriptů při spuštění, vypnutí, přihlášení a odhlášení v zásadách skupiny.
Každý z těchto automatických skriptů spustí jednu fázi připojení skriptů aplikace:
- Spouštěcí skript spustí skript fáze.
- Přihlašovací skript spustí registrační skript.
- Skript pro odhlášení spustí deregister skript.
- Skript vypnutí spustí skript destage.
Poznámka:
Plánovač úloh můžete spustit pomocí skriptu fáze. 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í v síti nebo na zařízeních, která nejsou připojená k internetu, potřebujete 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, budete muset licence nastavit ručně.
K instalaci licenčních souborů budete muset použít skript PowerShellu, který volá třídu MDM_EnterpriseModernAppManagement_StoreLicenses02_01 ve zprostředkovateli mostu WMI.
Tady je postup, jak nastavit licence pro offline použití:
Stáhněte balíček aplikace, licence a požadované architektury z Microsoft Store pro firmy. Potřebujete kódované i nekódované licenční soubory. Podrobné pokyny ke stažení najdete tady.
Aktualizujte následující proměnné ve skriptu pro krok 3:
$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.
Spusťte následující skript z PowerShellu spuštěného jako správce. Vhodné místo pro instalaci licencí je na konci přípravné fáze , protože v tomto okamžiku musíte také spustit PowerShell jako správce.
$namespaceName = "root\cimv2\mdm\dmmap" $className = "MDM_EnterpriseModernAppManagement_StoreLicenses02_01" $methodName = "AddLicenseMethod" $parentID = "./Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses" #TODO - Update $contentID with the ContentID value from the unencoded license file (.xml) $contentID = "{'ContentID'_in_unencoded_license_file}" #TODO - 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 procesu balíčku MSIX App Attach a syntaxi najdete v naší šabloně. Tyto skripty budou fungovat s libovolnou verzí PowerShellu a libovolným formátem image disku.
Další kroky
Pokud máte nějaké dotazy, můžete je pokládat na webu Azure Virtual Desktop TechCommunity.
Svůj názor na Azure Virtual Desktop můžete také nechat v centru zpětné vazby ke službě Azure Virtual Desktop.