This post will shed some light on how you can reliably install the Citrix Receiver client across your desktop environment with our old friend, the MSI wrapper. One of the projects I’m working on needed a solution to install Citrix Receiver into their desktop environment and, based on the frequency of that work, I thought it would be useful to share how I approached the problem and help you try this technique for yourself.
I prepared a boilerplate MSI installer you can download from GitHub or you can download the source files and dissect the methodology further. For a good introduction on how to use the MSI installer with nested installers, check out How to deploy the Citrix Receiver for Windows 10 via Microsoft Intune. While reading Aaron Parker’s PowerShell method, I learned that you could download the latest Citrix Receiver installer using a static URL. In the rest of this post, I’ll explain the Citrix Receiver use case in more detail and walk you through the steps.
What is The Problem?
Simple things, such as deploying system software to end-user devices, unsurprisingly comes face-to-face with a new set of constraints as businesses juggle multiple generations of software and deployment methodologies. In this quagmire, IT Professionals are wading hip-deep into some unusual solutions to navigate the murky waters. So here we’re are, hurtling through 2018, and one of the big trends I’m noticing is that businesses are eager to adopt Citrix Receiver for their modern desktop architecture. The usual culprits are security, remote access, and application compatibility that add this requirement to the vision. This use case illustrates some of the emerging nuances of deploying a modern desktop environment.
We also need to take seriously the fact that, end-users are increasingly opting for mobile work-anywhere computing devices. For IT Professionals, that means we need to anticipate and prepare to host applications and sometimes entire desktops when our users need remote access to their applications and data.
The majority of enterprise customers I consult with use Citrix for their virtual desktop infrastructure, which can vary in size, but is usually present when more than a thousand employees and contractors make up the organization. Naturally, this leads to questions about installing the Citrix Receiver client.
Citrix does have a modern Citrix Receiver in the Windows Store, but it lacks some of the functionality found in the legacy desktop client. To be fair, that isn’t entirely a problem with Citrix because the Windows 10 APIs were designed from a clean slate and don’t offer the same API surface area by design.
Downstream from Microsoft’s design decisions, the modern Citrix Receiver is restricted from offering features we’ve come to expect in the desktop client:
- Offline apps (virtualized)
- File type association
- Jabber VXME optimization pack
- Proximity/Contactless card (Fast Connect)
- Pass-through authentication
How Do We Proceed?
I recently discussed the new MSIX installer format and it might help fix some of these API issues with its package support framework, but the technology is still in beta so I doubt we will see any innovations in Citrix Receiver’s near future that overcome the shortcomings in the Windows Store version.
As a result, organizations are looking for solutions outside of the Windows Store.
As the Citrix Receiver story plays out for many businesses and the desktop client remains the preferred method, Windows AutoPilot throws a wrench into application deployment because we can no longer build custom images with system software embedded in it. Instead, we are forced to use Intune to customize the generic Windows configuration on the device to suit our needs and that includes software we typically put in the image.
If you’ve been in a similar situation, I have a feeling you’d point out that we could add Configuration Manager to support application deployment…but…you knew there was a ‘but’ coming. Many businesses don’t want to support Configuration Manager anymore and are already pushing the limits of a cloud-first solution.
Intune plays an important role within a cloud-first strategy, nonetheless, one of the common complaints I hear from IT Professionals is that it lacks support for legacy software installers over the Mobile Device Management protocol. Not cool.
No support for EXEs. No support for scripts. And MSI installers must be simple, i.e., don’t even try to use a complex set of source files that need to be transferred to the client.
Some of us have chosen to build simple MSI packages with nested installers while others are using DevOps tools such as Azure Automation with NuGet and Chocolatey Obviously the DevOps world is a bit of a departure from Intune for software delivery but. There is a PowerShell script component to Intune, but it’s hardly worth mentioning simply because it’s too simple and can’t perform any sort of state-based actions such as running a script until it succeeds.
Where’s the twist you ask? We’re getting there…
My goal was to build as simple an MSI package as I could while solving the Citrix Receiver problem. The solution, as I mentioned above, involves nesting software installers within the MSI package.
Fair warning, this isn’t the best practice for working with Windows Installer. But, when looking at the options I do see customers opting for this as a real-world approach to getting some of their legacy installers onto a Microsoft 365 device.
This approach to building an MDM friendly MSI Installer uses a simple single file MSI wrapper to install a problematic application installer as a dependency of the MSI. We get the problem of fixing the root installer format but what about keeping something up to date without having to manage updates to the root MSI and the application object in Intune?
One trick you can try, and it’s super handy, is to fetch the source files from the Internet so the installed version of the Citrix Receiver client is the latest version without having to constantly update the application object and MSI.
Ok, maybe not a game changer, but it’s still a great tool for your toolbelt and an approach you may need to solve other challenges bringing across legacy applications and settings to a Microsoft 365 device.
I’ve made sure to include Uninstall support in the package just in case you decide to remove it and go for the Windows Store version of the Citrix Receiver down the road.
I used Advanced Installer to build this MSI Installer because I like how easy the UI was for performing certain tasks such as adding scripts or prerequisite installers into an MSI package. Peter’s blog article describes the initial wizard sequence I used to build out my package but you can see that the majority of the magic in the package is all packed onto one screen. If I look at the Setup Files tab for the Citrix Receiver prerequisite you see the MSI being instructed to 1) download the source files from the internet then 2) various command line options are available based on the UI that is presented to the user or if the MSI is being told to uninstall from the system.
As you can see this makes quick work of embedding an external installer into your MSI installer so you can get on with deploying your applications.
Let’s Wrap This Up
I’ve put the source files (minus the code signing certificate) up on GitHub so you can completely recompile this solution from the source files to suit your needs or you can download the compiled MSI to experiment with in your test environment.
I’ve shown you some common tricks to overcome some of the limitations in Intune for delivering application installers over MDM. Please feel free to send me feedback via GitHub or firstname.lastname@example.org.