diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-12-10 11:42:44 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-12-11 20:03:13 -0600 |
| commit | fc30db9fa3aa1d25a6ef078452864673caa67ec5 (patch) | |
| tree | e3415a5a1329a867b2934a038243e95098214ec3 /src/api/burn/balutil | |
| parent | 1d58b3333d1d694d08b68f6c87223aa504bfe773 (diff) | |
| download | wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.gz wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.tar.bz2 wix-fc30db9fa3aa1d25a6ef078452864673caa67ec5.zip | |
Add BA events for setting the update bundle.
Fixes #6410
Diffstat (limited to 'src/api/burn/balutil')
| -rw-r--r-- | src/api/burn/balutil/balinfo.cpp | 43 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/BAFunctions.h | 2 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/BalBaseBAFunctions.h | 14 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | 2 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h | 14 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h | 24 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/IBootstrapperApplication.h | 8 | ||||
| -rw-r--r-- | src/api/burn/balutil/inc/balinfo.h | 15 |
8 files changed, 120 insertions, 2 deletions
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index 2746f49e..d9cc9b76 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
| @@ -166,7 +166,7 @@ LExit: | |||
| 166 | 166 | ||
| 167 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( | 167 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( |
| 168 | __in BAL_INFO_PACKAGES* pPackages, | 168 | __in BAL_INFO_PACKAGES* pPackages, |
| 169 | __in LPCWSTR wzId, | 169 | __in_z LPCWSTR wzId, |
| 170 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 170 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
| 171 | __in BOOL /*fPerMachine*/, | 171 | __in BOOL /*fPerMachine*/, |
| 172 | __out_opt BAL_INFO_PACKAGE** ppPackage | 172 | __out_opt BAL_INFO_PACKAGE** ppPackage |
| @@ -228,6 +228,47 @@ LExit: | |||
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | 230 | ||
| 231 | DAPI_(HRESULT) BalInfoAddUpdateBundleAsPackage( | ||
| 232 | __in BAL_INFO_PACKAGES* pPackages, | ||
| 233 | __in_z LPCWSTR wzId, | ||
| 234 | __in_z LPCWSTR /*wzPreviousId*/, | ||
| 235 | __out_opt BAL_INFO_PACKAGE** ppPackage | ||
| 236 | ) | ||
| 237 | { | ||
| 238 | HRESULT hr = S_OK; | ||
| 239 | BAL_INFO_PACKAGE* pPackage = NULL; | ||
| 240 | |||
| 241 | // Check to see if the bundle is already in the list of packages. | ||
| 242 | for (DWORD i = 0; i < pPackages->cPackages; ++i) | ||
| 243 | { | ||
| 244 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzId, -1, pPackages->rgPackages[i].sczId, -1)) | ||
| 245 | { | ||
| 246 | ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)); | ||
| 247 | } | ||
| 248 | } | ||
| 249 | |||
| 250 | // Add the update bundle as a package. | ||
| 251 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pPackages->rgPackages), pPackages->cPackages + 1, sizeof(BAL_INFO_PACKAGE), 2); | ||
| 252 | ExitOnFailure(hr, "Failed to allocate memory for update bundle package information."); | ||
| 253 | |||
| 254 | pPackage = pPackages->rgPackages + pPackages->cPackages; | ||
| 255 | ++pPackages->cPackages; | ||
| 256 | |||
| 257 | hr = StrAllocString(&pPackage->sczId, wzId, 0); | ||
| 258 | ExitOnFailure(hr, "Failed to copy update bundle package id."); | ||
| 259 | |||
| 260 | pPackage->type = BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE; | ||
| 261 | |||
| 262 | if (ppPackage) | ||
| 263 | { | ||
| 264 | *ppPackage = pPackage; | ||
| 265 | } | ||
| 266 | |||
| 267 | LExit: | ||
| 268 | return hr; | ||
| 269 | } | ||
| 270 | |||
| 271 | |||
| 231 | DAPI_(HRESULT) BalInfoFindPackageById( | 272 | DAPI_(HRESULT) BalInfoFindPackageById( |
| 232 | __in BAL_INFO_PACKAGES* pPackages, | 273 | __in BAL_INFO_PACKAGES* pPackages, |
| 233 | __in LPCWSTR wzId, | 274 | __in LPCWSTR wzId, |
diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h index 21cace1f..2698a6e3 100644 --- a/src/api/burn/balutil/inc/BAFunctions.h +++ b/src/api/burn/balutil/inc/BAFunctions.h | |||
| @@ -82,6 +82,8 @@ enum BA_FUNCTIONS_MESSAGE | |||
| 82 | BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, | 82 | BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, |
| 83 | BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, | 83 | BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, |
| 84 | BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY, | 84 | BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY, |
| 85 | BA_FUNCTIONS_MESSAGE_ONSETUPDATEBEGIN = BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATEBEGIN, | ||
| 86 | BA_FUNCTIONS_MESSAGE_ONSETUPDATECOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATECOMPLETE, | ||
| 85 | 87 | ||
| 86 | BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, | 88 | BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, |
| 87 | BA_FUNCTIONS_MESSAGE_WNDPROC, | 89 | BA_FUNCTIONS_MESSAGE_WNDPROC, |
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h index e45db2dc..8d9bddca 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h | |||
| @@ -794,6 +794,20 @@ public: // IBootstrapperApplication | |||
| 794 | return S_OK; | 794 | return S_OK; |
| 795 | } | 795 | } |
| 796 | 796 | ||
| 797 | virtual STDMETHODIMP OnSetUpdateBegin() | ||
| 798 | { | ||
| 799 | return S_OK; | ||
| 800 | } | ||
| 801 | |||
| 802 | virtual STDMETHODIMP OnSetUpdateComplete( | ||
| 803 | __in HRESULT /*hrStatus*/, | ||
| 804 | __in_z_opt LPCWSTR /*wzPreviousPackageId*/, | ||
| 805 | __in_z_opt LPCWSTR /*wzNewPackageId*/ | ||
| 806 | ) | ||
| 807 | { | ||
| 808 | return S_OK; | ||
| 809 | } | ||
| 810 | |||
| 797 | public: // IBAFunctions | 811 | public: // IBAFunctions |
| 798 | virtual STDMETHODIMP OnPlan( | 812 | virtual STDMETHODIMP OnPlan( |
| 799 | ) | 813 | ) |
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h index e841c660..1ab0df59 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | |||
| @@ -153,6 +153,8 @@ static HRESULT WINAPI BalBaseBAFunctionsProc( | |||
| 153 | case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE: | 153 | case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE: |
| 154 | case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS: | 154 | case BA_FUNCTIONS_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS: |
| 155 | case BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY: | 155 | case BA_FUNCTIONS_MESSAGE_ONPLANROLLBACKBOUNDARY: |
| 156 | case BA_FUNCTIONS_MESSAGE_ONSETUPDATEBEGIN: | ||
| 157 | case BA_FUNCTIONS_MESSAGE_ONSETUPDATECOMPLETE: | ||
| 156 | hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext); | 158 | hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext); |
| 157 | break; | 159 | break; |
| 158 | case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED: | 160 | case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED: |
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h index c10b662c..4d043dfe 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h | |||
| @@ -990,6 +990,20 @@ public: // IBootstrapperApplication | |||
| 990 | return S_OK; | 990 | return S_OK; |
| 991 | } | 991 | } |
| 992 | 992 | ||
| 993 | virtual STDMETHODIMP OnSetUpdateBegin() | ||
| 994 | { | ||
| 995 | return S_OK; | ||
| 996 | } | ||
| 997 | |||
| 998 | virtual STDMETHODIMP OnSetUpdateComplete( | ||
| 999 | __in HRESULT /*hrStatus*/, | ||
| 1000 | __in_z_opt LPCWSTR /*wzPreviousPackageId*/, | ||
| 1001 | __in_z_opt LPCWSTR /*wzNewPackageId*/ | ||
| 1002 | ) | ||
| 1003 | { | ||
| 1004 | return S_OK; | ||
| 1005 | } | ||
| 1006 | |||
| 993 | public: //CBalBaseBootstrapperApplication | 1007 | public: //CBalBaseBootstrapperApplication |
| 994 | virtual STDMETHODIMP Initialize( | 1008 | virtual STDMETHODIMP Initialize( |
| 995 | __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs | 1009 | __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs |
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h index f17e1fcb..59bfc1f8 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h | |||
| @@ -666,6 +666,24 @@ static HRESULT BalBaseBAProcOnCachePayloadExtractComplete( | |||
| 666 | return pBA->OnCachePayloadExtractComplete(pArgs->wzContainerId, pArgs->wzPayloadId, pArgs->hrStatus); | 666 | return pBA->OnCachePayloadExtractComplete(pArgs->wzContainerId, pArgs->wzPayloadId, pArgs->hrStatus); |
| 667 | } | 667 | } |
| 668 | 668 | ||
| 669 | static HRESULT BalBaseBAProcOnSetUpdateBegin( | ||
| 670 | __in IBootstrapperApplication* pBA, | ||
| 671 | __in BA_ONSETUPDATEBEGIN_ARGS* /*pArgs*/, | ||
| 672 | __inout BA_ONSETUPDATEBEGIN_RESULTS* /*pResults*/ | ||
| 673 | ) | ||
| 674 | { | ||
| 675 | return pBA->OnSetUpdateBegin(); | ||
| 676 | } | ||
| 677 | |||
| 678 | static HRESULT BalBaseBAProcOnSetUpdateComplete( | ||
| 679 | __in IBootstrapperApplication* pBA, | ||
| 680 | __in BA_ONSETUPDATECOMPLETE_ARGS* pArgs, | ||
| 681 | __inout BA_ONSETUPDATECOMPLETE_RESULTS* /*pResults*/ | ||
| 682 | ) | ||
| 683 | { | ||
| 684 | return pBA->OnSetUpdateComplete(pArgs->hrStatus, pArgs->wzPreviousPackageId, pArgs->wzNewPackageId); | ||
| 685 | } | ||
| 686 | |||
| 669 | /******************************************************************* | 687 | /******************************************************************* |
| 670 | BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication. | 688 | BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication. |
| 671 | Provides a default mapping between the new message based BA interface and | 689 | Provides a default mapping between the new message based BA interface and |
| @@ -904,6 +922,12 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc( | |||
| 904 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY: | 922 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANROLLBACKBOUNDARY: |
| 905 | hr = BalBaseBAProcOnPlanRollbackBoundary(pBA, reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_RESULTS*>(pvResults)); | 923 | hr = BalBaseBAProcOnPlanRollbackBoundary(pBA, reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANROLLBACKBOUNDARY_RESULTS*>(pvResults)); |
| 906 | break; | 924 | break; |
| 925 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATEBEGIN: | ||
| 926 | hr = BalBaseBAProcOnSetUpdateBegin(pBA, reinterpret_cast<BA_ONSETUPDATEBEGIN_ARGS*>(pvArgs), reinterpret_cast<BA_ONSETUPDATEBEGIN_RESULTS*>(pvResults)); | ||
| 927 | break; | ||
| 928 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONSETUPDATECOMPLETE: | ||
| 929 | hr = BalBaseBAProcOnSetUpdateComplete(pBA, reinterpret_cast<BA_ONSETUPDATECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONSETUPDATECOMPLETE_RESULTS*>(pvResults)); | ||
| 930 | break; | ||
| 907 | } | 931 | } |
| 908 | } | 932 | } |
| 909 | 933 | ||
diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h index 1fc99988..be9b7b6e 100644 --- a/src/api/burn/balutil/inc/IBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h | |||
| @@ -658,4 +658,12 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A | |||
| 658 | __in_z_opt LPCWSTR wzPayloadId, | 658 | __in_z_opt LPCWSTR wzPayloadId, |
| 659 | __in HRESULT hrStatus | 659 | __in HRESULT hrStatus |
| 660 | ) = 0; | 660 | ) = 0; |
| 661 | |||
| 662 | STDMETHOD(OnSetUpdateBegin)() = 0; | ||
| 663 | |||
| 664 | STDMETHOD(OnSetUpdateComplete)( | ||
| 665 | __in HRESULT hrStatus, | ||
| 666 | __in_z_opt LPCWSTR wzPreviousPackageId, | ||
| 667 | __in_z_opt LPCWSTR wzNewPackageId | ||
| 668 | ) = 0; | ||
| 661 | }; | 669 | }; |
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h index 769becb2..8f61685f 100644 --- a/src/api/burn/balutil/inc/balinfo.h +++ b/src/api/burn/balutil/inc/balinfo.h | |||
| @@ -16,6 +16,7 @@ typedef enum BAL_INFO_PACKAGE_TYPE | |||
| 16 | BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE, | 16 | BAL_INFO_PACKAGE_TYPE_BUNDLE_UPGRADE, |
| 17 | BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON, | 17 | BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON, |
| 18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, | 18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, |
| 19 | BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE, | ||
| 19 | } BAL_INFO_PACKAGE_TYPE; | 20 | } BAL_INFO_PACKAGE_TYPE; |
| 20 | 21 | ||
| 21 | typedef enum _BAL_INFO_RESTART | 22 | typedef enum _BAL_INFO_RESTART |
| @@ -125,7 +126,7 @@ DAPI_(HRESULT) BalInfoParseFromXml( | |||
| 125 | ********************************************************************/ | 126 | ********************************************************************/ |
| 126 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( | 127 | DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( |
| 127 | __in BAL_INFO_PACKAGES* pPackages, | 128 | __in BAL_INFO_PACKAGES* pPackages, |
| 128 | __in LPCWSTR wzId, | 129 | __in_z LPCWSTR wzId, |
| 129 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 130 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
| 130 | __in BOOL fPerMachine, | 131 | __in BOOL fPerMachine, |
| 131 | __out_opt BAL_INFO_PACKAGE** ppPackage | 132 | __out_opt BAL_INFO_PACKAGE** ppPackage |
| @@ -133,6 +134,18 @@ DAPI_(HRESULT) BalInfoAddRelatedBundleAsPackage( | |||
| 133 | 134 | ||
| 134 | 135 | ||
| 135 | /******************************************************************* | 136 | /******************************************************************* |
| 137 | BalInfoAddUpdateBundleAsPackage - adds an update bundle as a package. | ||
| 138 | |||
| 139 | ********************************************************************/ | ||
| 140 | DAPI_(HRESULT) BalInfoAddUpdateBundleAsPackage( | ||
| 141 | __in BAL_INFO_PACKAGES* pPackages, | ||
| 142 | __in_z LPCWSTR wzId, | ||
| 143 | __in_z LPCWSTR wzPreviousId, | ||
| 144 | __out_opt BAL_INFO_PACKAGE** ppPackage | ||
| 145 | ); | ||
| 146 | |||
| 147 | |||
| 148 | /******************************************************************* | ||
| 136 | BalInfoFindPackageById - finds a package by its id. | 149 | BalInfoFindPackageById - finds a package by its id. |
| 137 | 150 | ||
| 138 | ********************************************************************/ | 151 | ********************************************************************/ |
