UPDATE April 17, 2015: Due to the many requests I’ve received, I’ve decided to share my compiled Multi-Touch Vista binaries and my own Surface’s calibration data. Hope this helps in getting your own Surface upgraded to a more recent Windows version!
I was recently lucky enough to receive an original Microsoft Surface through one of our great MVPs in the Netherlands, Dennis Vroegop. If you’re wondering what the fuss is about, I’m not talking about the Microsoft Surface Tablets, but the original device which was called Microsoft Surface: a 30-inch tabletop device, originally released in 2008. I was lucky enough to have worked with quite a few customers in The Netherlands between 2008 and 2010, creating solutions for Microsoft Surface in many verticals, including retail and finance. As you can imagine, I was pretty excited to get a $10,000 (original retail value) device at home and immediately replaced my coffee table in the living room with it.
Being released in 2008, the original Microsoft Surface runs on Windows Vista, which is somewhat outdated right now. After reading Joshua Blake’s blog post dating back to September 2011 on how he managed to run the Windows 8 Developer Preview on the original Microsoft Surface, I decided I’d take on the challenge of putting Windows 8.1 onto it. This blog post details the steps I’ve taken to get everything up and running, hopefully providing enough insight into what’s needed to accomplish this yourself as well.
Creating some space
Similar to what Joshua did, I did not want to get rid of the original Operating System running on the device (especially since I didn’t know whether this whole endeavor was going to work out). Installing Windows 8.1 side by side next to the Windows Vista installation requires shrinking the volume to create some space for the Windows 8.1 installation. To do so, click on Start, right-click on Computer and select Manage. On the left side of the Computer Management console, click on Disk Management under Storage to view your existing disk configuration. You should see your C drive taking up most of the space, with some space assigned to the recovery partition of the Microsoft Surface unit. Right-clicking on the C partition and selecting Shrink Volume will cue the calculation of free space that can be removed from the partition to create a new one for the Windows 8.1 installation.
Note that if you have extensively used the device before, you may not be able to shrink enough space to install Windows 8.1. I’ve chosen to assign 80GB to the Windows 8.1 partition, so I would have enough room for apps and games, but you may choose less (I advise at least 50GB). If you can’t clear enough space, try defragmenting your disk before trying to shrink the partition, as defragmenting should clean up your disk by moving all the data to the beginning of the disk, leaving more room to clear at the end. Once you’ve shrunk the partition, you can leave the unallocated space as is, as the Windows 8.1 installation will create a partition for us in that space.
Installing Windows 8.1
Now that we have the space we need to install Windows 8.1, we can commence doing so. It’s really up to you as to how you want to install Windows 8.1, but I recommend creating a bootable USB drive through Rufus, as it’s the fastest way I know to create one. Also, make sure you install 32-bit Windows 8.1, as it’s going to make our life easier in the long run and there’s no real point in installing 64-bit on this hardware. Now, the tricky thing here is that you will need to modify the boot order in the BIOS to be able to successfully boot from the USB drive. By default, the Surface has a BIOS password on it, which I can’t share here for obvious reasons. If you’ve never obtained it before, contact the Business Desk for assistance. Once you’ve changed the boot order in the BIOS, go ahead and plug in the USB disk and commence the Windows 8.1 installation to the unallocated space on the disk.
After installing Windows 8.1 install Microsoft XNA Framework Redistributable 3.1 and turn on the .NET Framework 3.5 (includes .NET 2.0 and 3.0) feature.
Getting the Surface Shell and applications up and running again
Once you have Windows 8.1 all installed and configured, it’s time to get the Surface Shell and applications back up and running. Luckily, we have kept the Windows Vista partition intact, which allows us to access the SurfaceRuntime.exe installer in the D:\SurfaceInstallers folder (assuming D is your Windows Vista partition now). The problem here is that the installer has verification in place that prevent installation on anything other than Windows Vista with .NET 3.5 installed. Luckily, we can reuse the instructions described in Brian Peek’s blog, which was initially written to install the Surface 1.0 SP1 SDK on x64 machines. Here’s what you need to do:
- Copy the SurfaceRuntime.exe file from your Vista partition over to a new folder
- Open up a Command prompt as Administrator and extract the contents of the executable to a new folder, e.g.:
C:\SurfaceInstallers>SurfaceRuntime.exe /extract C:\SurfaceInstallers\SurfaceRuntime
- Next, extract the individual files from the MSI that was extracted from the executable, e.g.:
C:\SurfaceInstallers\SurfaceRuntime>msiexec /a SurfaceRuntime.msi /qb TARGETDIR=C:\SurfaceInstallers\SurfaceRuntime\Extracted
- For the next part, you will need to install the Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1, the only thing you will need is the .NET Development Tools under Developer Tools -> Windows Development Tools
- Once installed, go to the installed folder of the SDK (C:\Program Files\Microsoft SDKs\Windows\V7.0\bin) and install Orca.Msi
- Start Orca and open up the SurfaceRuntime.msi file from the Extracted directory (make sure you don’t open the one above that) and drop the following rows from the LaunchCondition table: Installed OR (VersionNT=600 AND ServicePackLevel>=1) and Installed OR VISTASKU=”Business” OR VISTASKU=”Ultimate” OR VISTASKU=”Enterprise”. Make sure you press Save and close Orca
- Now proceed with the installation of the MSI you have just altered to install the Surface Runtime files
Last, but not least, we need to either recalibrate the Surface 1.0 unit or, if you don’t have that magnificent calibration board (anymore), copy over the calibration data from our Windows Vista installation:
- Reboot the machine and select the Windows Vista installation from the boot loader.
- Log on the Microsoft Surface unit as an administrator.
- Open the %ProgramData% folder, and then copy all *.DAT and *.HSH files to a removable USB flash drive.
- Click Start, enter regedit, and then press ENTER.
- In the left pane, expand HKEY_LOCAL_MACHINE, expand SOFTWARE, expand Microsoft, expand Surface, expand v1.0, right-click Calibration, and then click Export.
- Give the file a name, and then export it to the removable USB flash drive.
- Reboot back into the Windows 8.1 installation and copy the *.DAT and *.HSH files to the %ProgramData% folder and import the registry file you have created.
If all is well, you should now be able to run Surface Input and Surface Shell consecutively and should have a working Surface Shell and can start installing the Surface applications again.
Getting touch interaction across Windows 8.1 up and running
(Part of) the reason of this journey is to take advantage of all the great apps and games Windows 8.1 has to offer, but it won’t do us any good as it stands, as touch interaction through the Surface 1.0’s hardware isn’t working out of the box. Luckily, there’s a project on Codeplex called Multi-Touch Vista, which will enable this functionality when installed. So, the easiest way to get this working (in my opinion) is to have Visual Studio 2008 installed on either the Windows Vista partition of the Surface 1.0 unit or, similar to what I did, have a Virtual Machine with Windows Vista and Visual Studio 2008 installed available. The reason I chose to use a virtual machine is because I didn’t want to install Visual Studio 2008 on my Windows Vista partition (for no obvious reason) and I had already created the virtual machine previously to do Surface 1.0 development (forgetting that te Surface Simulator doesn’t work in a Virtual Machine, which I remembered the hard way).
So here’s what we need to do:
- Make sure you have the Windows SDK installed on the machine you will use to compile Multi-Touch Vista, along with the XNA Framework Redistributable 3.1
- Get the latest source for Multi-Touch Vista and unpack the ZIP
- Open Multitouch.Framework.sln, switch to Release mode and build the solution (uncheck the Multitouch.Framework.WPF.Tests project in the Configuration Manager if you’re using Visual C# Express)
- Open Multitouch.Driver.sln, switch to Release mode and build the solution
- Open Multitouch.Service.sln, switch to Release mode, open the Multitouch.Service.Console project Properties and change the Output path on the Build tab to ..\Output\ and build the solution
- Open Multitouch.InputProviders.sln, switch to Release mode, make sure the SurfaceInputProvider project is checked and the TouchLibProvider project is unchecked and build the solution
- Open Multitouch.Configuration.sln, switch to Release mode and build the solution
- Now that we’ve built all the projects, ZIP up the Output and Multitouch.Driver\Multitouch.Driver\x32 folders and extract on your Windows 8.1 installation on the Surface 1.0 unit
- Open up a command prompt as an Administrator, navigate to the driver directory and run Install driver.cmd
- Run the Multitouch.Service.Console.exe executable from the Output folder and open up the Multitouch.Configuration.WPF.exe application
- Select Microsoft Surface under Available devices and click on the blue arrow in the middle of the screen to activate the Surface Input Provider
Now, to test everything, run the Multitouch.Driver.Console.exe executable (making sure Multitouch.Service.Console.exe is still running) and if everything went well you can now control Windows 8.1 with touch (make sure Surface Input is running, of course). YAY!
The finshing touches
If you’re lazy like me, you don’t want to run Surface Input, Multitouch.Service.Console.exe and Multitouch.Driver.Console.exe every time you boot up Windows 8.1 on your Surface 1.0 unit. Luckily, Multi-Touch Vista comes with a way to install itself as a service, allowing for automatic startup when Windows boots. To do so, open up a command prompt as an Administrator and navigate to the C:\Windows\Microsoft.NET\Framework\v4.0.30319 folder. From that folder, execute the following command:
To run the service automatically, open up services.msc, find the service and change the startup type to Automatic. Also, as the service allows you to control Windows 8.1 through touch, make sure the Allow service to interact with desktop checkbox is checked on the Log On tab.
If you want to go full lazy-mode, follow these steps to automatically login the user account you have been using so far, making it so booting up the Surface 1.0 unit in Windows 8.1 results in a full automatic login. For me specifically, this seems perfectly acceptable, as there’s little chance someone will break into my house to do unwanted things on the Surface 1.0 unit.
That’s it! You can now use Windows 8.1 on Microsoft Surface 1.0 with touch, so start downloading some great apps and games to have some fun! As usual, let me know if you have any questions, comments or general feedback in the comments section below or via Twitter!