Testar pacotes MSIX para anexar aplicativos
Este artigo mostra como montar pacotes MSIX fora da Área de Trabalho Virtual do Azure para ajudar a testar seus pacotes para anexar aplicativos. As APIs que permitem a anexação de aplicativos MSIX estão disponíveis para o Windows 11 Enterprise e o Windows 10 Enterprise. Essas APIs podem ser usadas fora da Área de Trabalho Virtual do Azure para testes, mas não há plano de gerenciamento para anexar aplicativo ou anexar aplicativo MSIX fora da Área de Trabalho Virtual do Azure.
Para obter mais informações sobre a anexação de aplicativos e a anexação de aplicativos MSIX, consulte Anexação de aplicativos e anexação de aplicativos MSIX na Área de Trabalho Virtual do Azure.
Pré-requisitos
Antes de poder testar um pacote para seguir as instruções deste artigo, você precisará dos seguintes itens:
Um dispositivo que esteja executando o Windows 11 Enterprise ou o Windows 10 Enterprise.
Um aplicativo que você expandiu do formato MSIX para uma imagem que pode ser usada com a anexação de aplicativos. Saiba como Criar uma imagem MSIX para usar com a anexação de aplicativo na Área de Trabalho Virtual do Azure.
Se estiver usando uma imagem CimFS, será necessário instalar o módulo CimDiskImage do PowerShell.
Uma conta de usuário que tenha permissão de administrador local no dispositivo que você está usando para testar o pacote MSIX.
Você não precisa de uma implantação da Área de Trabalho Virtual do Azure porque este artigo descreve um processo de teste fora da Área de Trabalho Virtual do Azure.
Observação
O Suporte da Microsoft não dá suporte ao módulo CimDiskImage do PowerShell, portanto, se você tiver algum problema, precisará enviar uma solicitação no repositório do módulo no GitHub.
Fases
Para usar pacotes MSIX fora da Área de Trabalho Virtual do Azure, há quatro fases distintas que você deve executar na seguinte ordem:
- Estágio
- Registrar
- Cancelar registro
- Cancelar preparo
O preparo e a desativação são operações em nível de máquina, enquanto o registro e o cancelamento são operações em nível de usuário. Os comandos que você precisa usar variam de acordo com a versão do PowerShell que você está usando e se as imagens de disco estão no formato CimFS, VHDX ou VHD.
Observação
Todos os pacotes MSIX incluem um certificado. Você é responsável por garantir que os certificados dos pacotes MSIX sejam confiáveis em seu ambiente.
Prepare-se para preparar um pacote MSIX
O script de preparo prepara seu computador para receber o pacote MSIX e monta o pacote relevante em seu computador.
Selecione a guia relevante para a versão do PowerShell que você está usando.
Para preparar pacotes usando o PowerShell 6 ou posterior, você precisa executar os seguintes comandos antes das operações de preparação para trazer os recursos do pacote do Windows Runtime para o PowerShell.
Abra um prompt do PowerShell como administrador.
Execute o seguinte comando para baixar e instalar o Pacote do Windows Runtime. Você só precisa executar os seguintes comandos uma vez por computador.
#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
Em seguida, execute o seguinte comando para tornar os componentes do Windows Runtime disponíveis no 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
Preparar um pacote MSIX
Agora que você preparou seu computador para a preparação de pacotes MSIX, é necessário montar a imagem do disco e concluir a preparação do pacote MSIX.
Montar uma imagem de disco
O processo de montagem de uma imagem de disco varia de acordo com o formato CimFs, VHDX ou VHD usado para sua imagem de disco. Selecione a guia relevante para o formato que você está usando.
Para montar uma imagem de disco cimFS:
Na mesma sessão do PowerShell, execute o seguinte comando:
$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
Mantenha a variável
$deviceId
. Você precisará dessas informações mais adiante neste artigo.Quando terminar, vá para Concluir a preparação de uma imagem de disco.
Concluir a preparação de uma imagem de disco
Por fim, você precisa executar os seguintes comandos para todos os formatos de imagem para concluir a preparação da imagem de disco. Esse comando usa a variável $deviceId
que você criou quando montou a imagem do disco na seção anterior.
Na mesma sessão do PowerShell, recupere as informações do aplicativo executando os seguintes comandos:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryName
Obtenha o nome completo do pacote MSIX e armazene-o em uma variável executando os seguintes comandos. Essa variável é necessária para as etapas posteriores.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullName
Crie um URI absoluto para a pasta de manifesto da API do Gerenciador de Pacotes executando os seguintes comandos:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
Use o URI absoluto para preparar o pacote do aplicativo executando os seguintes comandos:
$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")
Monitore o progresso da preparação do pacote de aplicativos executando os seguintes comandos. O tempo necessário para preparação do pacote depende do seu tamanho. A propriedade
Status
da variável$stagingResult
seráRanToCompletion
quando a preparação estiver concluída.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
Quando o pacote MSI estiver preparado, você poderá registrar o pacote MSIX.
Registrar um pacote MSIX
Para registrar um pacote MSIX, execute os seguintes comandos na mesma sessão do PowerShell. Esse comando usa a variável $msixPackageFullName
criada em uma seção anterior.
$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register
Agora que seu pacote MSIX está registrado, seu aplicativo deve estar disponível para uso em sua sessão. Agora você pode abrir o aplicativo para teste e solução de problemas. Após a conclusão, é necessário cancelar o registro e remover a preparação do pacote MSIX.
Cancelar o registro de um pacote MSIX
Quando terminar de usar o pacote MSIX e estiver pronto para removê-lo, primeiro será necessário cancelar o registro. Para cancelar o registro do pacote MSIX, execute os seguintes comandos na mesma sessão do PowerShell. Esses comandos obtêm o parâmetro DeviceId
do disco novamente e removem o pacote usando a variável $msixPackageFullName
criada em uma seção anterior.
$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
Remover da preparação um pacote MSIX
Por fim, para destruir o pacote MSIX, é necessário desmontar a imagem do disco e executar o seguinte comando na mesma sessão do PowerShell para garantir que o pacote ainda não esteja registrado para nenhum usuário. Esse comando usa a variável $msixPackageFullName
criada em uma seção anterior.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Desmontar a imagem dos discos
Para concluir o processo de remoção da preparação, você precisa desmontar os discos do sistema. O comando que você precisa usar depende do formato da sua imagem de disco. Selecione a guia relevante para o formato que você está usando.
Para desmontar uma imagem de disco CimFS, execute os seguintes comandos na mesma sessão do PowerShell:
Dismount-CimDiskImage -DeviceId $deviceId
Quando terminar de desmontar os discos, você terá removido com segurança o pacote MSIX.
Configurar scripts de simulação para o agente de anexação do aplicativo MSIX
Se quiser adicionar e remover automaticamente pacotes MSIX do seu dispositivo, você pode usar os comandos do PowerShell deste artigo para criar scripts que são executados na inicialização, no logon, no logoff e no desligamento. Para saber mais, confira Usando scripts de inicialização, desligamento, logon e logoff na Política de Grupo. Você precisa se certificar de que todas as variáveis necessárias para cada fase estejam disponíveis em cada script.
Você cria um script para cada fase:
- O script de inicialização executa o processo estágio.
- O script de logon executa o processo registrar.
- O script de logoff executa o processo de cancelamento de registro.
- O script de desligamento executa o processo de remoção da preparação.
Observação
Você pode usar o agendador de tarefas para executar o script de preparação. Para executar o script, defina o gatilho da tarefa como Quando o computador iniciar e habilite Executar com privilégios mais altos.
Usar pacotes offline
Se você estiver usando pacotes em dispositivos que não estão conectados à Internet, precisará verificar se as licenças do pacote estão instaladas em seu dispositivo para executar o aplicativo com sucesso. Se o dispositivo estiver online, as licenças necessárias serão baixadas automaticamente.
Para instalar os arquivos de licença, você precisa usar um script do PowerShell que chame a classe MDM_EnterpriseModernAppManagement_StoreLicenses02_01
no Provedor de Ponte WMI.
Veja como configurar uma licença para uso offline:
Faça o download do pacote de aplicativos, da licença e das estruturas necessárias na Microsoft Store para Empresas. Você precisa dos arquivos de licença codificados e não codificados. Para saber como fazer o download de um aplicativo licenciado offline, consulte Distribuir aplicativos offline.
Execute os seguintes comandos do PowerShell como administrador. Você pode instalar a licença no final da fase de preparação. Você precisa editar as seguintes variáveis:
$contentID
é o valor da ContentID do arquivo de licença não codificado (.xml
). Você pode abrir o arquivo de licença em um editor de texto de sua escolha.$licenseBlob
é a cadeia de caracteres completa para o blob de licença no arquivo de licença Codificado (.bin
). Você pode abrir o arquivo de licença codificado em um editor de texto de sua escolha.$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 }
Scripts de demonstração
Você pode encontrar scripts de demonstração em todos as quatro fases do teste de pacotes MSIX e ajuda de sintaxe sobre como usá-los em nosso repositório do GitHub. Esses scripts funcionam com qualquer versão do PowerShell e qualquer formato de imagem de disco.
Próximas etapas
Saiba mais sobre a anexação de aplicativos e a anexação de aplicativos MSIX na Área de Trabalho Virtual do Azure: