UPDATE 10 May 2010 : I finally discovered where the Remote Desktop team documented this process last December and thought it might be useful; blogs.msdn.com/rds/archive/2010/03/08/remoteapp-for-hyper-v-vdi-deployment.aspx
UDPATE 20 February 2010 : Sorry for how long the final solution took to discover, but thanks to Aaron Parker's blog entry at http://blog.stealthpuppy.com we now have the final missing pieces that allow remote applications to be hosted within a standard Windows XP SP3 virtual machine.
UPDATE 5 July 2011 : Kim Knight has now written a GUI tool for configuring remote apps which makes the process a lot easier and less error prone, http://sites.google.com/site/kimknight/remoteapptool. (Note: new URL as of 9 Sep 2011)
I have just tested the settings from Aaron on a Windows XP SP3 image running under VirtualBox 3.1.2 which previously failed with the dreaded 'The remote computer does not support RemoteApp ..'. As soon as the two extra settings were added to the RDP file (see steps c and d below), I could run Notepad via RemoteApp quite happily. I'll be doing more research into this and will update some of the screen shots in this post, but I thought I'd post this update as soon as possible to help people right away.
What is RemoteApp?
This is used within the XP Mode within Windows 7 to provide seamless application integration where applications running under Windows XP appear as application windows floating over the Windows 7 desktop.
RemoteApp is only the remote display technology which enables this to occur. It should be noted that XP Mode also includes logic to integrate start menu items and saving of documents and files which are not covered by RemoteApp alone.
Why would you want RemoteApp?
For all those people using XP Mode to run a nicely sandboxed IE6 for testing purposes, you can now achieve exactly the same result without having to install Virtual PC. This is important if you are already running virtual machines in another platform, such as VirtualBox or VMWare Workstation (or Player) as running Virtual PC XP Mode has a habit of causing your other virtual machines to crash with very little warning.
Also, unlike XP Mode, seamless mode in VirtualBox or ‘unity’ mode in VMWare Workstation, you can use this on a non local virtual machine. So you could happily have a network server with IE6 instances pooled for all developers. With VirtualBox and VMWare Workstation this also means we can use an application on 64-bit or multi CPU installations which XP Mode does not support.
Step 1 - Configuring the guest virtual machine to allow RemoteApp access
For Windows Vista and Windows XP you will need to install updates on the guest to enable RemoteApp (see below). Windows 7 requires now such updates.
This example uses a completely clean version of Windows 7 Ultimate RTM 64-bit, dual CPU, running under VirtualBox 3.1. We are going to enable Notepad to be run as a RemoteApp. The connecting client is Windows 7 Ultimate RC 64-bit, dual CPU.
This solution involved directly editing the registry, and this is not the ideal way of enabling RemoteApp, and I have omitted numerous registry keys which would be required by XP Mode (see resources for full registry value list). This is a minimal bootstrap to enable RemoteApp until the virtualisation and remote desktop teams provide suitable tools and fully document the process.
1. Enable remote desktop connections on the guest.
2. Run regedit (registry editor) and locate the key TsAppAllowList
a) New Key, Applications.
b) Under Applications, create New Key, 1234567 (the key name is not important, we just need any key for next two steps)
c) In the new key, Create New -> String Value, Name. Set value to Notepad
d) Also in the new key, Create New -> String Value, Path. Set to c:\windows\system32\Notepad.exe
3. Navigate back to the TsAppAllowList branch
a) Edit fDisableAllowList value, and set to 1
Step 2 – Creating the RDP file to access the RemoteApp
Now the guest operating system has a RemoteApp created we need to use a Remote Desktop Connection to access that application.
1. Run remote desktop connection, setup your desired settings as you would in a normal connection
2.. Save the settings to an RDP file.
3) Use Notepad to open the RDP file to edit the configuration file,
a) Modify the setting; remoteapplicationmode:i:0 to remoteapplicationmode:i:1
b) Add the setting; remoteapplicationprogram:s:Notepad
c) Add the setting; disableremoteappcapscheck:i:1
d) Add the setting; alternate shell:s:rdpinit.exe
e) Save the RDP file
(20th February 2010 - thanks again to Aaron Parker's blog for steps c and d)
4. You can now use the RemoteApp by double clicking on the RDP to open with Remote Desktop Connection,
a) Click on Connect when you see the security warning
b) And after a short start to initiate the remote desktop session you will be running notepad floating over your VM
Setting a Timeout for RDP connections
When using RemoteApp one of the issues you may find is that when you exit the application that does not close the Remote session on the guest machine. This is clear on a desktop operating system as you will receive warning messages about users already being logged into the system.
Clearly this is less than ideal, so I decided to find out how to ensure that closing the application caused the user to logout in a very short time period. This is configured on the guest operating system.
1. Windows key, Edit Group Policy.
2. Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Session Host -> Session Time Limits
3.Double click 'Set time limit for disconnected sessions', change to Enabled, set to 1 Minute.
Similar to VirtualBox seamless mode, you will not be able to move the floating guest application window between monitors, unless you save the RDP to use all monitors available. Either set this option prior to saving the RDP file, or edit the RDP setting multimon:i:1.
As the keen eyed may have spotted, my laptop is still running the Release Candidate of Windows 7 as I have been too busy recently to upgrade to the RTM version. However, over Christmas I will be upgrading the laptop to RTM and I’m glad I did, because I RemoteApp means there will be absolutely no need to install Virtual PC and XP Mode when I can just run IE6 under VMWare or VirtualBox instead.
Patches for Windows XP and Vista
To enable Windows XP SP3 or Vista SP1 (or higher) to host remote applications you will need to install one of the following patches.
Update for Windows® XP SP3 to enable RemoteApp™ (KB961742)
Update for Windows® Vista SP1 or above to enable RemoteApp™, (KB961741)
The original article which started all this, from Ben Armstrong, Virtualization Program Manager at Microsoft ‘Virtual PC Guy’s blog’, http://blogs.msdn.com/virtual_pc_guy/archive/2009/12/17/remoteapp-hyper-v-windows-xp-vista.aspx
.. which led to Remote Desktop Services (Terminal Services) Team Blog that revealed it’s all an RDP 7.0 thing, and not Hyper-V is just an enabling technology, http://blogs.msdn.com/rds/archive/2009/12/15/remoteapp-for-hyper-v.aspx
... as Aaron Parker suggested by including a VirtualBox example on his stealthpuppy blog, http://blog.stealthpuppy.com/virtualisation/remoteapp-for-hyper-v-hyper-what
20th February 2010 update ... and it was Aaron Parker's blog post here that revealed the final missing settings in the RDP file that allowed me to finally run a RemoteApp from within a Windows XP SP3 virtual machine.
Once I knew the TsAllowAppList registry key was involved I Bing later I found the very useful XP Mode analysis of this key at the C# Snippets blog, http://c-sharp-snippets.blogspot.com/2009/09/creating-shortcut-to-application-inside.html
And for RDP configuration file editing, I found an excellent clue in Paul Monaghan’s article here, http://support.yourofficeanywhere.co.uk/Customer/KBArticle.aspx?articleid=82
... which helped me guess that changing the remoteapplicationmode:i:0 value to 1 would help, and if you Bing remoteapplicationmode:i:1 then the careless folk at financelogix.com have kindly published their RDP file with the application name key within it, which gave me the last piece of the jigsaw.
Finally the ‘Set time limit for disconnected sessions’, example may be for Windows XP but gave enough information for Windows 7, http://howtonetworking.com/casestudy/tstimelimit1.htm