A blog by someone with not much to say.

Category: Windows Installer

Automated Patch Building with WiX and Visual Studio

I’ve said previously that I generally prefer to implement major upgrades with each release and try not to worry about patching. I think it makes for a cleaner installation and is easier to manage. I mentioned in this post a way to update your installation by simply chaining an additional msi to your WiX bootstrapper. While that certainly is possible it feels a bit of a hack, and if you are fortunate enough to have authored your msi correctly from the beginning, you could use more traditional patch creation techniques. Until recently I haven’t had to create patches. While software companies are becoming more agile, there is a greater need to release software more often and deploy those updates online. I feel this creates a bigger need for patches. Furthermore, if you are developing a patch, you need an automated way of incorporating it into your build process so that it can be tested with each build.   After working through this process recently, I thought I would share a method of automatically generating a patch with each build of your installer project. Read the rest of this entry »


Custom WiX Managed Bootstrapper Application

I put together a sample project to show the minimum code needed to create your own managed bootstrapper application using WiX. I wrote it in C# using the MVVM pattern. This is indeed a bare bones example and if you are serious about writing your own managed bootstrapper application, you should download the WiX 3.6 source code and follow their example (see src\Setup\WixBA).

My solution contains three projects (can download the full source here).

  • TestBA:  The bootstrapper UX.
  • BootstrapperSetup:  The main bootstrapper executable that lists the packages to be installed.
  • DummyInstaller:  A dummy .msi that gets installed by the bootstrapper.

Read the rest of this entry »

Lazy Patching in WiX 3.6

With the upcoming release of WiX 3.6, I like to share about how I have used Burn to implement patching using a process I like to call lazy patching. Now I’ve never been a big fan of creating patches. I prefer to implement major upgrades and change the version number and product code with every build.  That said, I have a requirement to be able to install a patch and have only a few files get modified. Since I am versioning each dll with every build, I can’t use traditional patching techniques of comparing two .msis because each binary would get modified (even if by only a few bits).

Thanks to Burn, we can easily create a Bundle that includes all of our prereqs and packages to be included in a single product deployment. In my WiX Bootstrapper project, I include a RelatedBundle element and specify the UpgradeCode as its Id. So version of MyProduct will have the following bits in Bundle.wxs:

Read the rest of this entry »