Restrictions for Patches
There are different restrictions for patches based on what type of patch is to be installed. There are three types of patches:
- Small updates do not change the ProductVersion property of a target product and typically represent a small subset of files to be updated.
- Minor upgrades do change the ProductVersion property of a target product and typically represent a larger subset of files to be updated. Minor upgrades might also be installed as upgrade MSIs.
- Major upgrades change both the ProductVersion and ProductCode and contain all files in a product. Shipping major upgrades as a patch is, however, not recommended and WiX does not support building major upgrade patches because of the problems they create.
For information about restrictions for each type of patch, read Changing the Product Code.
Uninstallable Patches
For a patch to be uninstallable, the MsiPatchMetadata table must exist in the patch package and must contain the AllowRemoval property set to 1. This can be authored into the Patch Creation Properties file using the PatchMetadata/@AllowRemoval attribute or into the patch XML file using the Patch/@AllowRemoval attribute.
Beside that, certain tables cannot be modified in the upgrade package from which a patch is built. Read Uninstallable Patches for the current list of tables. Pyro.exe will error if one of these tables would be modified when building a patch XML file.
The following table lists tables and corresponding elements or attributes in WiX.
Table |
Element or Attribute |
BindImage |
File/@BindPath |
Class |
|
Complus |
Component/@ComPlusFlags |
CreateFolder |
|
DuplicateFile |
|
Environment |
|
Extension |
|
Font |
File/@FontTitle |
IniFile |
|
IsolatedComponent |
|
LockPermissions |
|
MIME |
|
MoveFile |
|
ODBCAttribute |
|
ODBCDataSource |
|
ODBCDriver |
|
ODBCSourceAttribute |
|
ODBCTranslator |
|
ProgId |
|
PublishComponent |
|
RemoveIniFile |
|
SelfReg |
File/@SelfRegCost |
ServiceControl |
|
ServiceInstall |
|
TypeLib |
|
Verb |
Major upgrade patches are not uninstallable.