Windows Installer Troubleshooting Tips from First Week of November
Question 1
What is the correct way to find whether a certain product (msi based setup) is installed on the machine?
Answer 1
Searching for Existing Applications, Files, Registry Entries or .ini File Entries [Windows Installer] lists the built-in detect methods. In this case, the CompLocator Table [Windows Installer] is intended to have the needed functionality.
To find the ComponentId for the CompLocator row,
- use Orca to open the MSI of the targeted product
- find the key binary dependency in the file table
- select the file table from the Tables window
- Choose Edit | Find from the menu
- In the Find dialog, type in the name of the file that you have a binary dependency on into the Find what edit box then click the Find Next button
- Continue to hit Find Next on the Find dialog until a row in the file table will be highlighted so click the Cancel button on the Find dialog
- copy the Component_ column value from the file table
- Select the second column of highlighted row and choose Edit | Copy cell menu item
- find the component in the component table
- select the component table from the Tables window
- Choose Edit | Find from the menu
- In the Find dialog, paste the value from step 3 into the Find what edit box then click the Find Next button
- Continue to hit Find Next on the Find dialog until a row in the component table will be highlighted so click the Cancel button on the Find dialog
- Grab the GUID from the ComponentId
- Select the second column of highlighted row and choose Edit | Copy cell menu item
[Author: Robert Flaming]
This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at https://www.microsoft.com/info/cpyright.htm.
Comments
- Anonymous
November 21, 2005
I found this helpful as I had incorrectly assumed that it would be necessary to use FindRelatedProducts to detect another MSI install on the target machine.
-Ajay - Anonymous
December 02, 2005
You can also use the Upgrade table to determine when other MSI based installs are on a machine. Just make sure that the Attributes field includes msidbUpgradeAttributesOnlyDetect (2). Then, FindRelatedProducts will search for any product with the specified UpgradeCode. You can even limit the search to specific versions. I use this along with a Type 19 custom action to block installation when certain incompatible applications are already installed.