Installer woes

Despite being technically awesome, the documentation of the various WiX installer toolkit can be a bit…sparse. As such, I’ve spent time on and off over 3 days trying to understand what exactly the word “variable” means in reference to the Burn engine.

I had been trying to set a variable into my MSI with the path location, and for the life of me could not get the setup to pass the path I was setting in my custom UX. I was starting to question my worth as a programmer (actually no, but my curses at the engine were getting more and more elaborate), when I gleaned something from a StackOverflow topic I had come across on at least 15 different occasions.

My MsiProperty *was trying to set the value to a *preprocessor variable, not a Burn variable. They are different things and never the two shall meet. I had been confused because the documentation usually just refers to them as a “variable” interchangeably, not to mention never properly talking about how Burn variables are accessed, what they are, or really where they come from. Just don’t say there isn’t a list of them, because there certainly is!

Just to recap:

$(var.MyVariable) is a preprocessor variable.
It is defined by the WiX preprocessor as such

[MyVariable] is a Burn variable.
It is defined by the  presence of a element somewhere that is applicable

The latter of those is what you’ll want if you want to be able to do in your elements