There are different restrictions for patches based on what type of patch is to be installed. There are three types of patches:
For information about restrictions for each type of patch, read Changing the Product Code.
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.