I am seeing a very strange issue with patches on msi 2.0, our patches seem to work fine, yet none of the files on the disk are replaced.
I tried regenerating the patches with the 2.0 toolset , but that did not help.
For MSI20 Patches, you will need to pass property REINSTALL=ALL.
You can omit REINSTALL=ALL with MSI30 and higher as it is smart enough to detect which features has changed.
More sophisticated patching users add a type 51 custom action to set the
before CostInitialize. Each of these was conditioned on the PATCH property. You could just set REINSTALL to ALL, but could cause resolve source issues for files you’re not even patching. These patching users keep track of the features their updating when they generate our patches then set the REINSTALL property to that comma-delimited list. That list is only the features they’re updating so that they don’t have the chance of resolve source issues for unpatched features.
Content credit also belongs to