The Upgrade table contains information required during major upgrades. To fully enable the installer's upgrade capabilities, every package should have an UpgradeCode property and an Upgrade table. Each record in the Upgrade table gives a characteristic combination of upgrade code, product version, and language information used to identify a set of products affected by the upgrade. When the FindRelatedProducts action detects an affected product installed on the system, it appends the product code to a property specified in the ActionProperty column. The RemoveExistingProducts action and the MigrateFeatureStates action only remove or migrate products listed in the ActionProperty column.
The Upgrade table contains the columns shown in the following table.
The UpgradeCode property in this column specifies the upgrade code of all products that are to be detected by the FindRelatedProducts action.
Lower boundary of the range of product versions detected by FindRelatedProducts. Enter msidbUpgradeAttributesVersionMinInclusive in Attributes to include VersionMin in the range. If VersionMin equals an empty string ("") it is evaluated the same as 0. If VersionMin is null, FindRelatedProducts ignores msidbUpgradeAttributesVersionMinInclusive and detects all previous versions. VersionMin and VersionMax must not both be null.
VersionMin must be a valid product version as described for the ProductVersion property. Note that Windows Installer uses only the first three fields of the product version. If you include a fourth field in your product version, the installer ignores the fourth field.
Upper boundary of the range of product versions detected by the FindRelatedProducts action. Enter msidbUpgradeAttributesVersionMaxInclusive in Attributes to include VersionMax in the range. If VersionMax is an empty string (""), it is evaluated the same as 0. If VersionMax is null, FindRelatedProducts ignores msidbUpgradeAttributesVersionMaxInclusive and detects all product versions greater than (or greater than or equal to) the lower boundary specified by VersionMin and msidbUpgradeAttributesVersionMinInclusive. VersionMin and VersionMax must not both be null.
VersionMax must be a valid product version as described for the ProductVersion property. Note that Windows Installer uses only the first three fields of the product version. If you include a fourth field in your product version, the installer ignores the fourth field.
The set of languages detected by FindRelatedProducts. Enter a list of numeric language identifiers (LANGID) separated by commas. Enter msidbUpgradeAttributesLanguagesExclusive in Attributes to detect all languages exclusive of those listed in Language. If Language is null or an empty string (""), FindRelatedProducts ignores msidbUpgradeAttributesLanguagesExclusive and detects all languages.
This column contains bit flags specifying attributes of the Upgrade table.
Bit flag name Decimal Hexadecimal Attribute msidbUpgradeAttributesMigrateFeatures 1 0x001 Migrates feature states by enabling the logic in the MigrateFeatureStates action. msidbUpgradeAttributesOnlyDetect 2 0x002 Detects products and applications but does not remove. msidbUpgradeAttributesIgnoreRemoveFailure 4 0x004 Continues installation upon failure to remove a product or application. msidbUpgradeAttributesVersionMinInclusive 256 0x100 Detects the range of versions including the value in VersionMin. msidbUpgradeAttributesVersionMaxInclusive 512 0x200 Detects the range of versions including the value in VersionMax. msidbUpgradeAttributesLanguagesExclusive 1024 0x400 Detects all languages, excluding the languages listed in the Language column.
The installer sets the REMOVE property to features specified in this column. The features to be removed can be determined at run time. The Formatted string entered in this field must evaluate to a comma-delimited list of feature names. For example: [Feature1],[Feature2],[Feature3]. No features are removed if the field contains formatted text that evaluates to an empty string (""). The installer sets REMOVE=ALL only if the Remove field is empty. Note the difference between an empty string and empty field. If the field is empty, it is null.
When the FindRelatedProducts action detects a related product installed on the system, it appends the product code to the property specified in this field. The property specified in this column must be a public property and the package author must add the property to the SecureCustomProperties property. Each row in the Upgrade table must have a unique ActionProperty value. After FindRelatedProducts, the value of this property is a list product codes, separated by semicolons (;), detected on the system.