Microsoft Installer MSI HasRelatedProduct Macro
From NSIS Wiki
Jump to navigationJump to search
Author: Zinthose (talk, contrib) |
About
Short and simple macro to extend LogicLib to allow for testing the system for MSI packages that are installed with the same UpgradeCode as provided.
Example
## This example uses the MsiEnumRelatedProducts MSI API call to determine ## if an msi package on the same upgrade track as the provided GUID is ## installed. ${If} ${MSI_HasRelatedProduct} `{D8968392-698B-4A41-B6AD-C25C6608A69B}` DetailPrint "A product is installed on the same track." ${Else} DetailPrint "No product track is installed matching the the supplied GUID." ${EndIf}
Macro
!include "LogicLib.nsh" !define MSI_HasRelatedProduct `"" MSI_HasRelatedProduct` !macro _MSI_HasRelatedProduct _a _b _t _f !insertmacro _LOGICLIB_TEMP System::Call `Msi::MsiEnumRelatedProducts(&t39 '${_b}',i 0,i 0,&t39 n)i .s` Pop $_LOGICLIB_TEMP !insertmacro _== $_LOGICLIB_TEMP 0 `${_t}` `${_f}` !macroend
Issues
- Only tested on XP x86
- Requires Microsoft Installer to be previously installed. If it isn't then it's likely that no MSI packages are installed anyway ;-)