Skip to content

RemoteApps (RDApps) Publishing Guide

This guide covers publishing RemoteApps through AVD Application Groups and operating them at scale on Azure Local session-host infrastructure.

1) RemoteApp vs Desktop publishing

Use RemoteApp when: - Users need one or a few business applications. - You want tighter app-level access control. - You need lower endpoint resource overhead than full desktop sessions.

Use Desktop when: - Users require broad shell access and personalized environments. - App dependencies are difficult to isolate.

2) Application Group model

Recommended structure: - One host pool per workload class. - Separate Application Groups by department or app criticality. - One Workspace per business unit or environment boundary.

Naming example: - ag-finance-remoteapp-prod - ag-engineering-remoteapp-prod

3) Publish RemoteApps

PowerShell example:

# Create RemoteApp application group
New-AzWvdApplicationGroup -ResourceGroupName $rg -Location $location `
    -HostPoolArmPath $hostPoolId -Name 'ag-finance-remoteapp-prod' -ApplicationGroupType 'RemoteApp'

# Publish an application
New-AzWvdApplication -ResourceGroupName $rg -GroupName 'ag-finance-remoteapp-prod' `
    -Name 'NotepadPP' -FilePath 'C:\Program Files\Notepad++\notepad++.exe' `
    -CommandLineSetting 'DoNotAllow'

# Assign group to workspace
Register-AzWvdApplicationGroup -ResourceGroupName $rg -WorkspaceName $workspaceName `
    -ApplicationGroupPath $appGroupId

4) RBAC for app assignment

Minimum assignment pattern: - Assign end users to Application Group scope (not subscription scope). - Keep operator roles separated from security/audit roles. - Prefer Entra groups over direct user assignment.

5) MSIX app attach and FSLogix

Guidance: - Use MSIX for clean app lifecycle and version rollback. - Keep user-state in FSLogix profile containers. - Separate app package storage from profile container shares.

Operational notes: - Validate package mount latency during sign-in peaks. - Track package update windows to avoid user session disruption.

6) Diagnostics and monitoring

Track: - Application launch failures by app group. - Session disconnects correlated with app startup events. - Per-app user concurrency trends.

Starter KQL (app group trends):

WVDConnections
| where TimeGenerated > ago(24h)
| summarize Connections=count(), Users=dcount(UserName) by HostPoolName, bin(TimeGenerated, 1h)
| order by TimeGenerated asc

7) Scaling patterns for RemoteApps

  • Keep app groups small and domain-aligned for clear ownership.
  • Split high-demand apps to dedicated host pools when noisy-neighbor effects appear.
  • Use depth-first pools for cost-centric workloads and breadth-first where user experience is primary.

8) Validation checklist

  • RemoteApp appears in user feed.
  • Launch succeeds from multiple client types.
  • App group assignment respects least privilege.
  • Telemetry shows stable launch and session metrics.

References

  • AVD RemoteApp overview: https://learn.microsoft.com/azure/virtual-desktop/remote-app-streaming/overview
  • Manage application groups: https://learn.microsoft.com/azure/virtual-desktop/manage-app-groups
  • MSIX app attach: https://learn.microsoft.com/azure/virtual-desktop/app-attach-overview
  • FSLogix documentation: https://learn.microsoft.com/fslogix/