diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-04-16 13:38:16 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-04-19 23:12:55 -0500 |
commit | b1d1e523f5cdadce0cbf105179b33c014d5ec9eb (patch) | |
tree | 0eecd05821adb317471118c434f02974586bec03 | |
parent | c308746132f3ab89458b446f659f3d4073758da6 (diff) | |
download | wix-b1d1e523f5cdadce0cbf105179b33c014d5ec9eb.tar.gz wix-b1d1e523f5cdadce0cbf105179b33c014d5ec9eb.tar.bz2 wix-b1d1e523f5cdadce0cbf105179b33c014d5ec9eb.zip |
Add OnCachePayloadExtract*.
-rw-r--r-- | src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h | 45 | ||||
-rw-r--r-- | src/engine/apply.cpp | 58 | ||||
-rw-r--r-- | src/engine/container.h | 1 | ||||
-rw-r--r-- | src/engine/plan.cpp | 1 | ||||
-rw-r--r-- | src/engine/userexperience.cpp | 87 | ||||
-rw-r--r-- | src/engine/userexperience.h | 19 |
6 files changed, 207 insertions, 4 deletions
diff --git a/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h index edb981a9..e1920107 100644 --- a/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h +++ b/src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h | |||
@@ -153,6 +153,9 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE | |||
153 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYBEGIN, | 153 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYBEGIN, |
154 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYCOMPLETE, | 154 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYCOMPLETE, |
155 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYPROGRESS, | 155 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHECONTAINERORPAYLOADVERIFYPROGRESS, |
156 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTBEGIN, | ||
157 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, | ||
158 | BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, | ||
156 | }; | 159 | }; |
157 | 160 | ||
158 | enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION | 161 | enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION |
@@ -472,6 +475,48 @@ struct BA_ONCACHEPACKAGECOMPLETE_RESULTS | |||
472 | BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION action; | 475 | BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION action; |
473 | }; | 476 | }; |
474 | 477 | ||
478 | struct BA_ONCACHEPAYLOADEXTRACTBEGIN_ARGS | ||
479 | { | ||
480 | DWORD cbSize; | ||
481 | LPCWSTR wzContainerId; | ||
482 | LPCWSTR wzPayloadId; | ||
483 | }; | ||
484 | |||
485 | struct BA_ONCACHEPAYLOADEXTRACTBEGIN_RESULTS | ||
486 | { | ||
487 | DWORD cbSize; | ||
488 | BOOL fCancel; | ||
489 | }; | ||
490 | |||
491 | struct BA_ONCACHEPAYLOADEXTRACTCOMPLETE_ARGS | ||
492 | { | ||
493 | DWORD cbSize; | ||
494 | LPCWSTR wzContainerId; | ||
495 | LPCWSTR wzPayloadId; | ||
496 | HRESULT hrStatus; | ||
497 | }; | ||
498 | |||
499 | struct BA_ONCACHEPAYLOADEXTRACTCOMPLETE_RESULTS | ||
500 | { | ||
501 | DWORD cbSize; | ||
502 | }; | ||
503 | |||
504 | struct BA_ONCACHEPAYLOADEXTRACTPROGRESS_ARGS | ||
505 | { | ||
506 | DWORD cbSize; | ||
507 | LPCWSTR wzContainerId; | ||
508 | LPCWSTR wzPayloadId; | ||
509 | DWORD64 dw64Progress; | ||
510 | DWORD64 dw64Total; | ||
511 | DWORD dwOverallPercentage; | ||
512 | }; | ||
513 | |||
514 | struct BA_ONCACHEPAYLOADEXTRACTPROGRESS_RESULTS | ||
515 | { | ||
516 | DWORD cbSize; | ||
517 | BOOL fCancel; | ||
518 | }; | ||
519 | |||
475 | struct BA_ONCACHEVERIFYBEGIN_ARGS | 520 | struct BA_ONCACHEVERIFYBEGIN_ARGS |
476 | { | 521 | { |
477 | DWORD cbSize; | 522 | DWORD cbSize; |
diff --git a/src/engine/apply.cpp b/src/engine/apply.cpp index f80baf26..ab7fa077 100644 --- a/src/engine/apply.cpp +++ b/src/engine/apply.cpp | |||
@@ -16,6 +16,7 @@ enum BURN_CACHE_PROGRESS_TYPE | |||
16 | BURN_CACHE_PROGRESS_TYPE_ACQUIRE, | 16 | BURN_CACHE_PROGRESS_TYPE_ACQUIRE, |
17 | BURN_CACHE_PROGRESS_TYPE_VERIFY, | 17 | BURN_CACHE_PROGRESS_TYPE_VERIFY, |
18 | BURN_CACHE_PROGRESS_TYPE_CONTAINER_OR_PAYLOAD_VERIFY, | 18 | BURN_CACHE_PROGRESS_TYPE_CONTAINER_OR_PAYLOAD_VERIFY, |
19 | BURN_CACHE_PROGRESS_TYPE_EXTRACT, | ||
19 | }; | 20 | }; |
20 | 21 | ||
21 | // structs | 22 | // structs |
@@ -43,6 +44,7 @@ typedef struct _BURN_CACHE_PROGRESS_CONTEXT | |||
43 | BURN_CONTAINER* pContainer; | 44 | BURN_CONTAINER* pContainer; |
44 | BURN_PACKAGE* pPackage; | 45 | BURN_PACKAGE* pPackage; |
45 | BURN_PAYLOAD_GROUP_ITEM* pPayloadGroupItem; | 46 | BURN_PAYLOAD_GROUP_ITEM* pPayloadGroupItem; |
47 | BURN_PAYLOAD* pPayload; | ||
46 | 48 | ||
47 | BOOL fCancel; | 49 | BOOL fCancel; |
48 | HRESULT hrError; | 50 | HRESULT hrError; |
@@ -875,6 +877,12 @@ static HRESULT ApplyExtractContainer( | |||
875 | pContainer->qwCommittedCacheProgress = 0; | 877 | pContainer->qwCommittedCacheProgress = 0; |
876 | } | 878 | } |
877 | 879 | ||
880 | if (pContainer->qwCommittedExtractProgress) | ||
881 | { | ||
882 | pContext->qwSuccessfulCacheProgress -= pContainer->qwCommittedExtractProgress; | ||
883 | pContainer->qwCommittedExtractProgress = 0; | ||
884 | } | ||
885 | |||
878 | if (!pContainer->fActuallyAttached) | 886 | if (!pContainer->fActuallyAttached) |
879 | { | 887 | { |
880 | hr = ApplyAcquireContainerOrPayload(pContext, pContainer, NULL, NULL); | 888 | hr = ApplyAcquireContainerOrPayload(pContext, pContainer, NULL, NULL); |
@@ -890,8 +898,18 @@ static HRESULT ApplyExtractContainer( | |||
890 | CacheSetLastUsedSource(pContext->pVariables, pContext->sczLastUsedFolderCandidate, pContainer->sczFilePath); | 898 | CacheSetLastUsedSource(pContext->pVariables, pContext->sczLastUsedFolderCandidate, pContainer->sczFilePath); |
891 | } | 899 | } |
892 | 900 | ||
893 | pContext->qwSuccessfulCacheProgress += pContainer->qwExtractSizeTotal; | 901 | if (pContainer->qwExtractSizeTotal < pContainer->qwCommittedExtractProgress) |
894 | pContainer->qwCommittedCacheProgress += pContainer->qwExtractSizeTotal; | 902 | { |
903 | AssertSz(FALSE, "Container extracted more than planned."); | ||
904 | pContext->qwSuccessfulCacheProgress -= pContainer->qwCommittedExtractProgress; | ||
905 | pContext->qwSuccessfulCacheProgress += pContainer->qwExtractSizeTotal; | ||
906 | } | ||
907 | else | ||
908 | { | ||
909 | pContext->qwSuccessfulCacheProgress += pContainer->qwExtractSizeTotal - pContainer->qwCommittedExtractProgress; | ||
910 | } | ||
911 | |||
912 | pContainer->qwCommittedExtractProgress = pContainer->qwExtractSizeTotal; | ||
895 | 913 | ||
896 | LExit: | 914 | LExit: |
897 | ReleaseNullStr(pContext->sczLastUsedFolderCandidate); | 915 | ReleaseNullStr(pContext->sczLastUsedFolderCandidate); |
@@ -1100,6 +1118,11 @@ static HRESULT ExtractContainer( | |||
1100 | BURN_CONTAINER_CONTEXT context = { }; | 1118 | BURN_CONTAINER_CONTEXT context = { }; |
1101 | HANDLE hContainerHandle = INVALID_HANDLE_VALUE; | 1119 | HANDLE hContainerHandle = INVALID_HANDLE_VALUE; |
1102 | LPWSTR sczExtractPayloadId = NULL; | 1120 | LPWSTR sczExtractPayloadId = NULL; |
1121 | BURN_CACHE_PROGRESS_CONTEXT progress = { }; | ||
1122 | |||
1123 | progress.pCacheContext = pContext; | ||
1124 | progress.pContainer = pContainer; | ||
1125 | progress.type = BURN_CACHE_PROGRESS_TYPE_EXTRACT; | ||
1103 | 1126 | ||
1104 | // If the container is actually attached, then it was planned to be acquired through hSourceEngineFile. | 1127 | // If the container is actually attached, then it was planned to be acquired through hSourceEngineFile. |
1105 | if (pContainer->fActuallyAttached) | 1128 | if (pContainer->fActuallyAttached) |
@@ -1119,11 +1142,29 @@ static HRESULT ExtractContainer( | |||
1119 | BURN_PAYLOAD* pExtract = pContext->pPayloads->rgPayloads + iExtract; | 1142 | BURN_PAYLOAD* pExtract = pContext->pPayloads->rgPayloads + iExtract; |
1120 | if (pExtract->sczUnverifiedPath && pExtract->cRemainingInstances && CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczExtractPayloadId, -1, pExtract->sczSourcePath, -1)) | 1143 | if (pExtract->sczUnverifiedPath && pExtract->cRemainingInstances && CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczExtractPayloadId, -1, pExtract->sczSourcePath, -1)) |
1121 | { | 1144 | { |
1145 | progress.pPayload = pExtract; | ||
1146 | |||
1122 | hr = PreparePayloadDestinationPath(pExtract->sczUnverifiedPath); | 1147 | hr = PreparePayloadDestinationPath(pExtract->sczUnverifiedPath); |
1123 | ExitOnFailure(hr, "Failed to prepare payload destination path: %ls", pExtract->sczUnverifiedPath); | 1148 | ExitOnFailure(hr, "Failed to prepare payload destination path: %ls", pExtract->sczUnverifiedPath); |
1124 | 1149 | ||
1150 | hr = UserExperienceOnCachePayloadExtractBegin(pContext->pUX, pContainer->sczId, pExtract->sczKey); | ||
1151 | if (FAILED(hr)) | ||
1152 | { | ||
1153 | UserExperienceOnCachePayloadExtractComplete(pContext->pUX, pContainer->sczId, pExtract->sczKey, hr); | ||
1154 | ExitOnRootFailure(hr, "BA aborted cache payload extract begin."); | ||
1155 | } | ||
1156 | |||
1125 | // TODO: Send progress when extracting stream to file. | 1157 | // TODO: Send progress when extracting stream to file. |
1126 | hr = ContainerStreamToFile(&context, pExtract->sczUnverifiedPath); | 1158 | hr = ContainerStreamToFile(&context, pExtract->sczUnverifiedPath); |
1159 | // Error handling happens after sending complete message to BA. | ||
1160 | |||
1161 | // If succeeded, send 100% complete here to make sure progress was sent to the BA. | ||
1162 | if (SUCCEEDED(hr)) | ||
1163 | { | ||
1164 | hr = CompleteCacheProgress(&progress, pExtract->qwFileSize); | ||
1165 | } | ||
1166 | |||
1167 | UserExperienceOnCachePayloadExtractComplete(pContext->pUX, pContainer->sczId, pExtract->sczKey, hr); | ||
1127 | ExitOnFailure(hr, "Failed to extract payload: %ls from container: %ls", sczExtractPayloadId, pContainer->sczId); | 1168 | ExitOnFailure(hr, "Failed to extract payload: %ls from container: %ls", sczExtractPayloadId, pContainer->sczId); |
1128 | 1169 | ||
1129 | fExtracted = TRUE; | 1170 | fExtracted = TRUE; |
@@ -1754,7 +1795,12 @@ static HRESULT CompleteCacheProgress( | |||
1754 | if (PROGRESS_CONTINUE == dwResult) | 1795 | if (PROGRESS_CONTINUE == dwResult) |
1755 | { | 1796 | { |
1756 | pContext->pCacheContext->qwSuccessfulCacheProgress += qwFileSize; | 1797 | pContext->pCacheContext->qwSuccessfulCacheProgress += qwFileSize; |
1757 | if (pContext->pContainer) | 1798 | |
1799 | if (pContext->pPayload) | ||
1800 | { | ||
1801 | pContext->pContainer->qwCommittedExtractProgress += qwFileSize; | ||
1802 | } | ||
1803 | else if (pContext->pContainer) | ||
1758 | { | 1804 | { |
1759 | pContext->pContainer->qwCommittedCacheProgress += qwFileSize; | 1805 | pContext->pContainer->qwCommittedCacheProgress += qwFileSize; |
1760 | } | 1806 | } |
@@ -1800,7 +1846,7 @@ static DWORD CALLBACK CacheProgressRoutine( | |||
1800 | DWORD dwResult = PROGRESS_CONTINUE; | 1846 | DWORD dwResult = PROGRESS_CONTINUE; |
1801 | BURN_CACHE_PROGRESS_CONTEXT* pProgress = static_cast<BURN_CACHE_PROGRESS_CONTEXT*>(lpData); | 1847 | BURN_CACHE_PROGRESS_CONTEXT* pProgress = static_cast<BURN_CACHE_PROGRESS_CONTEXT*>(lpData); |
1802 | LPCWSTR wzPackageOrContainerId = pProgress->pContainer ? pProgress->pContainer->sczId : pProgress->pPackage ? pProgress->pPackage->sczId : NULL; | 1848 | LPCWSTR wzPackageOrContainerId = pProgress->pContainer ? pProgress->pContainer->sczId : pProgress->pPackage ? pProgress->pPackage->sczId : NULL; |
1803 | LPCWSTR wzPayloadId = pProgress->pPayloadGroupItem ? pProgress->pPayloadGroupItem->pPayload->sczKey : NULL; | 1849 | LPCWSTR wzPayloadId = pProgress->pPayloadGroupItem ? pProgress->pPayloadGroupItem->pPayload->sczKey : pProgress->pPayload ? pProgress->pPayload->sczKey : NULL; |
1804 | DWORD64 qwCacheProgress = pProgress->pCacheContext->qwSuccessfulCacheProgress + TotalBytesTransferred.QuadPart; | 1850 | DWORD64 qwCacheProgress = pProgress->pCacheContext->qwSuccessfulCacheProgress + TotalBytesTransferred.QuadPart; |
1805 | if (qwCacheProgress > pProgress->pCacheContext->qwTotalCacheSize) | 1851 | if (qwCacheProgress > pProgress->pCacheContext->qwTotalCacheSize) |
1806 | { | 1852 | { |
@@ -1823,6 +1869,10 @@ static DWORD CALLBACK CacheProgressRoutine( | |||
1823 | hr = UserExperienceOnCacheContainerOrPayloadVerifyProgress(pProgress->pCacheContext->pUX, wzPackageOrContainerId, wzPayloadId, TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart, dwOverallPercentage); | 1869 | hr = UserExperienceOnCacheContainerOrPayloadVerifyProgress(pProgress->pCacheContext->pUX, wzPackageOrContainerId, wzPayloadId, TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart, dwOverallPercentage); |
1824 | ExitOnRootFailure(hr, "BA aborted container or payload verify: %ls", wzPayloadId); | 1870 | ExitOnRootFailure(hr, "BA aborted container or payload verify: %ls", wzPayloadId); |
1825 | break; | 1871 | break; |
1872 | case BURN_CACHE_PROGRESS_TYPE_EXTRACT: | ||
1873 | hr = UserExperienceOnCachePayloadExtractProgress(pProgress->pCacheContext->pUX, wzPackageOrContainerId, wzPayloadId, TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart, dwOverallPercentage); | ||
1874 | ExitOnRootFailure(hr, "BA aborted extract container: %ls, payload: %ls", wzPackageOrContainerId, wzPayloadId); | ||
1875 | break; | ||
1826 | } | 1876 | } |
1827 | 1877 | ||
1828 | LExit: | 1878 | LExit: |
diff --git a/src/engine/container.h b/src/engine/container.h index 7c5c2b5f..3174eb38 100644 --- a/src/engine/container.h +++ b/src/engine/container.h | |||
@@ -78,6 +78,7 @@ typedef struct _BURN_CONTAINER | |||
78 | LPWSTR sczUnverifiedPath; | 78 | LPWSTR sczUnverifiedPath; |
79 | DWORD64 qwExtractSizeTotal; | 79 | DWORD64 qwExtractSizeTotal; |
80 | DWORD64 qwCommittedCacheProgress; | 80 | DWORD64 qwCommittedCacheProgress; |
81 | DWORD64 qwCommittedExtractProgress; | ||
81 | } BURN_CONTAINER; | 82 | } BURN_CONTAINER; |
82 | 83 | ||
83 | typedef struct _BURN_CONTAINERS | 84 | typedef struct _BURN_CONTAINERS |
diff --git a/src/engine/plan.cpp b/src/engine/plan.cpp index 8421d87b..bf929835 100644 --- a/src/engine/plan.cpp +++ b/src/engine/plan.cpp | |||
@@ -1831,6 +1831,7 @@ static void ResetPlannedContainerState( | |||
1831 | pContainer->fPlanned = FALSE; | 1831 | pContainer->fPlanned = FALSE; |
1832 | pContainer->qwExtractSizeTotal = 0; | 1832 | pContainer->qwExtractSizeTotal = 0; |
1833 | pContainer->qwCommittedCacheProgress = 0; | 1833 | pContainer->qwCommittedCacheProgress = 0; |
1834 | pContainer->qwCommittedExtractProgress = 0; | ||
1834 | } | 1835 | } |
1835 | 1836 | ||
1836 | static void ResetPlannedPayloadsState( | 1837 | static void ResetPlannedPayloadsState( |
diff --git a/src/engine/userexperience.cpp b/src/engine/userexperience.cpp index 02c67fc5..279a00b5 100644 --- a/src/engine/userexperience.cpp +++ b/src/engine/userexperience.cpp | |||
@@ -758,6 +758,93 @@ LExit: | |||
758 | return hr; | 758 | return hr; |
759 | } | 759 | } |
760 | 760 | ||
761 | EXTERN_C BAAPI UserExperienceOnCachePayloadExtractBegin( | ||
762 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
763 | __in_z_opt LPCWSTR wzContainerId, | ||
764 | __in_z_opt LPCWSTR wzPayloadId | ||
765 | ) | ||
766 | { | ||
767 | HRESULT hr = S_OK; | ||
768 | BA_ONCACHEPAYLOADEXTRACTBEGIN_ARGS args = { }; | ||
769 | BA_ONCACHEPAYLOADEXTRACTBEGIN_RESULTS results = { }; | ||
770 | |||
771 | args.cbSize = sizeof(args); | ||
772 | args.wzContainerId = wzContainerId; | ||
773 | args.wzPayloadId = wzPayloadId; | ||
774 | |||
775 | results.cbSize = sizeof(results); | ||
776 | |||
777 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTBEGIN, &args, &results); | ||
778 | ExitOnFailure(hr, "BA OnCachePayloadExtractBegin failed."); | ||
779 | |||
780 | if (results.fCancel) | ||
781 | { | ||
782 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
783 | } | ||
784 | |||
785 | LExit: | ||
786 | return hr; | ||
787 | } | ||
788 | |||
789 | EXTERN_C BAAPI UserExperienceOnCachePayloadExtractComplete( | ||
790 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
791 | __in_z_opt LPCWSTR wzContainerId, | ||
792 | __in_z_opt LPCWSTR wzPayloadId, | ||
793 | __in HRESULT hrStatus | ||
794 | ) | ||
795 | { | ||
796 | HRESULT hr = S_OK; | ||
797 | BA_ONCACHEPAYLOADEXTRACTCOMPLETE_ARGS args = { }; | ||
798 | BA_ONCACHEPAYLOADEXTRACTCOMPLETE_RESULTS results = { }; | ||
799 | |||
800 | args.cbSize = sizeof(args); | ||
801 | args.wzContainerId = wzContainerId; | ||
802 | args.wzPayloadId = wzPayloadId; | ||
803 | args.hrStatus = hrStatus; | ||
804 | |||
805 | results.cbSize = sizeof(results); | ||
806 | |||
807 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTCOMPLETE, &args, &results); | ||
808 | ExitOnFailure(hr, "BA OnCachePayloadExtractComplete failed."); | ||
809 | |||
810 | LExit: | ||
811 | return hr; | ||
812 | } | ||
813 | |||
814 | EXTERN_C BAAPI UserExperienceOnCachePayloadExtractProgress( | ||
815 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
816 | __in_z_opt LPCWSTR wzContainerId, | ||
817 | __in_z_opt LPCWSTR wzPayloadId, | ||
818 | __in DWORD64 dw64Progress, | ||
819 | __in DWORD64 dw64Total, | ||
820 | __in DWORD dwOverallPercentage | ||
821 | ) | ||
822 | { | ||
823 | HRESULT hr = S_OK; | ||
824 | BA_ONCACHEPAYLOADEXTRACTPROGRESS_ARGS args = { }; | ||
825 | BA_ONCACHEPAYLOADEXTRACTPROGRESS_RESULTS results = { }; | ||
826 | |||
827 | args.cbSize = sizeof(args); | ||
828 | args.wzContainerId = wzContainerId; | ||
829 | args.wzPayloadId = wzPayloadId; | ||
830 | args.dw64Progress = dw64Progress; | ||
831 | args.dw64Total = dw64Total; | ||
832 | args.dwOverallPercentage = dwOverallPercentage; | ||
833 | |||
834 | results.cbSize = sizeof(results); | ||
835 | |||
836 | hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPAYLOADEXTRACTPROGRESS, &args, &results); | ||
837 | ExitOnFailure(hr, "BA OnCachePayloadExtractProgress failed."); | ||
838 | |||
839 | if (results.fCancel) | ||
840 | { | ||
841 | hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); | ||
842 | } | ||
843 | |||
844 | LExit: | ||
845 | return hr; | ||
846 | } | ||
847 | |||
761 | EXTERN_C BAAPI UserExperienceOnCacheVerifyBegin( | 848 | EXTERN_C BAAPI UserExperienceOnCacheVerifyBegin( |
762 | __in BURN_USER_EXPERIENCE* pUserExperience, | 849 | __in BURN_USER_EXPERIENCE* pUserExperience, |
763 | __in_z_opt LPCWSTR wzPackageOrContainerId, | 850 | __in_z_opt LPCWSTR wzPackageOrContainerId, |
diff --git a/src/engine/userexperience.h b/src/engine/userexperience.h index d3dfb810..a848e60d 100644 --- a/src/engine/userexperience.h +++ b/src/engine/userexperience.h | |||
@@ -196,6 +196,25 @@ BAAPI UserExperienceOnCachePackageComplete( | |||
196 | __in HRESULT hrStatus, | 196 | __in HRESULT hrStatus, |
197 | __inout BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION* pAction | 197 | __inout BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION* pAction |
198 | ); | 198 | ); |
199 | BAAPI UserExperienceOnCachePayloadExtractBegin( | ||
200 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
201 | __in_z_opt LPCWSTR wzContainerId, | ||
202 | __in_z_opt LPCWSTR wzPayloadId | ||
203 | ); | ||
204 | BAAPI UserExperienceOnCachePayloadExtractComplete( | ||
205 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
206 | __in_z_opt LPCWSTR wzContainerId, | ||
207 | __in_z_opt LPCWSTR wzPayloadId, | ||
208 | __in HRESULT hrStatus | ||
209 | ); | ||
210 | BAAPI UserExperienceOnCachePayloadExtractProgress( | ||
211 | __in BURN_USER_EXPERIENCE* pUserExperience, | ||
212 | __in_z_opt LPCWSTR wzContainerId, | ||
213 | __in_z_opt LPCWSTR wzPayloadId, | ||
214 | __in DWORD64 dw64Progress, | ||
215 | __in DWORD64 dw64Total, | ||
216 | __in DWORD dwOverallPercentage | ||
217 | ); | ||
199 | BAAPI UserExperienceOnCacheVerifyBegin( | 218 | BAAPI UserExperienceOnCacheVerifyBegin( |
200 | __in BURN_USER_EXPERIENCE* pUserExperience, | 219 | __in BURN_USER_EXPERIENCE* pUserExperience, |
201 | __in_z_opt LPCWSTR wzPackageOrContainerId, | 220 | __in_z_opt LPCWSTR wzPackageOrContainerId, |