How to Configure RemoteApp Programs on Windows Server 2019

RemoteApp programs allow individual applications running on an RD Session Host to appear as if they are running locally on the user’s desktop. The application window integrates into the local taskbar and can be resized and minimised just like any local application — but all processing occurs on the server. Users do not see a full desktop session; they see only the application window. This provides a seamless experience for application delivery while maintaining centralised control over software versions, patches, and data.

RemoteApp Architecture

RemoteApp relies on the Remote Desktop Services infrastructure. The application is published on an RD Session Host, the Connection Broker makes it available to the RD Web Access portal, and users launch it either from the web portal, from an RDP file distributed to their machine, or from a Windows Installer package that creates a local shortcut. When launched, an RDP connection is made to the RDSH server and only the application window is presented. Multiple RemoteApp windows from the same server share a single underlying RDP session, reducing connection overhead.

Publishing a RemoteApp Program

RemoteApp programs are published per collection. Use the New-RDRemoteApp cmdlet to publish an application. The FilePath must be the full path to the executable on the RDSH server.

# Publish Microsoft Word as a RemoteApp
New-RDRemoteApp `
    -CollectionName "StandardApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -DisplayName "Word 2019" `
    -FilePath "C:Program FilesMicrosoft OfficerootOffice16WINWORD.EXE" `
    -Alias "word2019" `
    -ShowInWebAccess $true `
    -UserGroups @("CORPRD Users")

# Publish a legacy line-of-business application
New-RDRemoteApp `
    -CollectionName "LOBApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -DisplayName "Accounting System" `
    -FilePath "C:LOBAcctSystemAcctSystem.exe" `
    -Alias "accountingsystem" `
    -ShowInWebAccess $true `
    -UserGroups @("CORPFinance Department")

Setting RemoteApp Command-Line Arguments

Some applications accept command-line arguments to open in specific modes or load specific files. RemoteApp supports passing required arguments and allowing user-supplied arguments.

# Publish an application with required command-line arguments
New-RDRemoteApp `
    -CollectionName "StandardApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -DisplayName "Notepad" `
    -FilePath "C:Windowssystem32notepad.exe" `
    -Alias "notepad" `
    -RequiredCommandLine "/A" `
    -ShowInWebAccess $true

# Allow users to pass their own arguments (for file associations)
Set-RDRemoteApp `
    -CollectionName "StandardApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -Alias "notepad" `
    -CommandLineSetting Allow

Setting RemoteApp Icons

By default, RemoteApp uses the icon from the executable. You can specify a custom icon file using an ICO format or extract an icon from an existing executable.

# Set a custom icon for a RemoteApp
Set-RDRemoteApp `
    -CollectionName "StandardApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -Alias "accountingsystem" `
    -IconPath "C:LOBIconsacct_icon.ico" `
    -IconIndex 0

# List all published RemoteApps in a collection with their details
Get-RDRemoteApp -CollectionName "StandardApps" -ConnectionBroker "rdcb01.corp.local" |
    Select-Object DisplayName, Alias, FilePath, ShowInWebAccess, UserGroups

Creating RemoteApp RDP Files

For users who cannot access the RD Web Access portal, or for deploying RemoteApp shortcuts via Group Policy or SCCM, export RDP files for each published application. Users double-click the RDP file to launch the RemoteApp.

# Export an RDP file for a RemoteApp
$RDPContent = @"
full address:s:rdsh01.corp.local
gatewayhostname:s:rdgateway.corp.com
gatewayusagemethod:i:1
remoteapplicationmode:i:1
remoteapplicationname:s:Word 2019
remoteapplicationprogram:s:||word2019
remoteapplicationcmdline:s:
prompt for credentials:i:1
authentication level:i:3
"@

$RDPContent | Out-File -FilePath "C:RDPFilesWord2019.rdp" -Encoding ASCII
Write-Host "RDP file created: C:RDPFilesWord2019.rdp"

Creating RemoteApp Windows Installer Packages

RemoteApp programs can be packaged as Windows Installer (MSI) files that create desktop shortcuts and Start menu entries on user machines. These packages handle protocol associations and desktop integration without requiring the user to access the web portal. Packages are created using the Remote Desktop Services Manager in Server Manager.

# Create an MSI package for a RemoteApp via PowerShell
# Note: The New-RDRemoteAppPackage cmdlet requires management tools to be installed

# The RDP file content for an MSI-deployed RemoteApp
# MSI packages are created through the Server Manager GUI:
# Server Manager > Remote Desktop Services > Collections > [CollectionName]
# > Tasks > Create RemoteApp Programs

# Alternatively distribute RDP files and register them with Group Policy
# GPO Path: User Config > Preferences > Windows Settings > Files
# Deploy the .rdp file to %APPDATA%MicrosoftWindowsStart MenuProgramsRemote Applications

Configuring File Type Associations

RemoteApp programs can be associated with file types so that double-clicking a .docx file on a user’s local machine launches the remote Word application. This is configured through Group Policy or by editing the RDP file to include command-line arguments.

# Register a file association for .docx with the remote Word application
# Via Registry on the client machine (deployed via GPO)
$AssocPath = "HKCU:SOFTWAREClasses.docx"
Set-ItemProperty -Path $AssocPath -Name "(Default)" -Value "RemoteApp.Word2019"

$AppPath = "HKCU:SOFTWAREClassesRemoteApp.Word2019shellopencommand"
New-Item -Path $AppPath -Force
Set-ItemProperty -Path $AppPath -Name "(Default)" `
    -Value '"C:Program FilesRemote Desktopmstsc.exe" "C:RDPFilesWord2019.rdp" /v:rdsh01.corp.local "%1"'

Managing RemoteApp Programs in Bulk

In environments with many published applications, use PowerShell to manage RemoteApp programs across collections efficiently.

# Get all RemoteApps across all collections
Get-RDSessionCollection -ConnectionBroker "rdcb01.corp.local" | ForEach-Object {
    Get-RDRemoteApp -CollectionName $_.CollectionName -ConnectionBroker "rdcb01.corp.local"
} | Select-Object CollectionName, DisplayName, Alias, FilePath | Format-Table -AutoSize

# Update user group access for a RemoteApp
Set-RDRemoteApp `
    -CollectionName "StandardApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -Alias "word2019" `
    -UserGroups @("CORPAll Staff", "CORPContractors")

# Remove a RemoteApp from the portal
Remove-RDRemoteApp `
    -CollectionName "LOBApps" `
    -ConnectionBroker "rdcb01.corp.local" `
    -Alias "legacyapp" `
    -Force

Troubleshooting RemoteApp Launch Issues

Common RemoteApp problems include the application not appearing on the web portal, launch failures with error codes, and applications not opening in RemoteApp mode. Check the following when troubleshooting.

# Verify the application file exists on all RDSH servers in the collection
$Collection = Get-RDSessionHost -CollectionName "StandardApps" -ConnectionBroker "rdcb01.corp.local"
$AppPath = "C:Program FilesMicrosoft OfficerootOffice16WINWORD.EXE"

foreach ($Host in $Collection) {
    $Exists = Invoke-Command -ComputerName $Host.SessionHost -ScriptBlock {
        param($path) Test-Path $path
    } -ArgumentList $AppPath
    Write-Host "$($Host.SessionHost): Application exists = $Exists"
}

# Check RemoteApp is in the allowed apps list on RDSH servers
Invoke-Command -ComputerName "rdsh01.corp.local" -ScriptBlock {
    Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionTerminal ServerTSAppAllowList" |
        Select-Object fDisabledAllowList
}

Conclusion

RemoteApp programs on Windows Server 2019 deliver a seamless application delivery experience where server-hosted applications integrate into the local user desktop. Publishing applications through the Connection Broker, controlling access via security groups, customising icons and command-line arguments, and distributing RDP files or MSI packages to clients provides a comprehensive application delivery pipeline. RemoteApp is particularly valuable for delivering legacy applications that require specific OS versions or configurations without imposing full virtual desktop overhead on the infrastructure.