I've been so heads down running FireGiant that my attendance on StackOverflow has decreased signifcantly. However, someone who answers a fair number of MSI related questions on StackOverflow asked me a question to clarify his understanding. I started to answer but realized that it could be a useful blog post. So let's try to answer "Remove information about installed product".
First of all, it isn't clear why the questioner wants to know when the advertised product information is removed. So for the sake of this discussion I'm going to assume you're here just because you'd like to understand a little bit more about how the Windows Installer works.
Second, if you don't know what advertisement is then this isn't the blog post for you. You might start by digging into the MSI SDK Advertisment documentation.
With the context set, let's get to the answer.
When you advertise an MSI, like
msiexec.exe /jm my.msi, the Windows
Installers sets the
ACTION property to
advertise action causes the Windows Installer to process the
AdvtExecuteSequence instead of the sequence you
are likely more familar with
That fact is probably what leads to the question. If you look at
the allowed actions in the AdvtExecuteSequence
you'll notice that there are only "publish" type actions, no "unpublish"
type actions. That's an important hint. The
AdvtExecuteSequence is not
used for uninstall.
In fact, that makes complete sense because to remove an advertised product
msiexec /x my.msi. The
/x basically sets
ALL then runs the
Awesome, so the answer is that there must be an
InstallExecuteSequence that removes the advertised product. Right?
Uhh, wait. There is no
UnpublishProduct. So, uhh, how does the published
product information get removed?
I have to admit. I had to go digging to find the actual answer. Can you
guess? We know it has to be an action in the
admittedly does not narrow down the list terribly much. It also probably
should be late in the transaction such that a hard failure doesn't put
the product in a state where where the Windows Installer thinks it is
removed but still has stuff from the product is still left on the machine.
That line of thinking is what led me to the answer. Turns out it is actually documented in the MSI SDK. Ladies and gentlemen, I present to you the remover of all product information: InstallFinalize.
Well, that was fun. Now get back to coding. You know I am.