« July 2008 | Main | November 2008 »

Customized Installers Part Two – Enter WiX

Creating a single, fully customized MSI file for this customer wasn’t too hard for me to do in house. I had all the settings they wanted in the ngClientConfig file and I had Install Shield to create the MSI. But what happens when the next customer requires this? And what happens when this customer wants the latest version of our clients? It would be up to me to create the next installer for them. There had to be a better solution.

After a lot of looking, I found WiX. WiX uses XML to design everything about an MSI – from UI to contents, its all in the XML. This means that everything about an MSI could be scripted into the XML using code… or the CIA tool I had already created.

Updating the CIA tool to use WiX also meant that I could move beyond what was offered in the ngClientConfig file for customization and give people the ability to change other files that get installed with our clients. One customer for instance wants the ability to change the icons that are used in the system tray with NewsGator Notifier… now they can change these on their own and include their own custom icons in their own installer.

image

Giving IT departments the ability to configure and create their own MSI installers for each product is a huge step, but of course they wanted more…

Posted by Nick Harris on August 27, 2008 at 08:37 AM | Permalink | Comments (0)

Customized Installers Part One - The Problem

Writing desktop client software for enterprise environments presents some interesting technical problems. In the enterprise IT departments have the ultimate say on what servers a client can access, how it will access those servers, as well as what features are available for their end users.

At NewsGator, our solution was an XML file (our ngClientConfig.xml file) that holds all these configuration options. It has a section that holds global settings that all clients use as well as sections for each client and its specific options. Each client was then designed to look for this file in the same directory it’s installed in and set its own configurations accordingly.

This lead to a process of hand creating the ngClientConfig file, installing the client, copying the ngClientConfig file to the appropriate directory and finally running the client. This worked great… until we had our first enterprise customer.

An IT department rolling out thousands of desktop client installations doesn’t want a multistep process. One file that does it all was the next requirement.

My first solution was a self-extracting zip file that included a specialized batch file. When the zip file was executed, it would dump its contents on the client machine then run the batch file which would call the basic installer for the client, copy the ngClientConfig.xml file to the correct directory, and finally run the client.

In order to make it even easier for IT departments, I created an application we call the “Client Installation Administrator” or CIA tool. It’s laid out like a Windows wizard and steps you through setting up all the options in the ngClientConfig.xml file. The last step was then to create the ngClientConfig file, the specialized batch file and finally the self extracting zip (which is an exe).

This solution worked great for a while… until we came across an enterprise customer whose rollout procedure required a single, fully customized MSI file.

What to do now…

Posted by Nick Harris on August 26, 2008 at 10:56 AM | Permalink | Comments (0)