With ZRCola we renumbered the component GUIDs to group them by platform/
language. However, they are the very same files and calling
RemoveExistingProducts after the upgrade is finished treats those
components as orphaned and removes the just installed files.
Fortunately, if we sequence the RemoveExistingProducts before the
upgrade, it completely removes all components then installs the new
ones. Unfortunately, sequencing RemoveExistingProducts before the
upgrade is sub-optimal on minor upgrades.
This commit extends the InstallExecuteSequence table key to allow the
same custom action appear multiple times and introduces conditioning.
This way the upgrade process can switch between "remove old, install
new" and "install new, remove old" strategy in run-time based on a
condition. The condition is usually a property from the Upgrade table
that is bound to a product upgrade GUID that requires "remove old,
install new" to upgrade properly.
Signed-off-by: Simon Rozman <simon@rozman.si>
MSI has a very simple icon support (it loads only single image out of
available image set, it always loads the first one or the one with the
exactly specified 16/32/48px size...). Therefore GUI icons were
simplified to contain 64x64px image only and MSI controls updated to use
centering/down-scaling.
The maintenance dialog (Change/Repair/Remove) is a bit more convoluted.
We'd need to replace the radio-button selection with a three push-
buttons solution to make things easier. To make things worse, Change and
Repair don't seem to require elevation. Only Remove. This would make the
three push-button solution look ugly. Fortunately, not many people
wonder into the maintenance dialog. Therefore, we shall leave things
there as they are for the time being.