Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como montar pacotes MSIX fora da Área de Trabalho Virtual do Azure para ajudar a testar seus pacotes para o Anexo de Aplicativo. As APIs que alimentam a Anexação de Aplicativo estão disponíveis para o Windows 11 Enterprise, o Windows 10 Enterprise, o Windows Server 2025 e o Windows Server 2022. Essas APIs podem ser usadas fora da Área de Trabalho Virtual do Azure para teste, no entanto, não há nenhum plano de gerenciamento para a Anexação de Aplicativo fora da Área de Trabalho Virtual do Azure.
Para obter mais informações sobre o App Attach, consulte App Attach na Área de Trabalho Virtual do Azure.
Pré-requisitos
Antes de testar um pacote para seguir as instruções neste artigo, você precisa do seguinte:
Um dispositivo executando a mesma versão do Windows que o pool de host implantado na Área de Trabalho Virtual do Azure.
Um aplicativo que você expandiu do formato MSIX para uma imagem que você pode usar com o App Attach. Saiba como Criar uma imagem MSIX para usar com a Anexação de Aplicativo na Área de Trabalho Virtual do Azure.
Se você estiver usando uma imagem CimFS, precisará 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 para 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 GitHub do módulo.
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
- Etapa final
O preparo e a desmarcação são operações no nível do computador, enquanto o registro e o cancelamento do registro são operações no nível do 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 para pacotes MSIX sejam confiáveis em seu ambiente.
Preparar-se para preparar um pacote MSIX
O script de preparo prepara o computador para receber o pacote MSIX e monta o pacote relevante no 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 comandos a seguir antes das operações de preparo para trazer os recursos do pacote do Windows Runtime para o PowerShell.
Abra uma janela do PowerShell como administrador.
Execute o seguinte comando para baixar e instalar o pacote do Windows Runtime. Você só precisa executar os comandos a seguir uma vez por máquina.
#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-PackageEm seguida, execute o seguinte comando para disponibilizar os componentes do Windows Runtime 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 preparar pacotes MSIX, é necessário montar sua imagem de disco e concluir o preparo do pacote MSIX.
Montar uma imagem de disco
O processo para montar uma imagem de disco varia dependendo se você está usando o formato CimFs, VHDX ou VHD 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 $deviceIdManter a variável
$deviceId. Você precisará dessas informações mais adiante neste artigo.Quando terminar, prossiga para Concluir o preparo de uma imagem de disco.
Concluir o preparo de uma imagem de disco
Por fim, você precisa executar os seguintes comandos em todos os formatos de imagem para concluir o preparo da imagem de disco. Esse comando usa a $deviceId variável que você criou ao montar a imagem de 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.DirectoryNameObtenha o nome completo do pacote MSIX e armazene-o em uma variável executando os comandos a seguir. Essa variável é necessária para etapas posteriores.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullNameCrie um URI absoluto para a pasta de manifesto para a API do Gerenciador de Pacotes executando os seguintes comandos:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUriUse o URI absoluto para preparar o pacote de aplicativos 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 do preparo do pacote de aplicativos executando os comandos a seguir. O tempo que leva para preparar a embalagem depende de seu tamanho. A
Statuspropriedade da$stagingResultvariável seráRanToCompletionquando o preparo for concluído.$stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation)) while ($stagingResult.Status -eq "WaitingForActivation") { Write-Output "Waiting for activation..." Start-Sleep -Seconds 5 } Write-Output $stagingResult
Depois que o pacote MSI for preparado, você poderá registrar seu pacote MSIX.
Registrar um pacote MSIX
Para registrar um pacote MSIX, execute os seguintes comandos na mesma sessão do PowerShell. Este comando usa a $msixPackageFullName variável 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 o pacote MSIX está registrado, o aplicativo deve estar disponível para uso na sessão. Agora você pode abrir o aplicativo para testes e solução de problemas. Depois de terminar, você precisa cancelar o registro e cancelar o estágio do pacote MSIX.
Cancelar registro de um pacote MSIX
Depois de concluir o pacote MSIX e estiver pronto para removê-lo, primeiro você precisa 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 do DeviceId disco novamente e removem o pacote usando a $msixPackageFullName variável 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
Implantar um pacote MSIX
Por fim, para deslocar o pacote MSIX, você precisa desmontar sua imagem de disco e executar o comando a seguir na mesma sessão do PowerShell para garantir que o pacote ainda não esteja registrado para nenhum usuário. Este comando usa a $msixPackageFullName variável criada em uma seção anterior.
Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue
Desmontar a imagem dos discos
Para concluir o processo de desmarcaçã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 do CimFS, execute os seguintes comandos na mesma sessão do PowerShell:
Dismount-CimDiskImage -DeviceId $deviceId
Depois de terminar de desmontar seus discos, você removeu com segurança seu pacote MSIX.
Configurar scripts de simulação para o agente de anexo de aplicativo
Se você quiser adicionar e remover pacotes MSIX ao seu dispositivo automaticamente, poderá usar os comandos do PowerShell neste artigo para criar scripts que são executados na inicialização, logon, logoff e desligamento. Para saber mais, consulte Usando scripts de inicialização, desligamento, logon e logoff na Política de Grupo. Você precisa garantir 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 de preparação .
- O script de logon executa o processo de registro .
- O script de logoff executa o processo de cancelamento de registro .
- O script de desligamento executa o processo de desalocação .
Observação
Você pode usar o agendador de tarefas para executar o script de preparação. Para executar o script, defina o gatilho de tarefa como Quando o computador for iniciado 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, certifique-se de que as licenças de pacote estejam instaladas em seu dispositivo para executar o aplicativo com êxito. Se o seu dispositivo estiver online, as licenças necessárias devem ser baixadas automaticamente.
Para instalar os arquivos de licença, você precisa usar um script do PowerShell que chama a MDM_EnterpriseModernAppManagement_StoreLicenses02_01 classe no Provedor de Ponte WMI.
Veja como configurar uma licença para uso offline:
Baixe o pacote do aplicativo, a licença e as estruturas necessárias da Microsoft Store para Empresas. Você precisa dos arquivos de licença codificados e não codificados. Para saber como baixar 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 preparo. Você precisa editar as seguintes variáveis:
$contentIDé o valor 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 inteira para o blob de licenças 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 para todos os quatro estágios de teste de pacotes MSIX e ajuda de sintaxe sobre como usá-los em nosso repositório 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 Aplicativo na Área de Trabalho Virtual do Azure: