Instalacja aplikacji przy użyciu maszyny wirtualnej dla funkcji RemoteApp

Użyj szablonu katalogu usług, aby zainstalować i skonfigurować aplikację na maszynie wirtualnej RemoteApp.

Skrypty instalacji aplikacji obsługują następujące scenariusze:

  • Najczęstszym zastosowaniem instalacji aplikacji RemoteApp jest wdrażanie zdalnych aplikacji, do których można uzyskać dostęp z Azure Virtual Desktop.
  • Zainstaluj niezbędne składniki, takie jak oprogramowanie zabezpieczające i agenty monitorujące.
  • Zmiany konfiguracji skryptu pod kątem zgodności lub konfiguracji aplikacji.

Note

To przykładowe wdrożenie jest przeznaczone tylko do celów demonstracyjnych i nie reprezentuje wszystkich najlepszych rozwiązań dotyczących administrowania siecią, systemami lub aplikacjami.

Prerequisites

Szablon usługi RemoteApp obsługuje wykonywanie skryptów w celu zautomatyzowania procesu instalowania aplikacji i konfigurowania maszyny wirtualnej. Przed rozpoczęciem korzystania z instalacji aplikacji RemoteApp należy upewnić się, że masz następujące elementy:

Note

Jeśli konto magazynowe znajduje się w innej enklawie, utwórz punkt końcowy enklawy w enklawie, w której znajduje się konto magazynowe. Następnie utwórz połączenie z enklawą między enklawą tego konta magazynu a enklawą, w której instalujesz aplikację.

Wdrożone zasoby platformy Azure

  • Przykładowa maszyna wirtualna usługi RemoteApp
    • Disk
    • Maszyna wirtualna z systemem Windows
    • rozszerzenie maszyny wirtualnej Windows

Wdrożone oprogramowanie

  • Windows
  • Wybór aplikacji

Wdrażanie szablonu

Przygotuj pliki aplikacji

  1. Dodaj folder aplikacji do kontenera w koncie magazynu. Diagram przedstawia sposób instalacji w tej samej enklawie. Diagram przedstawia sposób instalacji poza enklawą zawierającą konto magazynu danych.
    • Struktura pliku:
          - artifacts container
              - app folder
                  - app installer
                  - main script to install app
                  - (optional) additional scripts
                  - (optional) azcopy.exe
      
  2. Pobierz potrzebny instalator aplikacji. W tym przykładzie pobierz Visual Studio Code i wgraj instalator do folderu aplikacji na koncie magazynu.
  3. Prześlij skrypt instalatora aplikacji main.ps1, zgodny z wersją Visual Studio Code, którą dodano do folderu aplikacji na koncie magazynu:
        # Main PowerShell script that installs the application
    
        Start-Process 'C:\vscode\VSCodeSetup-x64-<version>.exe' -ArgumentList '/VERYSILENT /MERGETASKS=!runcode'
    

Konfigurowanie szablonu

  1. Na stronie przeglądu obciążenia wybierz pozycję +Add an Azure Service.

Zrzut ekranu przedstawiający stronę przeglądu obciążenia.

  1. W polu Servicewybierz pozycję Virtual Machine.

Zrzut ekranu przedstawiający maszynę wirtualną wybraną z listy katalogów usług.

  1. Potwierdź wybór grupy zasobów, a następnie wybierz Następne.

  2. Karta Podstawy:

    • W polu Virtual Machine namewprowadź nazwę maszyny wirtualnej.
    • W polach nazwa użytkownika administratora i hasło administratora wpisz nazwę użytkownika i hasło, których używasz do logowania się do maszyny wirtualnej.
  3. Karta Aplikacji:

    • W polu URI folderu aplikacji wpisz URI kontenera. Wybierz artefakt w kontenerze, skopiuj jego URI i usuń wszystko po nazwie folderu w URI. Zrzut ekranu przedstawiający identyfikator URI folderu aplikacji do użycia w tym wdrożeniu.

      Oryginalny URI Stały identyfikator URI
      https://<storage-account>.blob.core.windows.net//<container-name><folder-name>/<script>.ps1 <storage-account>https://.blob.core.windows.net/<container-name>/<folder-name>
    • Przykład:

      • storageaccountexample.blob.core.windows.net/artifacts/vscode
    • Dla głównego skryptu wpisz nazwę (na przykład main.ps1) skryptu instalującego aplikację.

    Zrzut ekranu pokazujący kartę App podczas wdrażania maszyny wirtualnej.

Kontener prywatny:

  1. Dla folderu App w prywatnym kontenerze wybierz true, aby przyznać tożsamości maszyny wirtualnej dostęp na poziomie kontenera Storage Blob Data Reader.

  2. Aby uzyskać identyfikator zasobu kontenera magazynu, połącz te trzy części: <storage-account-resource-id> + /blobServices/default/containers/ + <container-name>.

    • Aby uzyskać identyfikator zasobu konta magazynu, z konta magazynu należy wybrać Przegląd, w prawym rogu JSON View i skopiować identyfikator zasobu konta magazynu.

    Zrzut ekranu przedstawiający identyfikator zasobu konta do użycia w tym wdrożeniu.

    • W polu nazwa kontenera skopiuj nazwę prywatnego kontenera, który przechowuje artefakty.
    • Przykładowy identyfikator zasobu kontenera magazynu: /subscriptions/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/resource-group-example/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
  3. Jeśli wyświetlony jest parametr AzCopy File URI, wpisz URI do azcopy.exe z kontenera.

    • Wybierz plik i skopiuj jego adres URL:

    Zrzut ekranu przedstawiający strukturę organizacji kontenera magazynu z plikiem azcopy.exe.

    Zrzut ekranu przedstawiający identyfikator URI pliku azcopy.exe.

Przykładowe parametry prywatnego kontenera:

Zrzut ekranu przedstawiający uzupełnione parametry na karcie Aplikacja.

  1. Wybierz pozycję Przejrzyj i utwórz. Jeśli weryfikacja zakończy się pomyślnie, wybierz pozycję Utwórz.
  2. Po wdrożeniu zasobów sprawdź, czy aplikacja jest zainstalowana na maszynie wirtualnej aplikacji, łącząc się z maszyną wirtualną aplikacji. Nawiązywanie połączenia z maszyną wirtualną aplikacji

Zainstaluj WinGet i dodatkowe aplikacje

Struktura folderów:

- 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')

Zrzut ekranu przedstawiający artefakty potrzebne do zainstalowania zestawu winget w usłudze RemoteApp, aby następnie zainstalować inne aplikacje i zarządzać nimi przy użyciu zestawu winget.

  1. Pobierz instalatory i prześlij je do folderu winget w kontenerze magazynu
  2. Tworzenie i przekazywanie skryptów
    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. Przejdź do Skonfiguruj szablon.