Advanced Installer supports two ways of updating an already installed application:
An upgrade is an uninstall of the previous version of the application, followed by an install of the current version. Its advantage is that it can be applied both on computers that have the older version installed and those that don't have it. Its main disadvantage is size: it has to include the complete installation package.
Patches are usually much smaller than upgrades, as they only contain the diffs between the two versions of the product. However, they can only be installed on computers that have the previous version already installed.
Because of the way a patch is applied to a Windows Installer package results in the installation of the original sources using a new MSI file, the new MSI file must remain compatible with the layout of the original source. When authoring a patch package you have a number of restrictions.
- Do not change the primary keys in the File table between the original and new MSI file versions.
- Do not move files from one folder to another.
- Do not move files from one cabinet to another.
- Do not change the order of files in a cabinet.
- Do not change the Component GUID for any Component.
- Do not change the name of the Component's key file because this would require changing the Component GUID.
- Do not reorganize the existing hierarchy of Features and Components. A new Feature can be added, but if a parent Feature is removed, all its child Features must be also removed.
- Do not remove Components from a Feature.
- The Target and Upgraded MSI packages must have the same name.
- The Target and Upgraded MSI packages must have the same Product Code.
For a more comprehensive list of rules that must be followed, visit:
When creating patches, it is not recommended to use Synchronized Folders. This will lead to file sequence mismatches and/or changed Component GUIDs between the target and upgraded MSI packages, if for instance, at least a file is deleted or renamed on disk.
Advanced Installer strives to respect all the rules, but due to the involved complexity, success is not always guaranteed. Because of this it is recommended to use patches only for minor updates, that do not change the Product Code and to test the patch throughly in various installation scenarios.
You can author a patch from a Patch project.
If you are building an EXE package with the files inside, you need to extract its contents in order to create a patch. In order to do so, you will use the "/extract" command-line option of the bootstrapper, as specified here.
Note that, when applied, the patch will request the original MSI package (because, by default, the bootstrapper deletes the extracted files). In order to avoid this problem, select the option "Do not delete extracted MSI and CAB files" in the Build page, "Configuration" tab.