diff options
| author | Raul Metsma <raul@metsma.ee> | 2025-05-26 10:52:16 +0300 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2025-12-13 14:23:15 -0800 |
| commit | 56072818e7f18611ba7d5e717a6b3dafc952f440 (patch) | |
| tree | 9ba670ef6085179f979d084dc2175cbb0d757adc /src/burn/engine/search.cpp | |
| parent | 48b80e2d67c1f98ab5fe4aee28d849e36a1828d9 (diff) | |
| download | wix-56072818e7f18611ba7d5e717a6b3dafc952f440.tar.gz wix-56072818e7f18611ba7d5e717a6b3dafc952f440.tar.bz2 wix-56072818e7f18611ba7d5e717a6b3dafc952f440.zip | |
Add exists option to ProductSearchResult for matching other search types
(e.g. FileSearch, DirectorySearch, RegistrySearch)
Signed-off-by: Raul Metsma <raul@metsma.ee>
Diffstat (limited to 'src/burn/engine/search.cpp')
| -rw-r--r-- | src/burn/engine/search.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/burn/engine/search.cpp b/src/burn/engine/search.cpp index b5218600..626ffb28 100644 --- a/src/burn/engine/search.cpp +++ b/src/burn/engine/search.cpp | |||
| @@ -334,6 +334,10 @@ extern "C" HRESULT SearchesParseFromXml( | |||
| 334 | { | 334 | { |
| 335 | pSearch->MsiProductSearch.Type = BURN_MSI_PRODUCT_SEARCH_TYPE_ASSIGNMENT; | 335 | pSearch->MsiProductSearch.Type = BURN_MSI_PRODUCT_SEARCH_TYPE_ASSIGNMENT; |
| 336 | } | 336 | } |
| 337 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"exists", -1)) | ||
| 338 | { | ||
| 339 | pSearch->MsiProductSearch.Type = BURN_MSI_PRODUCT_SEARCH_TYPE_EXISTS; | ||
| 340 | } | ||
| 337 | else | 341 | else |
| 338 | { | 342 | { |
| 339 | ExitWithRootFailure(hr, E_INVALIDARG, "Invalid value for @Type: %ls", scz); | 343 | ExitWithRootFailure(hr, E_INVALIDARG, "Invalid value for @Type: %ls", scz); |
| @@ -1144,6 +1148,7 @@ static HRESULT MsiProductSearch( | |||
| 1144 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: | 1148 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: |
| 1145 | wzProperty = INSTALLPROPERTY_LANGUAGE; | 1149 | wzProperty = INSTALLPROPERTY_LANGUAGE; |
| 1146 | break; | 1150 | break; |
| 1151 | case BURN_MSI_PRODUCT_SEARCH_TYPE_EXISTS: __fallthrough; | ||
| 1147 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: | 1152 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: |
| 1148 | wzProperty = INSTALLPROPERTY_PRODUCTSTATE; | 1153 | wzProperty = INSTALLPROPERTY_PRODUCTSTATE; |
| 1149 | break; | 1154 | break; |
| @@ -1218,6 +1223,7 @@ static HRESULT MsiProductSearch( | |||
| 1218 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: | 1223 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: |
| 1219 | // is supposed to remain empty | 1224 | // is supposed to remain empty |
| 1220 | break; | 1225 | break; |
| 1226 | case BURN_MSI_PRODUCT_SEARCH_TYPE_EXISTS: __fallthrough; | ||
| 1221 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: | 1227 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: |
| 1222 | value.Type = BURN_VARIANT_TYPE_NUMERIC; | 1228 | value.Type = BURN_VARIANT_TYPE_NUMERIC; |
| 1223 | value.llValue = INSTALLSTATE_ABSENT; | 1229 | value.llValue = INSTALLSTATE_ABSENT; |
| @@ -1237,6 +1243,7 @@ static HRESULT MsiProductSearch( | |||
| 1237 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: | 1243 | case BURN_MSI_PRODUCT_SEARCH_TYPE_LANGUAGE: |
| 1238 | type = BURN_VARIANT_TYPE_STRING; | 1244 | type = BURN_VARIANT_TYPE_STRING; |
| 1239 | break; | 1245 | break; |
| 1246 | case BURN_MSI_PRODUCT_SEARCH_TYPE_EXISTS: __fallthrough; | ||
| 1240 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: __fallthrough; | 1247 | case BURN_MSI_PRODUCT_SEARCH_TYPE_STATE: __fallthrough; |
| 1241 | case BURN_MSI_PRODUCT_SEARCH_TYPE_ASSIGNMENT: | 1248 | case BURN_MSI_PRODUCT_SEARCH_TYPE_ASSIGNMENT: |
| 1242 | type = BURN_VARIANT_TYPE_NUMERIC; | 1249 | type = BURN_VARIANT_TYPE_NUMERIC; |
| @@ -1245,6 +1252,12 @@ static HRESULT MsiProductSearch( | |||
| 1245 | hr = BVariantChangeType(&value, type); | 1252 | hr = BVariantChangeType(&value, type); |
| 1246 | ExitOnFailure(hr, "Failed to change value type."); | 1253 | ExitOnFailure(hr, "Failed to change value type."); |
| 1247 | 1254 | ||
| 1255 | // Alter value here after value has changed to numberic type. | ||
| 1256 | if (BURN_MSI_PRODUCT_SEARCH_TYPE_EXISTS == pSearch->MsiProductSearch.Type) | ||
| 1257 | { | ||
| 1258 | value.llValue = (value.llValue == INSTALLSTATE_ABSENT) ? 0 : 1; | ||
| 1259 | } | ||
| 1260 | |||
| 1248 | // Set variable. | 1261 | // Set variable. |
| 1249 | hr = VariableSetVariant(pVariables, pSearch->sczVariable, &value); | 1262 | hr = VariableSetVariant(pVariables, pSearch->sczVariable, &value); |
| 1250 | ExitOnFailure(hr, "Failed to set variable."); | 1263 | ExitOnFailure(hr, "Failed to set variable."); |
