property REINSTALL should be set only when we apply a PATCH
with
11dd1094cb5452a8b61ad6bd284ba9517d3d869a I introduced
REINSTALL=ALL in the Property table, because without this MSP
patches did not work as expected -- some files were not patched.
I found "The file represented by File table key 'foo.bar' has
no eligible binary patches" lines in the log, and I did not find
a better solution. I'll revisit the problem later, maybe file versioning
can be changed. Windows Installer usually ignores the fourth digit in
version numbers, and we bump the the fourth digit only (i.e. 3.6.10.304 ->
3.6.10.520).
However, when upgrading a patched 3.6 to 4.0, REINSTALL=ALL strikes back.
Windows Installer passes REMOVE=ALL argument to 3.6 package, but REINSTALL=ALL
takes precedence, so 3.6 will not be removed, but reinstalled! 3.6 and 4.0
both will be installed, there will be an entry for each in Add/Remove Programs
Control Panel applet.
So I made REINSTALL=ALL conditional, and as a side effect, normal MSI
packages built from PTF branches will be fully useable again. If REINSTALL
is set for a product that is yet to be installed, no installation action
will take place at all. It really makes sense to selectively enable it
only for patches. I'm sorry that I did not figure this out earlier.
Change-Id: Ic05dc66579c60f1eb599baf6be4289b22301cebe