Instalação de aplicações através de uma máquina virtual RemoteApp

Utilize o modelo de catálogo de serviço de Máquinas Virtuais para instalar e configurar uma aplicação numa máquina virtual RemoteApp.

O script de instalação da aplicação suporta os seguintes cenários:

  • O caso de uso mais comum para a instalação de aplicações RemoteApp é implementar aplicações remotas às quais pode aceder a partir de um Azure Virtual Desktop.
  • Instale os seus pré-requisitos, como cibersegurança e agentes de monitorização.
  • Alterações na configuração dos scripts para conformidade ou configuração de aplicações.

Note

Este exemplo de implementação é apenas para fins de demonstração e não representa todas as melhores práticas para administração de redes, sistemas ou aplicações.

Pré-requisitos

O modelo RemoteApp suporta scripts para automatizar o processo de instalação de aplicações e configuração da Máquina Virtual. Antes de poder começar a usar a instalação da aplicação RemoteApp, precisa de garantir que tem:

Note

Se a conta de armazenamento estiver num enclave diferente, crie um endpoint de enclave no enclave onde se encontra a conta de armazenamento. Depois, crie uma ligação entre enclaves entre esse enclave da conta de armazenamento e o enclave onde está a instalar a aplicação.

Recursos do Azure implementados

  • Exemplo de máquina virtual RemoteApp
    • Disk
    • Máquina Virtual do Windows
    • Extensão de Máquina Virtual para Windows

Software instalado

  • Windows
  • Aplicação à sua escolha

Implementar o modelo

Preparar ficheiros de candidatura

  1. Adicionar a pasta da app ao contentor dentro da conta de armazenamento. Diagrama mostrando o método de instalação dentro do mesmo enclave. Diagrama que mostra o método de instalação fora do enclave que contém a conta de armazenamento.
    • Estrutura do ficheiro:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. Descarregue o instalador de aplicações de que precisa. Neste exemplo, descarregue o Visual Studio Code e faça upload do instalador para a pasta da app da conta de armazenamento.
  3. Carrega o main.ps1 script instalador da aplicação compatível com a versão do Visual Studio Code que adicionaste à pasta da conta de armazenamento:
        # Main PowerShell script that installs the application
    
        Start-Process 'C:\vscode\VSCodeSetup-x64-<version>.exe' -ArgumentList '/VERYSILENT /MERGETASKS=!runcode'
    

Configurar o modelo

  1. Na página de visão geral da carga de trabalho, selecione +Add an Azure Service.

Captura de ecrã que mostra a página de visão geral da carga de trabalho.

  1. Para Service, selecione Virtual Machine.

Captura de ecrã que mostra a Máquina Virtual selecionada da lista do catálogo de serviços.

  1. Confirme a seleção do grupo de recursos e depois selecione Next.

  2. Separador Noções básicas:

    • Para Virtual Machine name, introduza o nome da Máquina Virtual.
    • Para o nome de utilizador de administrador e a palavra-passe de administrador, introduza o nome de utilizador e a palavra-passe que usa para iniciar sessão na sua máquina virtual.
  3. Separador da aplicação:

    • Para o URI da pasta da App, introduza o URI do contentor. Seleciona um artefacto dentro do contentor, copia o seu URI e remove tudo o que vem depois do nome da pasta no URI. Captura de ecrã que mostra o URI da pasta da aplicação para utilização nesta implementação.

      URI original URI fixo
      https://<storage-account>.blob.core.windows.net//<container-name><folder-name>/<script>.ps1 https://<storage-account>.blob.core.windows.net/<container-name>/<folder-name>
    • Example:

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • Para o Script Principal, introduza o nome (por exemplo, main.ps1) do script que instala a aplicação.

    Captura de ecrã que mostra o separador da App durante uma implantação numa Máquina Virtual.

Contentor privado:

  1. Para a pasta App num contentor privado, selecione true para conceder à identidade da máquina virtual acesso Storage Blob Data Reader ao nível do contentor.

  2. Para o ID de recurso do contentor de armazenamento, combine estas três partes: <storage-account-resource-id> + /blobServices/default/containers/ + <container-name>.

    • Para obter o ID do recurso do contentor de armazenamento, da conta de armazenamento, selecione Visão Geral, selecione Vista JSON no canto mais à direita e copie o ID do recurso da conta de armazenamento.

    Captura de ecrã do identificador do recurso da conta para utilização nesta implementação.

    • Para o nome do contentor, copie o nome do contentor privado que contém os artefactos.
    • Exemplo de ID de recurso do contentor de armazenamento: /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourceGroups/resource-group-example/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Se o parâmetro URI do ficheiro AzCopy for apresentado, introduza o URI do contentor para azcopy.exe.

    • Selecione o ficheiro e copie o seu URL:

    Captura de ecrã que mostra a estrutura de organização do contentor de armazenamento com azcopy.exe ficheiro.

    Captura de ecrã que mostra o URI do ficheiro azcopy.exe.

Exemplos de Parâmetros de Contentores Privados:

Captura de ecrã que mostra os parâmetros do separador App preenchidos.

  1. Selecione Rever e Criar. Se a validação passar, selecione Criar.
  2. Depois de os recursos serem implementados, verifique se a aplicação está instalada na Máquina Virtual da aplicação, ligando-se à Máquina Virtual da Aplicação. Liga-se à Máquina Virtual da Aplicação

Instalar o WinGet e aplicações adicionais

Estrutura da pasta:

- artifacts container
    - WinGet app folder ('winget')
        - WinGet installer ('Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle')
        - Windows UI Library ('Microsoft.UI.Xaml.2.8.x64.appx')
        - main script to schedule install ('main.ps1')
        - script to install and schedule reboot ('install_winget.ps1')
        - script to restart the virtual machine ('restart.ps1')

Captura de ecrã que mostra os artefactos necessários para instalar o Winget na RemoteApp para depois instalar e gerir outras aplicações usando o winget.

  1. Descarregue instaladores e carregue-os para a pasta winget no contentor de armazenamento
  2. Criar e transferir scripts
    1. main.ps1
      # This script creates and runs a scheduled task to install the appx package and msix bundle with elevated privileges
      
      $installScriptPath = "C:\winget\install_winget.ps1"
      
      # Create a scheduled task action to run the installation script with elevated permissions
      $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $installScriptPath"
      
      # Set the task to start 30 seconds from now
      $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(30)
      $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
      
      # Register the scheduled task
      Register-ScheduledTask -TaskName "InstallWinget" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal
      
    2. install_winget.ps1
      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
      
      Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.UI.Xaml.2.8.x64.appx /SkipLicense" -NoNewWindow -Wait
      Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle /SkipLicense" -NoNewWindow -Wait
      
      $wingetDir = 'C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.23.1791.0_x64__8wekyb3d8bbwe'
      $currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
      [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$wingetDir", [System.EnvironmentVariableTarget]::Machine)
      
      # Schedule the restart script
      $rebootScriptPath = "C:\winget\restart.ps1"
      $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $rebootScriptPath"
      
      # Set the task to start 30 seconds from now
      $taskTrigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(30))
      $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
      
      # Register the scheduled task
      Register-ScheduledTask -TaskName "Reboot" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal
      
    3. restart.ps1
      Restart-Computer -Force
      
  3. Proceda à Configurar o modelo.