Upgrade Codes That Affect MSI-based Installer Behavior

MSI-based Installer upgrade codes uniquely identify MSI-based installers. MSI-based Installers that use the same upgrade code are assumed to install the same set of files or product, such as two different versions of the same test system. MSI-based Installers with different upgrade codes are considered independent and can be installed on one computer at the same time.

MSI-based Installers with the same upgrade code use the installer version to determine what action to perform, as shown in the following table.

Version of New MSI-based Installer Version of MSI-based Installer on Computer Action MSI-based Installer Performs
Later Earlier Installs and upgrades the previous version of the MSI-based installer on the computer
Earlier Later Does not install

MSI-based Installers with Different Upgrade Codes That Install the Same File

Do not include shared files that install to the same path in MSI-based installers that use different upgrade codes because using one of the MSI-based installers to uninstall files removes the shared file, which can negatively affect an installed test system.

To manage shared files correctly with Microsoft Windows Installer technology, the Component ID (GUID) must be the same in each MSI-based installer that shares the file so the MSI Engine can correctly increment the reference count for the shared file and not uninstall the shared file until you uninstall all installers that require the shared file. When multiple installers include shared files with different component IDs, one uninstaller can remove the file from the test station computer, regardless of how many other existing installed test systems on the test station computer require the file. When you use the TestStand Deployment Utility to build MSI-based installers from a single TestStand deployment specification file (.tsd), the MSI-based installers use the same stored component ID for shared files when the destination paths of the files do not change.

If you are using LabVIEW, you can use packed project libraries to work around this issue because for packed project libraries, the MSI-based installer you build with the deployment utility specifies the msidbComponentAttributesSharedDllRefCount attribute, which uses an alternate reference counting mechanism that uses the installation path instead of the component ID. Therefore, MSI-based installers you build with the deployment utility that install a packed project library to the same path increment the same reference count for the file. The packed project libraries uninstall only after you uninstall all MSI-based installers that reference the files.