Citrix Synergy Barcelona 2012 Keynote Live Blog

Citrix Synergy has returned to Barcelona, Spain. That means that I will be live blogging the keynote again this year.

Citrix Synergy has returned to Barcelona, Spain.  That means that I will be live blogging the keynote again this year.  Last year in Barcelona and earlier this year in San Francisco, Citrix talked a lot about public/private/personal cloud.  I am looking forward to see som fruition out of their vision.  I also fully expect Mark Templeton to have “one more thing” at the end of the keynote as well.  Stay tuned… Continue reading “Citrix Synergy Barcelona 2012 Keynote Live Blog”

Virtual Desktops and Applications are not as important as you think

We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud. It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.


We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud.  It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.

Applications are useless without data

Take a word processing application for example. Without data, the word processing application is really stupid. As soon as you start typing a document, you are creating data.  The application is just a mechanism for creating or consuming data.  And, in a lot of cases, this data is interchangeable between applications.  In other words, it is the data that is important – not the application.

Applications are just a data access layer

I like programming and a staple of any good programming language is object orientation. One of my favorite design patterns is called a façade pattern. The definition of façade is “the face of” something. So a façade in this case is the face of an object. The “face” is easily switched out, but the underlying objects remain the same (loose coupling).

Let’s relate this to applications. Applications are the façade to the data. Let’s take our word processing example again. I personally use Microsoft Word (for Windows and Mac), Google Docs, and iWork Pages. All these programs access the same data and they are easily switched out, so they are the face of the data. Dropbox (and more recently GDrive) keep my data where I need it, so those things are completely different facades to the exact same data. I can get my data on a fat client, web, mobile, offline, etc.

Consumerization and Cloud is driving the trend

Mobile devices have exploded and BYOD is gaining popularity. These 2 trends are directly associated with user demand – not IT demand. Brian Madden put it well on – “The new reality: The IT department has to compete against every random app & website out there!”

Let’s look at another example that is more consumer related.  When I purchase an online book from Amazon, I’m paying for the data (book).  I then have a choice of interchangeable applications that can be used as the face of the data – many versions of the Kindle, multiple iOS applications, multiple Android applications, multiple Windows applications, etc.)  The application is much less important than the data.  Consumers are getting used to freedom of choice and everything “just working.”  The same will creep into the enterprise and IT will need to cope.

So now what?

Windows applications aren’t going anywhere anytime soon, so we’ll still be delivering those for quite some time. However, I see where the application is less important and we’ll be thinking more about data security, offline data, application and platform choice (Windows, Mac, Linux, mobile, web, etc.), data integrity, etc.  Or, perhaps I’m way off here.  What do you think?

Further Reading

VDI, ok? What’s next? Stephane Thirion

The VDI Party is Over. Benny Tritsch

Citrix Synergy Day 2 Keynote Live Blog

It is day 2 of Citrix Synergy 2012 and I’ll be live blogging the event. For highlights from yesterday’s keynote, check out this post.  This keynote should be a bit more demo oriented about current products rather than future-focused.  Stay tuned… Continue reading “Citrix Synergy Day 2 Keynote Live Blog”

Citrix Synergy 2012 Live Blog

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote again this year. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements and mobility improvements.

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote here. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements, mobility improvements, and desktop management. Continue reading “Citrix Synergy 2012 Live Blog”

Smooth Roaming + Responsive Design

In this post, we look at adding session reconnection event handling to our responsive design prototype using the Citrix XenApp Mobile Application SDK. Be sure to check out the video of the prototype.

In a previous article, we looked at using responsive design with enterprise applications by utilizing the Citrix XenApp Mobile Application SDK. Jonathan Chin left an interesting comment about hooking up an event handler to apply the responsive design to a reconnection event.  So, I decided to investigate doing just that and, as it turns out, it isn’t that hard.  

In the previous version, the responsive design code only kicked in on session initiation (i.e. logon) – meaning if you started a session on a fat client and then reconnected to the session on a mobile device, then the fat client display would show up on the mobile device. We don’t want that. So, by catching the reconnection event, we can re-style the app at any point (session initiation or reconnection). Start the application on a fat client and then reconnect via a mobile device and the mobile style will kick in (and vice versa).

Here’s the bit of code to take care of it (if you don’t care about the code and just want to skip to the download, just follow this link):


private static extern bool WTSRegisterSessionNotification(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)]int dwFlags);

private static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);

private const int NOTIFY_FOR_THIS_SESSION = 0;
private const int WM_WTSSESSION_CHANGE = 0x2b1;
private const int WTS_REMOTE_CONNECT = 0x3;
private const int WTS_REMOTE_DISCONNECT = 0x4;
private bool registered = false;

protected override void OnHandleDestroyed(EventArgs e)
    // unregister the handle before it gets destroyed


protected override void OnHandleCreated(EventArgs e)
    registered = WTSRegisterSessionNotification(Handle, NOTIFY_FOR_THIS_SESSION);

protected override void WndProc(ref Message m)
    if (m.Msg == WM_WTSSESSION_CHANGE)
        if (m.WParam.ToInt32() == WTS_REMOTE_CONNECT)
            // The session is in the reconnect state, so style the app for the new session

        if (m.WParam.ToInt32() == WTS_REMOTE_DISCONNECT)
            // The session is in the disconnect state, so close the CMP if it is open
            if (this.cmp != null && this.cmp.IsChannelOpen())
                catch {}
    base.WndProc(ref m);


Try It Out Yourself

Want to try it out yourself?  I have made the program and the source available so you can beat it up and come up with some more ideas.  You can download it here.


Responsive Design for Enterprise Applications

Responsive Design that web developers use can now be applied to Enterprise Applications thanks to the Citrix Mobile SDK. This post will give you a glimpse of what is possible to get your wheels turning.

Have you heard of Responsive Web Design?  The term was coined by Ethan Marcotte in his article on A List Apart.  The gist of the idea is that web pages can be designed to adapt or respond to the entity that is viewing it.  The Boston Globe’s website is a good example of responsive design.  You can see by the screenshots below, that given enough screen real estate, the website has a 3 column layout.  But, as the screen width starts to shrink, the layout is adjusted to 2 columns and then 1 column.  Also, the navigation changes to better suit the layout and images are adjusted or hidden.


Applying Responsive Design to Enterprise Applications

Just like web pages, enterprise applications are starting to get viewed on a myriad of devices.  What if we could take some of the same techniques web designers are using and apply that to enterprise applications?  Well, as it turns out, we can with the help of the Citrix XenApp 6.5 Mobile Application SDK.  By using the Mobile Application SDK, enterprise applications that are hosted on a XenApp 6.5 server can respond to the type of device using the application.

Responsive Application Example

As an example, I wrote an application that takes data from EdgeSight about the types of Citrix clients used in an environment.  The application displays this information in a chart as well as a table.  I then published this application from AppCenter on a XenApp 6.5 server and launched it using a fat client.  You will notice that both the chart and the data table are shown as well as a menu strip at the top to select a chart type.


Now, if you launch the exact same application from the exact same server using a mobile device, some very interesting things happen:


  1. Only the chart is shown initially.  If you rotate the device, only the data table is shown.
  2. The application’s window chrome is gone.
  3. The width and the height of the application were changed to the width and height of the device.
  4. Tapping the chart image brings up the device’s native picker.
  5. Changing the orientation of the device changes the display.

Check out this short video for a demo:


Try It Out Yourself

Want to try it out yourself?  I have made the program and the source available so you can beat it up and come up with some more ideas.  You can download it here.


Installing and Using the Citrix XenApp 6.5 Mobile Application SDK

In this post, we will go over the installation steps of the Citrix XenApp 6.5 Mobile Application SDK, explorer what is added to the XenApp 6.5 server during installation, and compile one of the samples given in the SDK.

Now that we have setting up an Android emulator out of the way, let’s take a look at installing the Citrix XenApp 6.5 Mobile Application SDK and what the install does to a XenApp 6.5 server.

There are 2 parts that you need in order to develop applications that utilize mobile capabilities on a XenApp 6.5 server:

  1. The XenApp 6.5 Mobility Pack – this is the part that goes on the XenApp 6.5 server.
  2. The Citrix XenApp 6.5 Mobile Application SDK – this is the part you use to develop mobile applications.


XenApp 6.5 Mobility Pack

When you install the Mobility Pack, 2 new services are added to your XenApp server:

  1. Citrix Location and Sensor Virtual Channel Service – this service enables a server side application to leverage Location and Sensor capabilities.
  2. Citrix Mobile Receiver Virtual Channel Service – this service enables a server side application to use mobile device capabilities.

These 2 virtual channels are kept separate for security reasons.  Maybe you want to have mobile device capabilities available, but you cannot enable GPS features due to security compliance.  Location services are disabled on the Citrix Receiver by default. The way to enable the location capabilities is via Citrix policies.  In order to use these policies, you will need to install the Citrix Group Policy Client-Side Extensions.  These extensions are part of the XenApp Mobility Pack .zip file.

This policy is located under ICA\Client Sensors\Location. Notice that by default, location is disabled.


Citrix XenApp 6.5 Mobile Application SDK

So, the requirements for the Citrix XenApp 6.5 Mobile Application SDK state that you need Windows 7 64 bit (and the MSI is even named XenApp65MobileApplicationSdk64), but it installs to ..\Program Files (x86)\Citrix\MobilitySDK\.  I tried installing the SDK on a Windows 7 32 bit system as well and it worked, so I’m not sure if something absolutely will not work on 32 bit.

I’m using Visual Studio for the examples.  It appears that Visual Studio Express (free) will work as well, but I haven’t tested that myself.

Anyway, the documentation that comes with the SDK is pretty comprehensive so I’m not going to rehash it here.  Since I will be showing you some of the examples using .Net, I do want to point out that you will need to run one of the following commands on your development machine in order for things to work:

Regsvr32 cmpcom.dll
Regsvr32 cmpcom64.dll

Notice that there is a 32 bit or a 64 bit DLL register. So again, not sure why Windows 7 64bit is a requirement for development. Anyway, make sure you run the appropriate command above as administrator, otherwise you may receive an error stating “The module was loaded but the call to DllRegisterServer failed with error code 0x80070005” (which is a permissions error).

Compiling Examples

The final part of this article will focus on compiling and using the examples that come with the SDK.  The one I’m going to point out here is the picker example.  This example uses the native device’s UI to display a list of options.  The example is actually a console application that has no graphics, so it is actually using the local device’s display mechanisms rather than trying to do some trickery on the XenApp server side.  So, here we go…

  1. Browse to \Program Files (x86)\Citrix\MobilitySDK\samples\native\showpicker
  2. Double click on showpicker.sln to open the solution in Visual Studio
  3. Build the solution by pressing F6
  4. This will create an executable in \Program Files (x86)\Citrix\MobilitySDK\samples\native\Win32\Debug\showpicker.exe
  5. Copy this showpicker.exe to your XenApp 6.5 server (I copied mine to \Program Files (x86)\Mobility\picker\showpicker.exe)
  6. Publish the application via Citrix AppCenter
  7. Launch the published application using an Android device (or emulator) with the latest Citrix Receiver installed.

NOTE: You may receive an error message that states “The program can’t start because MSVCR100D.dll is missing from your computer…”  Here’s why – the solution was built in debug mode.  Thus, debug DLL’s (notice the “D” in the DLL name) need to be on the XenApp 6.5 server.  Here is what you can do:


  • From: \Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll on your development machine
  • To: \Windows\SysWOW64\msvcr100d.dll on your XenApp 6.5 server
You could technically build the solution in Release mode instead of Debug mode and be okay, but to perform remote debugging, you will want to have the debug DLL on your remote machine.  Speaking of debugging, here are 2 great write-ups on how to debug the mobile applications:


The Result

Here is what the end result looks like.

Once you pick one of the colors, the console application will give you feedback on the chosen item.  When the appropriate receiver is available for iOS, then the native iOS selector would be shown with no code changes on the developer’s part.  That is pretty cool!

In the next article on this topic, I will show you how to use mobile device orientation to change what is displayed to an end user.  The example will include data and graphics.  Stay tuned…

Setting up an Android Emulator for use with Citrix XenApp 6.5 Mobile Application SDK

One of the coolest SDKs I’ve seen come out in quite a while is the Citrix XenApp 6.5 Mobile Application SDK. As of this writing, only the Android version of the Citrix Receiver is supported so I will show you how to set up an Android emulator with the Citrix Receiver for testing purposes.

One of the coolest SDKs I’ve seen come out in quite a while is the Citrix XenApp 6.5 Mobile Application SDK. Citrix defines the XenApp 6.5 Mobile Application SDK as “… a rich tool kit for developers to write touch-friendly, mobilized applications that are hosted on Citrix XenApp and delivered to any device with Citrix Receiver. These mobilized applications are able to leverage a wide set of mobile device functionality including GPS, sensors, cameras, and device buttons in the same way that locally running, native applications do.”

As of this writing, only the Android version of the Citrix Receiver is supported (iOS is on the way).  Since I do not own any Android devices and I was anxious to get started, I had to set up an emulator and install the Citrix Receiver to get going with the SDK.  Here is how I did it.


Install the Android SDK

Go to the Android SDK download page ( and pick the correct installer for your platform. I’m using Windows, so I chose the .exe installer file.  After you run this .exe, you still do not have the emulator.  The reason for this is the Android SDK archive initially contains only the basic SDK tools. It does not contain an Android platform or any third-party libraries. You must install the Platform-tools and at least one version of the Android platform using the SDK Manager.

Android SDK Manager

I installed the Android SDK Platform-tools and all options for Android 4.0.3.

After the install completes, be sure to add %ProgramFiles%\Android\android-sdk\platform-tools to your PATH environment variable.  This will be handy later for installing the Citrix Receiver.


Create an Android Virtual Device

After the installs complete, you can launch Android Virtual Device Manager (AVD Manager). This can be found in the Windows start menu under Android SDK Tools \ AVD Manager. AVD Manager is used to create various virtual devices running the Android OS.

Android Virtual Device for XenApp 6.5 Mobile Appliction SDK
As you can see, I created an Android 4.0.3 device with 100 MiB of local storage. The more storage you add to your AVD, the longer it will take to boot. Since this AVD is only being used for XenApp 6.5 testing, I only allocated 100 MiB. The first boot of your AVD will take a little longer than subsequent boots.


Download the Citrix Receiver for Android

Now that we have a functioning Android emulator, we need to get the Citrix Receiver installed. The first thing we need to do is download the .apk (Android Package) file. Normally, I would just go to and choose “Android”. But, as of this writing, when you do that, you are redirected to the Android Marketplace. Unfortunately, Android Marketplace does not work on the Android Emulator. So, here is what you can do instead:
Go to and choose “Receiver for Android” from the drop down list. From there, you can select the Android client and download the .apk.


Install the Citrix Receiver for Android

Ok, so now we have a functioning Android emulator and the Citrix Receiver downloaded. The final step is to install the Citrix Receiver onto the emulator. Here’s how:

  1. Copy the .apk file to %ProgramFiles%\Android\android-sdk\tools
  2. Open a command prompt and change the directory to %ProgramFiles%\Android\android-sdk\tools
  3. With the AVD you created running, execute the following command:
adb install <name of Citrix Receiver>.apk

Citrix Receiver for Android


You now have a fully functional Citrix Receiver running on an Android emulator.  My next post shows you how to set up a development environment to utilize the Mobile Application SDK and compile some of the examples.


It is official. I have joined Splunk!

With the new year comes a new direction for me – I have officially joined Splunk as a Solutions Architect.

I am very happy to announce that I have officially joined the team at Splunk as a Solutions Architect.  As many of you may already know, my website is a place where I share a few articles and a lot of open-source code.  Most of the code I have distributed from this website is mainly focused on giving you insight into what is going on in your Citrix environments (Web Interface for Resource Manager, Web Interface Access Control Center, Configuration Logging, Project Raley, etc.)  Although I get ideas for these projects from the community and my own professional experiences, all of the code has been developed on my own personal time as a hobby and community contribution.

Turning a Hobby and a Passion into a Job

All that being said, joining Splunk allows me to turn a hobby and a passion into a full-time job.  On top of that, I get to work with a close friend, co-presenter, and fellow CTP/MVP Brandon Shell on a daily basis.  We will be working on building Splunk solutions around the Citrix Enterprise stack.

What Lies Ahead

This website is going to stick around and I’ll be writing more articles and open-source code.  I also plan on writing some Splunk articles here and on the official Splunk blogs.  I’m looking forward to what’s ahead!

Citrix Synergy Barcelona 2011 Keynote Live Blog

Citrix Synergy 2011 is going on now in Barcelona. I’ll be live blogging the event here. Expect to see more information about recent Citrix acquisitions.

Citrix Synergy 2011 is going on now in Barcelona. I’ll be live blogging the event here. Expect to see more information about recent Citrix acquisitions. I will be tweeting the event as well. Be sure to follow @CitrixSynergy if you are not already. Continue reading “Citrix Synergy Barcelona 2011 Keynote Live Blog”

Citrix Acquires ShareFile – a Citrix Service Provider Perspective

Citrix Systems recently completed the acquisition of a company called ShareFile. In this post, I take the perspective of a Citrix Service Provider (CSP) and dream up some ways that ShareFile could be used to add value to CSP subscribers.

Citrix Systems recently completed the acquisition of a company called ShareFile.  ShareFile provides several services including file synchronization among many devices and creating custom-branded, password-protected space where you can exchange business files with clients easily and securely.

Brian Madden wrote an analysis on this acquisition already, but I wanted to share how this service can be used to supplement a Citrix Service Provider’s (CSP) architecture. 

File Transfer to the Cloud

One challenge that many CSP subscribers face is data upload to the cloud.  Now, Citrix has client drive mapping that can help transfer files from the subscriber’s local workstation to the CSP cloud, but explaining the nuances of client drive redirection to subscribers can be a challenge.  Plus, the Citrix virtual channel for client drive mapping is not optimized for file transfers.

Now, image if the subscriber had a special folder on their workstation where they can put a file and it “magically” shows up in the CSP cloud.  That would be cool and ShareFile makes this possible (to be fair, DropBox could be used to do the same thing).


Mobile Device Synchronization and Offline File Access

People use multiple devices to access CSP cloud resources.  Imagine ShareFile synchronization components being available as a Citrix Receiver plugin.  Then, certain files could be made available on mobile devices.  Picture this, you need to access an Excel spreadsheet you created in the CSP’s cloud from your iPad and you do not have WiFi or 3G access available.  Normally, you would be out of luck.  But, if this file was synchronized to your iPad via ShareFile, you would have mobile offline access to the file. 

Sharing Files with non-CSP Subscribers

ShareFile allows you to create a custom-branded, password-protected space where you can exchange business files with clients easily and securely.  This is kind of ShareFile’s forte.  CSP subscribers oftentimes want to share a file beyond the boundaries of the CSP’s firewall.  ShareFile makes this as easy as sending an email.  Since everything is encrypted along the way, could this also be used as a make-shift email encryption mechanism?  The following graphic depicts all the pieces together:




Citrix XenApp 6.0 to XenApp 6.5 PowerShell Upgrade Utility Under the Hood

Citrix recently released XenApp 6.5. However, there is not a way to do an in-place upgrade from XenApp 6.0 to XenApp 6.5. This means that the Citrix administrator will have to uninstall XenApp 6.0 components and install XenApp 6.5 components. Citrix released a PowerShell utility to help in this process, and in this post I break that utility down into a Visio flowchart to you can understand what is going on behind the scenes.

Ever since I was a kid, I liked taking things apart.  Citrix recently came out with a PowerShell tool to help administrators turn XenApp 6.0 servers into XenApp 6.5 servers because unfortunately (or fortunately depending on the way you look at it), there is no in-place upgrade option from XenApp 6.0 to XenApp 6.5.

This utility is a PowerShell script that performs the following:

  • Checks to see if XenApp 6.0 is installed or not, and if the XenApp 6.5 installer is available.
  • Prompts for a password to silently run the install process after reboot.
  • Uninstalls XenApp 6.0 components. By default these include the Online-Plugin, Management Consoles, and XenApp Application Delivery role. Other components are included in the script and can be enabled for automatic removal.
  • Installs XenApp 6.5 and, by default, joins the server to the farm as a worker.
  • Verifies the join is successful by checking to see if the IMA service is running.
I think this script is really cool so I had to take it apart to see just how the script was doing these things.  I made some notes in the form of a flowchart and have provided the flowchart here for your viewing pleasure.


– or-
Click the picture below for .gif image of the flowchart

You can download the tool from Citrix’s website ->

Export and Import Citrix XenApp 6 Published Applications Using PowerShell

Exporting and Importing published applications in Citrix XenApp used to be a tedious process. Now, thanks to XenApp PowerShell Cmdlets, this process is much easier and more flexible. No uber scripting skills needed.

Exporting and importing Citrix XenApp 6 published applications using PowerShell is super easy. In this article, I will show you how to export all or some of your XenApp 6 published applications into a XML file. Then, I will show you how to import those applications while overriding certain application properties like Worker Group and Server Names.

note Note: before you get started, be sure to check out this post on how to install the Citrix XenApp 6 PowerShell Cmdlets.


Exporting Citrix XenApp 6 Published Applications

The first thing we need to do is export some published applications from an existing XenApp 6 farm. In this example, I will only export applications in a certain folder instead of the entire application inventory.

Get-XAApplicationReport * | ?{$_.FolderPath.StartsWith("Applications/Testing")} | Export-Clixml c:\testingApps.xml



So, there are 3 parts to this export.

  1. Get-XAApplicationReport gets all properties of a published application. If you are familiar with MFCOM, the Get-XAApplicationReport command is similar to calling LoadData(1) on an application object.

    FYI – There is a command called Get-XAApplication, but that command doesn’t get all properties of a published application.

    Anyway, if you don’t use the Get-XAApplicationReport command, you won’t get all your application properties and you will be sad.

  2. ?{$_.FolderPath.StartsWith("Applications/Testing")} looks at each application object that Get-XAApplicationReport returns and filters out all applications whose folder path does not start with “Applications/Testing”.

    Note to Citrix – it would be nice to have some filtering built into the Get-XAApplicationReport command. You will notice in the example, that I have to get all the published applications in a farm and filter out what I do not want. That is a pretty expensive operation. It would be better to just get what I want from the get go.

  3. Export-Clixml saves it all to a XML file called testingApps.xml.


Importing Citrix XenApp 6 Published Applications

Now that you have the applications exported to a XML file, you can import those applications to another farm. Here is one way to do this:

Import-XmlCli c:\testingApps.xml | New-XAApplication -ServerNames [servers] -WorkerGroupNames $null

The cool thing about this is that you can override settings during an import. For instance, the original farm I exported from had published applications assigned to Worker Groups rather than Servers. In the destination farm, I want to publish the applications to Servers rather than Worker Groups. You can actually override a multitude of properties during the import process which will make your life easier.

note Note: if you do not create the folder structure beforehand, you will get the following error when you try to import:

New-XAApplication : Cannot find folder with path Applications/Testing (0x80160001)
At line:1 char:70
+ Import-Clixml C:\testingApps.xml | New-XAApplication <<<<
    + CategoryInfo : InvalidResult: (Applications/Testing:String) [New-XAApplication], CitrixException
    + FullyQualifiedErrorId : ComApp.GetFolderId,Citrix.XenApp.Commands.NewAppCmdlet

So, check out this article on migrating a folder structure.