I have noticed that in the InstallShield forums, there sometimes is confusion when it comes to properly using Windows Installer codes in creating the different types of upgrades for Basic MSI projects. Here is an explanation of the codes you need to be aware of. After that, you will find the requirements of the different upgrade types.
Package Code – this is part of the Summary Information Stream that identifies a particular database. This is not a Windows Installer property. Any two .msi databases with identical package codes must have identical contents. Therefore, you should change the package code for each build.
Product Version – this is the Windows Installer property that contains the product version. The Windows Installer only uses the first three fields of this property. For example, for a product version of 188.8.131.52, the 4 is ignored.
Product Code – this is the Windows Installer property that contains the GUID of a product. The Windows Installer treats two products with different ProductCode GUIDs as unrelated, even if the values of the ProductName property are the same.
Upgrade Code – this is the Windows Installer property that contains the GUID representing the product family. The Upgrade Code should be consistent across different versions and languages of a family of related products for patching purposes.
Major Upgrade – here the product changes are large enough to merit changes to the Product Version number, Product Code, and Package Code. An example is updating version 1.2 to 2.0. It acts like a first time installation if no earlier version is present. If there is an earlier version, the major upgrade uninstalls the earlier version and then installs the new version. It is also possible to have a major upgrade first install over the earlier version and then remove any unused files.
Minor Upgrade – this is a change to the product database and files large enough to merit a change to the Product Version, but not to the Product Code. In other words, the Package Code and Product Version are different from the earlier version, but the Product Code does not change. An example is updating version 1.1 to version 1.2. When packaged as a full installation, it acts like a first time install if an earlier version is not present, or installs over an existing installation when present. A Service Pack is a type of minor upgrade. This was a surprise to me in the beginning, because Service Packs for different Windows versions tend to be huge.
Small Update – this is used to modify a few files for an installed application. It is typically used to deliver small bug fixes. It consists of product changes (such as hotfixes) so small that no change to the Product Version is necessary. However, a Package Code change is required.
Standard Patch – this is a streamlined mechanism for updating earlier versions of a Windows Installer installation package, thereby updating the application. Patches only contain the changed data between the versions to be updated. Windows Installer patches have the .msp filename extension. The Windows Installer 3.0 and above provides many benefits for creating, installing, and removing patches. Improvements include being able to digitally sign a patch, patch a file that belons to a component, and install mutliple patches at one time. When installing multiple patches, the order that the patches are applied is based on the information held in the MSIPatchSequence table.
QuickPatch – this is a specific type of project which is recommended for shipping small, single updates to their users. Changes more extensive such as adding custom actions and changing .ini data typically require a standard patch. Incidentally, new in InstallShield 2009 is the ability to streamline a QuickPatch.
So, if you are new to upgrades, I hope the above material will help you. You can watch some videos on major and minor upgrades at: