Provisioning Azure RemoteApp collections requires the administrator to us a preconfigured Server 2012 R2 image. In the same way as with RDS on-premises the image is preinstalled and configured with all of the applications that are to be published to the remote users.
There are three image sources an administrator can currently use when provisioning a collection.
- Use one of the preconfigured images Microsoft makes available
- Create an image from a virtual machine built on-premises
- Create an image from a virtual machine running in Azure
The preconfigured images that Microsoft offer are great for having a quick PoC up and working in a matter of a couple of hours but the recommended option if creating your own is to use an Azure VM.
It goes without saying that plenty of planning should be done when looking to move forward with a production RemoteApp deployment. It is a great Azure service and there are improvements being made all the time but as with everything there are currently some limitations to work with.
For example:
A single user can currently only be assigned to a single collection. Therefore splitting applications such as Office and other LOB applications across multiple collections is not always going to be possible. (I could be wrong but if on-premises RDS is anything to go by, one reason for this could be that a user profile disk can only be used in a single collection and not across multiple.)
As with anything Azure, things change rapidly but as of today, RemoteApp limitations to be aware of during the design phase are:
Resource |
Default limit |
Collections per user |
1 |
Published apps per collection |
100 |
Paid collections |
3 (you can request an increase) |
Paid template images |
25 |
Users – basic tier |
400 (default)/ 800 (maximum) |
Users – standard tier |
250 (default)/ 500 (maximum) |
Concurrent connections across all collections in a subscription |
5000 (you can request an increase) |
User data storage (UPD) per user per collection |
50 GB |
Idle timeout |
4 hours |
Disconnected timeout |
4 hours |
** Currently timeouts cannot be managed by GPO or configured by the administrator. They are only managed by the RemoteApp service.
More information about RemoteApp and other Azure Service Limits, Quotas, and Constraints can be found by following this link Azure Subscription and Service Limits, Quotas, and Constraints
Building a RemoteApp Template image in Azure:
There are two steps to creating a RemoteApp Template from an Azure VM.
- Create a Azure Virtual Machine image with all preinstalled and configured applications
- Import the Virtual Machine image in as an Azure RemoteApp Template
Creating a Azure Virtual Machine image
1. Create an Azure Virtual Machine using the “Windows Server Remote Desktop Session Host” image from the Azure Virtual Machine Gallery. This image contains the Windows Server 2012 R2 operating system with the Remote Desktop Session Host (RD Session Host) role installed and meets all the Azure RemoteApp Template image requirements.

2. Connect to the virtual machine and install and configure all of the applications that you plan to publish later on. (Check the image creation tips at the end of this post.)
3. Now all applications have been installed and configured as required, the image needs to be validated. Because the VM was created using the RDSH image from the Azure Virtual Machine Gallery, we have the luxury of double clicking on the “ValidateRemoteAppImage” shortcut on the desktop. This script validates the virtual machine is ready to be used as a RemoteApp image and checks that it is configured in line with all RemoteApp pre-requisites. If all checks pass successfully, the script even offers the option to run SYSPREP for you!

If the script reports back errors, make sure they are resolved before continuing to SYSPREP the image.
To manually SYSPREP the virtual machine open an elevated command prompt and run the following:
C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
(Do not use the /mode:vm
switch even though this is a virtual machine)
4. Once SYSPREP has run and the VM has been shut down, capture the VM as a virtual machine image. To do this, select the correct VM from the list and click the capture button on the bottom menu.

5. When the capture wizard appears, give the image a name, description and check the box to say that SYSPREP has been run on the virtual machine. Doing this will remove the VM once it has been converted to an image. The final step to the process is to click on the tick to begin the import.

Once complete the image will appear under the virtual machine images tab.

Importing the Azure Virtual Machine image in as an Azure RemoteApp Template
1. Browse to the RemoteApp service and the TEMPLATE IMAGES tab at the top. If it’s the first image in the library click on IMPORT OR UPLOAD TEMPALTE IMAGE to open up the next wizard.

If an image already exists, click on the + on the bottom menu bar to begin adding a new image.

2. Select Import an image from your Virtual Machine library (Recommended).

3. Select the Virtual Machine image from the drop down list and check the box to confirm that all the correct steps were taken in creating the virtual machine image.

4. Give the RemoteApp template image a name and location and finish by clicking on the tick button.

When imported, the RemoteApp Template Image is available to the administrator when creating a new RemoteApp collection.

It is possible as mentioned earlier in the post to upload an image that has been created on-premises and I may cover this in a later post, but using an Azure Virtual Machine is a much easier process and Microsoft recommended approach.
The following are a few tips that Microsoft suggest to use when creating the Template image:
- Check all applications to be published have start menu shortcuts. This will make publishing the applications much simpler later.
- Disable automatic software updates for published applications.
- Install the RDSH role before installing applications to ensure that any issues with application compatibility are discovered before the image is uploaded to RemoteApp. (This is already the case with the Azure RDSH gallery image)
- Create a local user i.e. sysadmin and add them to the local administrators group and Remote Desktop.
- Scheduled tasks do persist after SYSPREP.
- Disable automatic software updates for published applications.
- Never store data on instances (c:\ drive).
That’s it for this post, its quite a long one but hope people find it useful. 🙂