PDA

View Full Version : Files not copied after a patch installation



kirann_hegde
06-16-2013, 02:08 PM
Hello,

I am facing a strange issue where the files are not copied after a patch installation.
Up until now, we were delivering updated versions of our product using .msi(major upgrades). However, now we want to ship our updates using .msp files.

There are around 5 files in 5 different components. Each of these files are unversioned and are the key files for the respective components.
Somewhere during the product lifecycle, someone introduced entries for these files in the RemoveFile table, so that the latest version of the files is always copied during the upgrade process. I am not sure as to why this was requiered, as the File hashing for unversioned files should have allowed upgrading of these files, without requiring an explicit removal(using RemoveFile table) and installation using the InstallFiles . This was done when the upgrades were delivered using msi files.
All was working.

Now , we have decided to release updates to our product using a msp(patch ) file. However, it's surprising that the files are not re-installed during apatch.
i.e the remove file table deletes these files and the InstallFiles standard action does not restore them. I would have expected these to be restored as they are they key files for the respective components and missing key files to be restored.
The windows installer log files indicates that the corresponding components are marked for installation.

I also see the following snipped in the log file:
Allowing installation of component: {199327E3-7FBE-4D9F-8DED-38DBDEDEEC03} even though a modified unversioned keyfile exists and file versioning rules would disable the component

Is it because windows installer detected that the existing file on the disk was modified and decided not to replace it-atleast thats what the log message indicates.However, the Removefiles action goes ahead and cleans it whereas the InstallFiles does not do anything as the decision not to install the file was already taken earlier on in the Execute sequence.

Could someone explain to me as to why this behavior?

Regards,
Kiran Hegde

kirann_hegde
06-19-2013, 03:37 AM
Could someone comment on my question above?

Thanks,
Kiran Hegde

phill_mn
06-19-2013, 08:19 AM
Another way to look at this issue is that a patch is just a repair after a transform (the patch information) is applied to the msi. So the implication is that your REPAIR functionality also has a problem that should be addressed. You might want to set the patch aside and test the REPAIR functionality for a similar change to a file that you would expect to be 'repaired', with a verbose log.

Also take a look at the MSIENFORCEUPGRADECOMPONENTRULES property.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370093(v=vs.85).aspx