Virtualization Review: App Virtualization Key for Windows Server 2003 Migrations

Virtualization Review highlights Spoon as a solution for customers needing to upgrade applications
following the end of Microsoft support for Windows 2003 on July 14, 2015.

They suggest that Windows applications can be easily and smoothly moved over to a new operating environment without requiring changes to the applications themselves. Is it time for companies still waiting to migrate to pay attention and take this approach?

Recently, I’ve had conversations with Kenji Obata, CEO of Spoon, about migrating desktop applications… [Obata] can point to a large number of customers who have successfully made the transition and are now breathing a sigh of relief. The customers can then take their time working on a reasonable, cost-effective transition strategy rather than feeling like they’re under the gun to move quickly.

Read the entire article here

NEW: Continuous Integration on is now continuously integrating popular web browsers, programming languages, servers, build tools, test frameworks, and other applications directly into the Spoon Hub!

Spoon CI provides users with instant, containerized access to the latest versions to 40 of the most popular desktop applications, servers, and tools from around the web. Spoon CI automatically detects when new versions of these applications are available and creates Spoon images automatically using SpoonScript.

For example, developers can now test drive the latest, bleeding edge Chromium Canary or Firefox Nightly build in an isolated environment, with nothing to install or uninstall. And other key servers and tools ranging from Apache, Nginx, and NUnit to NuGet, Grails/Groovy, and WordPress are always up-to-date.

SpoonScripts for all of these automated builds have been open sourced on GitHub. You can view them or submit your own at

And soon you’ll be able to define personal containerized CI tasks for personal use or as part of Spoon Teams. Stay tuned and remember to follow us at @spoonapps for the latest news!

Spoon Hosted CI Projects


Languages and Frameworks


Build and Configuration Management



Web Applications


Santos Achieves Enterprise Application Continuity with Spoon

Santos, a major Australian energy producer, came to Spoon needing a way to allow their employees to continue using a critical Oracle Hyperion business system across a company-wide desktop operating system upgrade. They implemented a Spoon solution for over 2,0000 desktops based on Spoon containerization. Santos Senior Desktop Systems Engineer Andrew McAlpine describes the outcome:

Our Oracle Hyperion went in Monday night, after a lot of work was done to migrate the back end. Has been a resounding success!

We’ve also implemented a Spoon’d version of a complex suite of engineering related software, one that has a .NET 4.5 incompatibility. Adding .NET 4.0 to the container was a breeze and our deployment has become a much easier proposition.

We’re now working on Access 2010 and Excel, which will allow us to move forward with updates to our SOE while maintaining some critical business functions that can’t move with for the time being.

Rabbit out of a hat, your product has been a revelation for us.

Spoon Server 3.5.231 now available!

This Spoon Server update incorporates numerous reliability improvements as well as the following new features:

  • Integration with the latest Spoon VM and Spoon Client components (see here for VM and Client update details)
  • Support for SSL certificate chain files
  • Configurable authentication token timeout periods
  • Significantly improved portal performance

In addition, Spoon Studio has been updated to patch version 12.0.340.16 to fix regressions in the previous patch update.

Spoon Server users on an active maintenance contract can access the latest Spoon Server by logging into their account.

This update is strongly recommended for existing users as it incorporates numerous virtual machine compatibility fixes. For customers that need to renew maintenance, please contact the Spoon Sales Team for a renewal quote.

New in Spoon

The latest version of the Spoon Client includes the following new features and updates:

  • Compatibility updates for Windows 8.1!
  • Containers automatically request escalation if required. The –admin flag is no longer required.
  • Support for NTLM and Kerberos authenticated proxies
  • Support for IPv6 container links
  • New spoon inspect command displays container contents
  • New –using flag in the run command allows layering of temporary images
  • Can now use directory tokens (such as @DESKTOP@) within –mount path specifications
  • Simplified –mount command allows a single parameter if both source and destination are the same
  • Name and version resolution behavior is now consistent across all commands
  • SpoonScript includes ability to clear environment variables

This update also includes patches for the following bugs and compatibility issues:

  • Crash while running Microsoft SQL Server 2008
  • IIS Express could fail to correctly serve static files
  • Compatibility with Java diagnostic tools such as jps and jstack
  • Incomplete or incorrect stdout and stderr stream captures
  • Incorrect command-line parsing in some cases when using  command-line flags
  • Improved command-line error handling and reporting
  • UDP port routes could be incorrectly interpreted as TCP
  • Fixes for environment variable isolation behavior
  • Improved status reporting during image synchronization
  • Fixes for intermittent image synchronization errors

The component versions in this release are:

  • Command processor: 1.4.1045
  • Spoon VM: 11.7.8

Spoon Studio 12 Released!

We’re happy to announce the release of Spoon Studio 12!

This release includes critical compatibility updates for Windows 8.1 as well as many performance and usability improvements, including:

  • Support for Windows 8.1!
  • Improved compatibility with with anti-virus software (stub executable path selection)
  • Improved Service Control Manager virtualization, including ability to “net start” and “net stop” within the virtual environment
  • Fixed resolution of registry conflicts when importing registry keys into a configuration
  • Improved error messages for configuration errors
  • Compatibility fixes for SQL Compact Edition

Spoon customers on an active maintenance contract can retrieve their Spoon Studio 12 license by logging into their account.

For customers that need to renew maintenance, please contact our sales team for a renewal quote.

Containerized Selenium Testing

Using containers, setting up and running a Selenium Grid has become a breeze. This lets you focus on your tests, not the challenges of Selenium Grid setup.

The Problem

We’d like to test our web application using multiple versions of Internet Explorer, Firefox or Chrome, in an automated manner, using Selenium.

The usual route to go is to setup a Selenium Grid and add multiple machines as nodes, each having a different version of Internet Explorer, Firefox or Chrome installed.

While this works, there are several important drawbacks:

  • It is necessary to setup and maintain multiple machines
  • Tests execute slower due to network latency between grid nodes
  • Troubleshooting tests requires connecting remotely to each node

Containers to the Rescue!

Using containers, we eliminate all of these problems. No setup is required and the entire Selenium Grid can be run on a single machine — even locally on the developers’ own boxes!

First, lets launch the Selenium Grid using a Spoon container:

spoon try base,selenium-grid

Here we are using the try verb since we want to dispose of the test environment when execution is completed.

Then we launch the nodes we want to test with. In this case, I picked IE9 and IE10:

spoon try base,spoonbrew/ie-selenium:10,selenium-grid-node node ie 10
spoon try base,spoonbrew/ie-selenium:9,selenium-grid-node node ie 9

That’s it! The grid is ready and we can launch our tests pointing to the URL http://localhost:4444.
Screen Shot 2015-01-08 at 14.08.20
Screen Shot 2015-01-08 at 14.13.46
Note that the command-line interface also makes it very easy to script node and grid launches, for example as part of an automated build system.

Web Interface

If you’d rather not use the command line interface, there’s also a complete web interface available at

The Spoon Selenium interface offers a simple one-click launch of an entire Selenium Grid:


The web interface also allows you and your teammates to view and share logs of test executions, including Selenium commands and screenshots of the executing tests:


Thanks for reading and hope you enjoy the new containerized Selenium Grid on!

  • IMG_1883
  • IMG_1875
  • IMG_1915

Spoon Winter Hackathon 2015

A cross section of the Spoon engineering team is in Florida at our annual winter Hackathon. Spoon Hackathons bring together our distributed team for one-two weeks of concentrated coding, bonding, and escape from winter climates.

Spoon on Herding Code with Jon Galloway

Microsoft’s Jon Galloway meets Kenji in San Diego to talk about Spoon, an application containerization and streaming platform for Windows. They discuss different virtual machine approaches, Spoon’s features, the container movement, and flying airplanes.

Ship Your Apps to Azure RemoteApp with Containers

Azure RemoteApp is a new cloud service from Microsoft that allows RDP-based access to individual Windows desktop applications running in the Azure cloud. In this walkthrough, we’ll explain how to use Spoon containers with RemoteApp to allow individual desktop applications to be deployed and managed on Azure.


Why containers?

Azure RemoteApp supports deployment of custom applications and environments via uploading of VHD (virtual hard drive) images. These images contain both the base operating system and all installed user applications. While this allows complete customization of the OS environment, it requires creation and management of a complete server OS image (called a “RemoteApp Template Image”) for each set of applications, application versions, and configuration variants. When an individual application is updated, the entire OS image must be updated.

With containers, individual applications can be deployed to a single base Azure image. New applications can be deployed to the Azure cloud instantly without changing the base Azure image. When an application is updated, only the container for that specific application needs to be updated. And a single base Azure image can support many different sets of applications, user entitlements, and even multiple configurations of the same application.

Combining Spoon containerization with Azure RemoteApp dramatically increases the power and flexibility of RemoteApp for end users by allowing instant access to applications. Spoon containers also simplify administration by requiring management of just a single RemoteApp Template that can then host any set of individual application containers.

Here is how to set it up!

What you’ll need

Azure Settings
  • If you are new to Azure and you do not have a thumbprint, follow these instructions under the “Use Certificate Method” to generate your Thumbprint.
  • Create or identify the Azure Storage account that you will be using to store your VM templates. When creating a Storage account be sure to select the right location so that it will match your RemoteApp deployment.
Azure Storage

Getting Started

Add the Azure RemoteApp Services module

First you need to add the RemoteApp PowerShell modules to your environment. Download the Azure RemoteApp Services zip. Next go to the properties of the file and select Unblock. This is important otherwise when you extract the DLLs, they will be blocked and any scripts that attempt to load the DLLs will fail.

Unblock Files

Unzip the files into a local directory like C:\RemoteApp. Close any PowerShell windows that are open. Run Azure PowerShell as Administrator, go to the directory where the files were unzipped and install the new module.

Set-ExecutionPolicy Unrestricted
cd C:\RemoteApp\AzureRemoteAppServices

Keep PowerShell open and move on to the next step.

Connect to your Azure RemoteApp account

There is a Publisher Settings file that you need to import in order for the PowerShell environment to be connected to your Azure account.  Use the Get-AzurePublishSettingsFile to download the file and the Import-AzurePublishSettingsFile to import it into your environment.

Import Publisher Settings

Create a PowerShell script file, C:\RemoteApp\RemoteAppSetup.ps1, with the following content.

Import-module AzureRemoteAppServices
Set-AzureRemoteAppSubscriptionId <Azure Subscription ID>
Set-AzureRemoteAppCertificateThumbprint <Thumbprint of the Management Certificate>
Set-AzureRemoteAppServiceUrl -Url
Set-AzureRemoteAppRdfeNamespace RemoteApp
Set-AzureRemoteAppRdfeMode $true

Run the following command in PowerShell:

Load RemoteApp Modules

Keep PowerShell open and move on to the next step.

Setting up the RemoteApp Template

The RemoteApp template that will be used for the RemoteApp service is based on a virtual machine image. To create the virtual machine image, we will first instantiate a new virtual machine instance.

Create the Virtual Machine Image

The RemoteApp team has provided a starting point for this VM instance that has the RDSH role and other Azure RemoteApp services already configured.  Here is the command to use to create this VM.

New-AzureQuickVM -Windows -ImageName "ad072bd3082149369c449ba5832401ae__Windows-Server-Remote-Desktop-Session-Host-on-Windows-Server-2012-R2-20140920-1926" -ServiceName <NewServiceName> -Name <NewVmName>  -AdminUsername <adminusername> -Password <pswd> -Location <location of the Service> -MediaLocation <URL of the OS VHD Blob which will be created in your storage account>

A more concrete example with actual values:

New-AzureQuickVM -Windows -ImageName "ad072bd3082149369c449ba5832401ae__Windows-Server-Remote-Desktop-Session-Host-on-Windows-Server-2012-R2-20140920-1926" -ServiceName spoondemo-ara-vm -Name spoondemo  -AdminUsername spoondemo -Password password -Location "West US" -MediaLocation

When the command finishes, a virtual machine instance will appear in the Azure Management Portal.

New Virtual Machine

Configure the Virtual Machine

Now that we have the VM created, we just need to configure it and convert it into a static VM image.

  • Connect to the VM
  • Open Internet Explorer and go to
  • Login to your account and click the Download link on the home page
  • Download and install the spoon-plugin.exe
  • Open a command window and verify that everything is working as expected by running Sublime Text from the Hub
> spoon login <username>
> spoon run sublime-text

 Run Sysprep

Now that the VM is configured, there it needs to be prepped before converting it to an image.

  • Run and elevated command prompt (Run as Administrator)
  • Run the following sysprep command
%windir%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown

Once the sysprep command completes, the VM will shutdown.

Create the Virtual Machine Image

Back in the Azure Management Portal, select the virtual machine instance and click on the Capture link at the bottom of the page.

This will create a new virtual machine Image. Be sure to note down the name of the new image that you created.

Virtual Machine Image

Create a default RemoteApp Service

Before converting the VM image into a RemoteApp template, I had to create a RemoteApp service using an available Microsoft Template. I’m not sure if this is a bug, but the following step would not succeed until I created a RemoteApp service. Again, be sure to select the right Region. In this example, I chose the Basic plan with just Windows Server 2012 R2 as the template image. Provisioning may take up to 30 minutes, but you do not have to wait for it to complete before moving on to the next step.

 Default RemoteApp Service

Convert the Virtual Machine Image into a new RemoteApp Template Image

The Azure RemoteApp team has provided a PowerShell script, Import-AzureRemoteAppTemplateImage, that will import the VM image we create earlier into our RemoteApp template images. Download that text file and save it to C:\RemoteApp\Import-AzureRemoteTemplateImage.ps1. Note the file extension.

Run the following command in PowerShell

C:\RemoteApp>.\Import-AzureRemoteAppTemplateImage.ps1 -AzureVMImageName <your VM image name> -RemoteAppTemplateImageName <new RemoteApp template name>

Here is a concrete example:

C:\RemoteApp>.\Import-AzureRemoteAppTemplateImage.ps1 -AzureVMImageName spoondemo-image -RemoteAppTemplateImageName spoondemo-remoteapp-template

When this process completes, the template image will be available in the list of RemoteApp templates in the Azure Management Portal.

RemoteApp Template Image

Configure the RemoteApp Service

Create a new RemoteApp Service

Now that the customer RemoteApp template is complete, it is listed in the available templates when creating a new RemoteApp service. Use that template to create a new service.

List of Templates

Publish the Spoon Console Application to the RemoteApp Collection

Once the service is created, it’s time to publish the applications for the user.  In this case, we will use the Publish programs using path option.

Publish using path

Enter the name, Spoon Console, and the path to the command prompt. The Spoon Console is available on the system path.

Add Spoon Console


After the process completes, you will see the console as a published app.

Spoon Console Published

Test the Spoon Console using the RemoteApp client

Provide users access to the RemoteApp Collection

Under the User Access section you can add users that can access the applications.

User Access

Testing the RemoteApps

If you don’t have the RemoteApp client, download the appropriate client for your device and install it. When you run the RemoteApp client and login, you should see the application that are available to you. In the Windows client you should see something like this.


Double click on the Spoon Console icon to run the application. This will launch a command window that is running on the Azure Cloud environment.

Run applications from the Spoon Console

Normally the applications that the user can run is limited what was originally installed on the virtual machine we configured earlier, but with the Spoon Console, we can run any application that is available on the Hub.

> spoon login <username>
> spoon run sublime-text
Run Sublime Text

Some other applications you might want to try:

> # Surf the web with Opera
> spoon run opera

> # Do some coding in Python
> spoon run python

> # Edit some text files with Atom
> spoon run atom

Thanks for reading, and I hope this makes helps your Azure RemoteApps deployment!