This is a MSI Property. On MSDN:
The REINSTALLMODE property is a string that contains letters specifying the type of reinstall to perform. Options are case-insensitive and order-independent. This property should normally always be used in conjunction with the REINSTALL property. However, this property can also be used during installation, not just reinstall. By default the REINSTALLMODE is “omus”.
This property is added automatically in an Install Shield project. It’s not the same as ReinstallMode. It’s only related in the following way. During reinstall, the Maintenance Type Dialog will copy the value from ReinstallModeText to ReinstallMode.
REINSTALLMODE vs ReinstallModeText
A couple weeks ago I was helping another developer who tried to solve an issue with an installation package. When the installer is run, certain dlls are not being updated. These dlls have the following characteristics:
- The dlls in the package and on the target system are both versioned and the version numbers are the same.
- The dlls in the package have newer modified date than the dlls on the target system.
MSDN has a nice flowchart and documentation that describes the file replacement rules for versioned dlls. The relevant information to the story is that, when an installer calculates whether a versioned file will be copied to target system, only the version number and the language will be considered. The modified date of the files will not be considered. Since the version numbers and the language of the dlls did not change, the files were not copied.
There are two ways to resolve this
1. The developer who created the versioned dlls should increment the version number when the dll is changed. In my opinion, this should be done regardless of the installer issue.
2. Change the REINSTALLMODE property from the default of omus to emus. The e option specifies that a file will be copied if the file is missing, or is an equal or older version.
Option 2 was chosen at the time because there are many dlls in the package that could have this issues, and checking all the dlls and recompiling the dlls with incremented version number can’t be done quickly enough to resolve the installer issue. The developer proceeded to update the install shield project. In the install shield project’s property manager, the ReinstallModeText is already defined with omus and REINSTALLMODE is not defined anywhere.
An unsuspecting developer could easily be mistaken and just update that ReinstallModeText property, and that was what happened. After spending some time to investigate this, we found out the root cause. Everything worked as expected after we manually added the REINSTALLMODE property and set it to emus
Hope sharing this little story will help someone saves some time.