General Information:
We use WIX 3.10.3 to build both our Base Msi and Patch Msp.
Supports Windows Installer version 301
Patch is build using Purely Wix method as documented.
Root Cause for the issue:
Base Msi contained a file named "Sample.dll" with version as 1.0.0.0 and language as "neutral". While building patch, WIX considered there was change to the contents of Sample.dll but the version is retained as "1.0.0.0" and language as "neutral".
Sample.dll used for Patch creation, even though there was no change to the contents but some how we were able to identify there was binary change when compared with the base and the msp dlls used for creation. Refer below screenshot from Beyond Compare
Beyond Compare Snapshot of the DLL's included for MSI and MSP
During installation of Base and then patch, as per Windows Installer File Versioning rules(https://msdn.microsoft.com/en-us/library/windows/desktop/aa368599(v=vs.85).aspx), the file "Sample.dll" was not re-installed by patch since the version and language are same. Hence while removal of patch, windows installer requested the source of the msi. This is causing uninstallation failures at our customers as the sources of the msi are not available during uninstall.
Here's a blog entry which said this issue is identified in Windows installer version 301 (https://blogs.msdn.microsoft.com/heaths/2007/06/28/unchanged-files-break-patch-uninstall
).
We had already tried updating the installer version support to 405 in WIX and still the problem occurs.
Here the patch creation considers the Binary change between the base msi and patch msi to create the Msp whereas windows installer considers File versioning rules while installing.
Is there some changes that could help avoid such scenarios and how to ensure that only really changed files are considered for patch creation and installation?