My WiX installer (Wix 3.10, MSI 4.5) uses MajorUpgrade
for updating. The files to be installed are harvested with heat.exe
in pre-build. The current (older) msi file contains a file nlog.dll
(which came with a NuGet package v4.1.0
) that has a file version of 4.1.0.0
, a product version of 4.1.0
and last write time of 2015-09-01
.
Since the nlog team ran into some strong naming issues, they published an updated NuGet package v4.1.1
, containing an updated nlog.dll
with its file version decreased back to 4.0.0.0
while its product version has been increased to 4.1.1
, last write time is 2015-09-14
.
Now I'm running into a related issue as Robbie did here: wix major upgrade not installing all files: When I install the new msi package and the major upgrade is performed, the present nlog.dll
(which is newer according to its file version, but older according to its file date and product version) is being removed, but the new nlog.dll
isn't installed.
However, using Schedule="afterInstallExecute"
or Schedule="afterInstallFinalize"
as suggested won't do the trick for me. Instead of removing the newer file and not installing the older one as in Robbie's case, it doesn't overwrite the present file, and just leaves it in place.
Long story short, I would like my installer to simply install all files that come with it, regardless of any file/product/assembly versioning stuff. There are valid circumstances in which replacing a newer file with an older one is desired. Can't you just tell the installer engine to ignore file versions/dates? If not, what are my options?
You can set the REINSTALLMODE property to AMUS instead of OMUS. This will affect all components globally.
The other trick is to use "version lying". This is where you author the file element with a higher version. Using heat can make this difficult as now you have to transform the XML before compiling it.
Of course the real solution is to hit the nlog team over the head. But based on what I've seen from them over the years it'll never happen. Perhaps you just use a resource editor to hack the DLL and 'fix' the version #. That's assuming you don't need it strong named. This feels dirty and a possible CM nightmare to me though.
Or just dump nlog. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With