diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-03-29 19:16:30 +1000 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-03-30 21:40:34 +1000 |
commit | 1a0190bd31953a5ffb68cac75866328dccbf03f2 (patch) | |
tree | 56a063bc5ac84b72b62baa71b590d2e26379cf37 /src/engine/search.cpp | |
parent | 0354a00e74492ad8d930c5bf499bc8606e48b1c9 (diff) | |
download | wix-1a0190bd31953a5ffb68cac75866328dccbf03f2.tar.gz wix-1a0190bd31953a5ffb68cac75866328dccbf03f2.tar.bz2 wix-1a0190bd31953a5ffb68cac75866328dccbf03f2.zip |
Add support for ExtensionSearches.
Diffstat (limited to 'src/engine/search.cpp')
-rw-r--r-- | src/engine/search.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/engine/search.cpp b/src/engine/search.cpp index c50790fd..763286fd 100644 --- a/src/engine/search.cpp +++ b/src/engine/search.cpp | |||
@@ -45,12 +45,16 @@ static HRESULT MsiFeatureSearch( | |||
45 | __in BURN_SEARCH* pSearch, | 45 | __in BURN_SEARCH* pSearch, |
46 | __in BURN_VARIABLES* pVariables | 46 | __in BURN_VARIABLES* pVariables |
47 | ); | 47 | ); |
48 | static HRESULT PerformExtensionSearch( | ||
49 | __in BURN_SEARCH* pSearch | ||
50 | ); | ||
48 | 51 | ||
49 | 52 | ||
50 | // function definitions | 53 | // function definitions |
51 | 54 | ||
52 | extern "C" HRESULT SearchesParseFromXml( | 55 | extern "C" HRESULT SearchesParseFromXml( |
53 | __in BURN_SEARCHES* pSearches, | 56 | __in BURN_SEARCHES* pSearches, |
57 | __in BURN_EXTENSIONS* pBurnExtensions, | ||
54 | __in IXMLDOMNode* pixnBundle | 58 | __in IXMLDOMNode* pixnBundle |
55 | ) | 59 | ) |
56 | { | 60 | { |
@@ -62,7 +66,7 @@ extern "C" HRESULT SearchesParseFromXml( | |||
62 | LPWSTR scz = NULL; | 66 | LPWSTR scz = NULL; |
63 | 67 | ||
64 | // select search nodes | 68 | // select search nodes |
65 | hr = XmlSelectNodes(pixnBundle, L"DirectorySearch|FileSearch|RegistrySearch|MsiComponentSearch|MsiProductSearch|MsiFeatureSearch", &pixnNodes); | 69 | hr = XmlSelectNodes(pixnBundle, L"DirectorySearch|FileSearch|RegistrySearch|MsiComponentSearch|MsiProductSearch|MsiFeatureSearch|ExtensionSearch", &pixnNodes); |
66 | ExitOnFailure(hr, "Failed to select search nodes."); | 70 | ExitOnFailure(hr, "Failed to select search nodes."); |
67 | 71 | ||
68 | // get search node count | 72 | // get search node count |
@@ -373,6 +377,17 @@ extern "C" HRESULT SearchesParseFromXml( | |||
373 | ExitOnFailure(hr, "Invalid value for @Type: %ls", scz); | 377 | ExitOnFailure(hr, "Invalid value for @Type: %ls", scz); |
374 | } | 378 | } |
375 | } | 379 | } |
380 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, bstrNodeName, -1, L"ExtensionSearch", -1)) | ||
381 | { | ||
382 | pSearch->Type = BURN_SEARCH_TYPE_EXTENSION; | ||
383 | |||
384 | // @ExtensionId | ||
385 | hr = XmlGetAttributeEx(pixnNode, L"ExtensionId", &scz); | ||
386 | ExitOnFailure(hr, "Failed to get @ExtensionId."); | ||
387 | |||
388 | hr = BurnExtensionFindById(pBurnExtensions, scz, &pSearch->ExtensionSearch.pExtension); | ||
389 | ExitOnFailure(hr, "Failed to find extension '%ls' for search '%ls'", scz, pSearch->sczKey); | ||
390 | } | ||
376 | else | 391 | else |
377 | { | 392 | { |
378 | hr = E_UNEXPECTED; | 393 | hr = E_UNEXPECTED; |
@@ -477,6 +492,9 @@ extern "C" HRESULT SearchesExecute( | |||
477 | case BURN_SEARCH_TYPE_MSI_FEATURE: | 492 | case BURN_SEARCH_TYPE_MSI_FEATURE: |
478 | hr = MsiFeatureSearch(pSearch, pVariables); | 493 | hr = MsiFeatureSearch(pSearch, pVariables); |
479 | break; | 494 | break; |
495 | case BURN_SEARCH_TYPE_EXTENSION: | ||
496 | hr = PerformExtensionSearch(pSearch); | ||
497 | break; | ||
480 | default: | 498 | default: |
481 | hr = E_UNEXPECTED; | 499 | hr = E_UNEXPECTED; |
482 | } | 500 | } |
@@ -1193,3 +1211,14 @@ static HRESULT MsiFeatureSearch( | |||
1193 | 1211 | ||
1194 | return hr; | 1212 | return hr; |
1195 | } | 1213 | } |
1214 | |||
1215 | static HRESULT PerformExtensionSearch( | ||
1216 | __in BURN_SEARCH* pSearch | ||
1217 | ) | ||
1218 | { | ||
1219 | HRESULT hr = S_OK; | ||
1220 | |||
1221 | hr = BurnExtensionPerformSearch(pSearch->ExtensionSearch.pExtension, pSearch->sczKey, pSearch->sczVariable); | ||
1222 | |||
1223 | return hr; | ||
1224 | } | ||