Have you tried XP Mode in Windows 7? Or VMware Unity in Workstation? Quite cool isn't it! Wouldn't it be nice if you could have the same seamlessly integration of applications running on a remote computer or from a virtual machine running on a VMware ESXi host? Well . . . you can! Read on!
What is RemoteApp?
RemoteApp enables you to make programs that are accessed remotely through Remote Desktop Services appear as if they are running on the end user's local computer. These programs are referred to as RemoteApp programs. Instead of being presented to the user in the desktop of the Remote Desktop Session Host server, the RemoteApp program is integrated with the client's desktop. The RemoteApp program runs in its own resizable window, can be dragged between multiple monitors, and has its own entry in the taskbar.
Usually, RemoteApps are hosted on Windows Server 2008 (and above), but some smart folk figured out how to host them on other versions, including Windows XP and Windows 7.
Why would you want to do this?
There's lots of uses for this, like sandboxing software or easily running multiple versions of a piece of software side-by-side. However, here at Liquidstate, I wanted a nice way of using applications installed on virtual machines. I've used VMware Workstation with its Unity mode and wanted a similar experience, but using virtual machines hosted on my ESXi server, rather than having a hypervisor running on my desktop. The key benefit for me is that I can have a network unaware application like "iTunes" installed on a virtual machine that I can access from any device in my house. RemoteApp just makes that experience a little nicer.
Here's an example of Notepad running on my Windows 7 desktop PC, right next to a RemoteApp version of Notepad running from a Windows XP virtual machine hosted on my ESXi server.
How do I do that?
In this post, I'll walk you through how I achieved the above example whereby we have seamless integrated Notepad running on a virtualised Windows XP machine.
In the following steps, I'll refer to my "local machine" as being the physical Windows 7 computer I'm sitting in front of. The "remote machine" is a the virtual machine running on a remote VMware ESXi server.
Step 1 - install Remote Desktop Client v7
RemoteApp requires Remote Desktop Client v7 to be installed on both your local and remote machines. In this example, my local machine is fine because its running Windows 7, but the remote virtual machine is running Windows XP SP3.
Download Remote Desktop Client 7 for Windows XP SP3 here and install it onto the remote machine.
Step 2 - install Update for Windows XP SP3 to enable RemoteApp
If your remote machine is running Windows XP (which ours is in this example), then you will need to download and install the hotfix released by Microsoft. Its available here and will require a reboot.
Step 3 - set up a user account to use for RemoteApps
Now we will create a new user account on our remote Windows XP machine that will be used to run our RemoteApps. In this example, I've created a "Test" user with Administrative privileges and the password "Test".
Step 4 - install Microsoft .NET Frame 3.5 SP1
Later in this post we will be using a tool that requires the Microsoft .NET Framework 3.5 to run. Download it from here and install it onto the remote machine(s) that you plan to access via RDP.
Step 5 - install the RemoteApp Tool
As discussed earlier, RemoteApps are usually hosted on Windows Server 2008 (and above), but some smart folk figured out that you can make them work on other versions, including Windows XP and Windows 7. This required manually editing of the registry and RDP files. Thankfully, Kim Knight created the RemoteApp Tool, a GUI tool that allows you to create and manage RemoteApps hosted on a remote machine as well as automatically generate RDP files for use on your local PC.
Download the latest version from Kim's website and install it onto the remote machine(s) that you plan to access via RDP.
Step 6 - create a new RemoteApp
Log in to your remote computer through RDP as normal and run the RemoteApp tool that you installed in the previous step. Create a new RemoteApp by clicking the "Create new..." button and giving it any name you like. Now fill in the Properties section. Below is a screenshot of my example Notepad application:
Above you'll notice that there is a "Client connection" section. These details should be automatically generated for you, but should refer to the connection details of your remote machine, as viewed from your local machine. To explain, the settings you see here will be inserted into the generated RDP file that you will use from your local machine to connect to the remote machine.
Once you've filled in the details, hit "Save", followed by "Create RDP file...". Save the resulting RDP file somewhere safe - you'll need it in the next step!
Step 7 - try it!
We now need to copy the RDP file created by RemoteApp Tool in the previous step from our remote machine to our local machine. You can do this by either copying it to a network share (as I did) or by using the drive sharing options built into RDP.
Once you have the RDP file on your local machine, run it! You'll be prompted by a few security boxes the first time you do this, so I'll give a few screenshots and explain what's going on.
When we first run the RDP session, we're informed that the RemoteApp is unsigned. That's normal as we've generated this RemoteApp ourselves. Click "Connect" to continue anyway.
Now we are warned that the remote computer we're connecting to cannot be verified. As the error message explains, this is normal if it is running a version of Windows prior to Vista, which ours is. Hit "Yes" to continue.
Now we get asked for our login credentials. Use the username and password of the account we created in Step 3. In this example, the username is "Test" and the password is "Test". You may need to hit the "Use another account" button if the username is pre-populated to something else.
After a short delay, you should now see a XP version of Microsoft Notepad integrated right into your Windows 7 desktop. You can drag it round, resize the window; just like a normal application!