Special place

That moment when you make a commit to the repository of the culmination of several days worth of grinding on a problem. This is me.

The extra special sauce being that it is one of the cornerstone modules so not only do I get to watch it build before I go home, I get to watch more or less the entire modular ecosystem build.

Tomorrow is integration day. I don’t think my heart can stand up to doing that tonight with no one around to help me support it.

Lessons learned

Learning lessons all day today it seems. Pretty sure I’ve learned these in the past…so obviously I’m not doing as well as I thought.

  1. When you write an MSI custom action that depends on stuff being there, make sure your custom action conditions are such that it doesn’t fire on an uninstall operation.
  2. Somewhat related: Don’t do your installer development testing on your workstation. It’s pretty much exactly what a throw-away virtual machine is for.

So here I am, trying to use MSIZap to clean up my workstation because I can’t uninstall a damn application.

[1] http://msdn.microsoft.com/en-us/library/aa370523%28v=vs.85%29.aspx

Windows installer [sucks]

So, for whatever reason, Windows Installer service doesn’t just install crap. Instead, it runs through all of the steps to an installation in some kind of imaginary sandbox thing and then it runs everything again on the live system.

Sure, all of this is probably well and good. You don’t want to be halfway to rearranging some filesystem only to decide that you need to roll back. If only it worked that way. When it does its practice install, it doesn’t actually write files or twiddle IIS or any of those fun sorts of things. Nope. It just pretends. Except for when it doesn’t.

Because if you want to schedule features or components for install, this needs to be decided in the practice stage. Also, if you want to set properties to be used in a later custom action, you need to do this here.

But then, explicitly, you cannot reference these properties in the second, live run. Why? Because it’s Microsoft?!

No, in order to get a reference, you need to dump them into a for-special place and then use a different, for-special mechanism for retrieving them.

It just doesn’t get much stupider.