Instalação de Aplicações usando a Máquina Virtual RemoteApp

Instale uma aplicação através do modelo do catálogo de serviços da máquina virtual.

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

  • O caso de uso mais comum para a instalação da aplicação RemoteApp é implementar aplicações remotas que possam ser acedidas a partir de um Virtual Destop do Azure.
  • 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

Instalação

Configurar uma Conta de Armazenamento para instalar o Visual Studio Code

  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, descarregueVscode.exe e carregue o instalador na pasta da aplicação 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' -Argument "/VERYSILENT /MERGETASKS=!runcode"
    

Modelo de Configuração

  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. Confirma a seleção do grupo de recursos e seleciona Next

  2. Separador Noções básicas:

    • Para Virtual Machine name, introduza o nome da Máquina Virtual.
    • Para Admin username e Admin password, 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 App folder URI, introduza o URI do contentor. Selecione um artefacto dentro do contentor, copie o seu URI, remova tudo o que estiver 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
    • Em Main Script, introduza o nome (ex: main.ps1) do script que instala a aplicação.

    Screenshow mostrando o separador App durante uma implementação de Máquina Virtual.

Contentor privado:

  1. Para App folder in private container, selecione true para permitir que a função reader aceda à conta de armazenamento por meio da Máquina Virtual.

  2. Para Storage container resource id, obtenha as três partes seguintes: <storage-account-resource-id> + '/blobServices/default/containers/' + <container-name>.

    • Para obter Storage container resource id, da conta de armazenamento, selecione "Visão Geral", selecione "Visualização JSON" no canto mais à direita, 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/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Se o parâmetro AzCopy File URI for apresentado, adicione o URI do contentor ao 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 Review and Create, se as validações passarem, selecione Create.
  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

Instalação do WinGet

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')
        - ('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 reboot script
      $rebootScriptPath = "C:\winget\reboot.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. Proceder à Implementação do Modelo