After having to do that a few times recently, I decided to put down a short summary on how msi upgrades work. It’s may not be 100% accurate and doesn’t go into much details, but if you want to explain it to colleagues or managers who know very little of msi, it should satisfy them.
So here it goes:
Windows installer consider the following parameters in order to decide if the current installation is related to an existing one:
- Upgrade code – identifies a family of a product
- Product code – identifies a certain release of the product
- Package code – identifies a certain build of a certain release of the product
- Product Version (the first three fields)
And has the following upgrade scenarios:
- Major upgrade – completely uninstall an existing product before installing the new one (same upgrade code, different product code, different version)
- Minor update – update the existing product by only replacing files which were changed and other custom actions (same upgrade code, same product code, different version)
- Maintenance – modify/repair/remove scenarios (same upgrade code, same product code, same package code, same version)
All other cases either result in an error (such as ‘another version of this product is already installed’) or make windows installer think it’s a new product.