How can I perform a custom action in WiX that only executes on install or uninstall?

Alan Spark picture Alan Spark · Jul 1, 2013 · Viewed 16.7k times · Source

I have two custom actions, one of which I'd like to execute when my product is installed and the other when it is uninstalled.

My custom action is currently called from a merge module after the "InstallFinalize", but this happens for both install and uninstall. I've tried adding the "NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE" condition, but that gave me an error:

Error 2762. Cannot write script record. Transaction not started.

I've also tried attaching to other actions (for example, UnpublishComponents), but I can't find any that are unique to install or uninstall.

How can I fix this problem?

Answer

Dimiano picture Dimiano · Jul 2, 2013

Try next
1. Only for Installation:

<InstallExecuteSequence>
<Custom Action="SomeAction" After="InstallFinalize">NOT Installed AND NOT REMOVE</Custom>
</InstallExecuteSequence>

2. For Uninstall try to use: Rob's answer

UPGRADINGPRODUCTCODE property is set only during RemoveExistingProducts CA.