How does REINSTALLMODE work on patch installations?



I would like to know what MSI engine does during installation of a minor
update when we force it to install with REINSTALLMODE=amus and
REINSTALL=ALL? The status message in the progress dialog says its "copying
files..." before even applying the patch files, so i want to know how this
process works when we change the REINSTALLMODE from command line? Does the
msi engine first reinstall everything from the original source media and
then apply the patch?

Also, i opened the msi file in Orca, clicked on "View Patch", selected the
..msp file and in the File table, i find most of the SequenceNumber being
changed even for the files that are not getting patched? Why would the .msp
file change the sequence number of files that its not patching?

Can someone please explain this?

Thanks in advance.



Thanks, but i am aware of that. We had other issues that forced us to use
the "amus" mode to force MSI to prompt for the source media. I am just
curious to know how MSI treats this option on a patch installation? In the
MSI documentation for REINSTALLMODE help, it says "The option codes for this
property correspond to the command-line option '/f'." and i was wondering
what would it be for the /p command line option? If the reiinstallmode is
"amus", would it restore every file back from the source media and then
apply the patch?


Carolyn Napier [MSFT]

REINSTALLMODE has affect in any install transaction (initial install, repair,
reinstall, on-demand install, patch application). The application of a small or
minor update patch is really done in the context of a product reinstall. The
affect of using "amus" is that you discard all file version rules. Thus every
file affected by the REINSTALL property setting will be updated. What actually
happens depends upon the authoring of your patch.

If your patch contains a full-file update for a file, then the Installer won't
go to the source to get it. If your patch contains a binary delta for a file,
then whether or not the source is actually accessed depends upon (1) the file on
the machine and (2) the files the delta is capable of updating. If the file on
the machine can't be patched using the delta, then the Installer will go grab
the original from the source location and work from there.

Prior to MSI 3.0, you also have cases where files not directly affected by the
patch are updated. This is because patching prior to MSI 3.0 was treated as a
product repair... so unversioned files and other files may be installed new. In
doing so, the Installer will access the original source location to obtain them.

As for the question as to why the MSP file would change the sequence numbers of
the files it's not updating, the answer most likely lies in your update package.
Each patch file (MSP) consists of a set of transforms. The set contains two
transforms, one called the authoring transform and one called the patch-specific
transform. The authoring transform is simply the delta between the target image
package and the update image package. It's like running msitran.exe on the two.
The patch specific transform is managed directly by patchwiz. The only way the
sequence number would be altered by patchwiz in the patch specific transform is
if the file will be serviced using a full-file update. In addition to altering
the sequence number for those files (thus ensuring that it points into the
patch's cabinet), patchwiz also alters the attributes to include
msidbFileAttributesPatchAdded. This ensures that the Installer knows that the
file is always coming from compressed media (the patch cabinet).

Hope this helps,
- Carolyn Napier
Microsoft Windows Installer Team

This posting is provided "AS IS" with no warranties, and confers no rights.
Please do not send email directly to this alias. This alias is for newsgroup
purposes only.


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question