Instalação de aplicativos usando uma máquina virtual RemoteApp

Use o modelo de catálogo de serviço de Máquina Virtual para instalar e configurar um aplicativo em uma máquina virtual RemoteApp.

O script de instalação do aplicativo dá suporte aos seguintes cenários:

  • O caso de uso mais comum para a instalação de aplicativos RemoteApp é implantar aplicativos remotos que você pode acessar por meio do Área de Trabalho Virtual do Azure.
  • Instale seus pré-requisitos, como agentes de segurança cibernética e monitoramento.
  • Alterações de configuração de script para conformidade ou configuração de aplicativo.

Note

Essa implantação de exemplo é apenas para fins de demonstração e não representa todas as práticas recomendadas para administração de rede, sistemas ou aplicativos.

Pré-requisitos

O modelo RemoteApp dá suporte ao script para automatizar o processo de instalação de aplicativos e configuração da Máquina Virtual. Antes de começar a usar a instalação do aplicativo RemoteApp, você precisa ter certeza de que tem:

Note

Se a conta de armazenamento estiver em um enclave diferente, crie um endpoint de enclave no enclave em que está a conta de armazenamento. Em seguida, crie uma conexão de enclave entre esse enclave de conta de armazenamento e o enclave em que você está instalando o aplicativo.

Recursos do Azure implantados

  • Máquina Virtual de exemplo do RemoteApp
    • Disk
    • Máquina Virtual do Windows
    • Extensão da máquina virtual Windows

Software implantado

  • Windows
  • Aplicação de sua escolha

Implantar o modelo

Prepare os arquivos do aplicativo

  1. Adicione a pasta do aplicativo ao contêiner dentro da conta de armazenamento. Diagrama mostrando o método de instalação no mesmo enclave. Diagrama mostrando o método de instalação fora do enclave que contém a conta de armazenamento.
    • Estrutura do arquivo:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. Baixe o instalador de aplicativo de que você precisa. Neste exemplo, baixe o Visual Studio Code e faça upload do instalador para a pasta do app da conta de armazenamento.
  3. Carregue o script de instalação do aplicativo main.ps1 compatível com a versão do Visual Studio Code que você adicionou à pasta do aplicativo 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 tela mostrando a página de visão geral da carga de trabalho.

  1. Para Service, selecione Virtual Machine.

Captura de tela mostrando a Máquina Virtual selecionada na lista de catálogos de serviços.

  1. Confirme a seleção do grupo de recursos e então selecione Próximo.

  2. Aba Noções básicas:

    • Para Virtual Machine name, insira o nome da Máquina Virtual.
    • Para nome de usuário do administrador e senha do administrador, insira o nome de usuário e a senha que você usa para fazer login na sua máquina virtual.
  3. Aba do aplicativo:

    • Para o URI da pasta do aplicativo, insira o URI do container. Selecione um artefato dentro do container, copie seu URI e remova tudo que vem após o nome da pasta no URI. Captura de tela mostrando o URI da pasta do aplicativo para uso nesta implantação.

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

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • Para o Script Principal, insira o nome (por exemplo, main.ps1) do script que instala o aplicativo.

    Captura de tela mostrando a guia Aplicativo durante a implantação de uma Máquina Virtual.

Contêiner privado:

  1. Para Pasta do aplicativo no contêiner privado, selecione true para conceder à identidade da máquina virtual acesso em nível de contêiner Storage Blob Data Reader.

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

    • Para obter ID do recurso do contêiner de armazenamento, na conta de armazenamento, selecione Visão geral, selecione Visualização JSON no canto superior direito e copie o ID do recurso da conta de armazenamento.

    Captura de tela do identificador do recurso da conta para uso nesta implantação.

    • Para o nome do contêiner, copie o nome do contêiner privado que contém os artefatos.
    • Exemplo de ID do recurso de contêiner 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 arquivo AzCopy for exibido, insira o URI para azcopy.exe do contêiner.

    • Selecione o arquivo e copie sua URL:

    Captura de tela mostrando a estrutura organizacional do contêiner de armazenamento com o arquivo azcopy.exe.

    Captura de tela mostrando o URI do arquivo azcopy.exe.

Exemplo de parâmetros de contêiner privado:

Captura de tela com os parâmetros da aba App preenchidos.

  1. Selecione Examinar e criar. Se a validação for aprovada, selecione Criar.
  2. Depois que os recursos forem implantados, verifique se o aplicativo está instalado na Máquina Virtual do aplicativo conectando-se à Máquina Virtual do Aplicativo. Conectar-se à Máquina Virtual do Aplicativo

Instale o WinGet e aplicativos adicionais

Estrutura de pastas:

- 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 tela mostrando os artefatos necessários para instalar o winget no RemoteApp para instalar e gerenciar outros aplicativos usando winget.

  1. Baixar os instaladores e enviá-los para a pasta winget no contêiner de armazenamento
  2. Criar e fazer upload de 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 para configurar o template.