Aaron
Stenber has a rather
interesting article discussing a novel approach used to author recent Microsoft packages such as
Silverlight 1.0 and the .NET Framework 2.0SP1/3.0SP1.
Basically these setups are authored as fake
MSI's that then get Major Upgrades applied as patches. The
UI is outsourced to an external
UI handler and the whole thing is packaged up into a custom self-extracting
bootstrapper.
I have to admit, when I first read the article my first reaction was something along the lines of `What the heck???`. The design is so different to other servicing stories that I've seen that I had to email a trusted friend of mine for his reaction. His answer to me was:
I don't think you're missing anything. My initial reaction is a mix of "wow, what a hack" and "does this mean they admit MSI's model is too limited?" The empty MSI + patch is cute, because it gets around InstallShield's lingering cache-web-download file problem, but it just highlights that MSI should have had better options for caching the original MSI rather than wasting one of your patches as a workaround. A custom bootstrapper, custom external UI code, etc., are the only way to make installs like this bearable.
I want to be honest, I'm trying to keep a very open mind with this design. I am somewhat saddened that it has come down to this. I sometimes find myself wishing that merge modules and concurrent installs worked. It would be so nice if you really could isolate and package all of your third party dependencies into a nice, clean, single
MSI package that could be loaded into a GPO advertisement. It would also be nice if GPO could understand how to apply transforms and/or set public properties. It would be nice not to have
chainers and external
UI handlers and to not have to decide how our servicing strategy would be in advance.
A Look
at the Windows Installer Tao Part 4 shows:
Rule 41: Design and Test Your Servicing Strategy Before You Ship the Initial Product
Rule 42: Author Packages to Avoid Source Requirements During Patching
I guess in a sense this latest design is the ultimate expression of these two rules. For example the .NET 2.0SP1 performs a Major Upgrade of the 2.0
RTM and in effect calls a mulligan. For clean installs it basically accomplishes the initial deployment by using the expected servicing strategy thereby eliminating the potential pitfall of being in production before you figure out what your strategy will be.
Furthormore by not deploying components in the base
MSI you avoid running afoul of rule 42.
Still, a part of me is still scratching my head thinking "Wow, is this really how
MSI is meant to be?". After all, these packages look and feel to a Systems Administrator a lot more like legacy setup.
exe packages then
MSI packages. For example the Microsoft
Silverlight Deployment Guide makes no mention of GPO advertisements using
MSI. Instead they mention wiring a batch file up to a machine
starup script to fire the
exe from a
UNC path.
I sure would love to see a follow up discussion from various parties including the Windows Installer team. Is this just an ad-
hoc approach used by certain teams from within the Microsoft firewall or is this the future best practices that tools like
ISHNMET should be supporting?