diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-07-19 15:17:10 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-07-20 08:53:56 -0500 |
commit | 913b6238417dceeb8440315e4669990756d17655 (patch) | |
tree | a9e3552ea124d2025e30436afc8629f071c01ed4 /src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | |
parent | 93bb820eff547f8de304f05249f572da861256fb (diff) | |
download | wix-913b6238417dceeb8440315e4669990756d17655.tar.gz wix-913b6238417dceeb8440315e4669990756d17655.tar.bz2 wix-913b6238417dceeb8440315e4669990756d17655.zip |
Add WixInternalUIBootstrapperApplication as a new built-in BA.
Implements 6835
Diffstat (limited to 'src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp')
-rw-r--r-- | src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp index 9aa58a28..1af1abeb 100644 --- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | |||
@@ -248,10 +248,20 @@ public: // IBootstrapperApplication | |||
248 | 248 | ||
249 | if (m_fPrereq) | 249 | if (m_fPrereq) |
250 | { | 250 | { |
251 | // Pre-req BA should only show help or do an install (to launch the Managed BA which can then do the right action). | 251 | if (m_pPrereqData->fPerformLayout && BOOTSTRAPPER_ACTION_LAYOUT == m_command.action) |
252 | if (BOOTSTRAPPER_ACTION_HELP != m_command.action) | ||
253 | { | 252 | { |
254 | m_command.action = BOOTSTRAPPER_ACTION_INSTALL; | 253 | // The parent BA has requested that this BA be in charge of layout. |
254 | m_fPrereq = FALSE; | ||
255 | } | ||
256 | else | ||
257 | { | ||
258 | m_fPreplanPrereqs = m_pPrereqData->fAlwaysInstallPrereqs; | ||
259 | |||
260 | // Pre-req BA should only show help or do an install (to launch the parent BA which can then do the right action). | ||
261 | if (BOOTSTRAPPER_ACTION_HELP != m_command.action) | ||
262 | { | ||
263 | m_command.action = BOOTSTRAPPER_ACTION_INSTALL; | ||
264 | } | ||
255 | } | 265 | } |
256 | } | 266 | } |
257 | else // maybe modify the action state if the bundle is or is not already installed. | 267 | else // maybe modify the action state if the bundle is or is not already installed. |
@@ -527,11 +537,11 @@ public: // IBootstrapperApplication | |||
527 | ) | 537 | ) |
528 | { | 538 | { |
529 | HRESULT hr = S_OK; | 539 | HRESULT hr = S_OK; |
530 | BOOL fPlannedPrereqs = WIXSTDBA_STATE_PLANNING_PREREQS == m_state; | 540 | BOOL fPreplannedPrereqs = WIXSTDBA_STATE_PLANNING_PREREQS == m_state; |
531 | WIXSTDBA_STATE completedState = WIXSTDBA_STATE_PLANNED; | 541 | WIXSTDBA_STATE completedState = WIXSTDBA_STATE_PLANNED; |
532 | BOOL fApply = TRUE; | 542 | BOOL fApply = TRUE; |
533 | 543 | ||
534 | if (fPlannedPrereqs) | 544 | if (fPreplannedPrereqs) |
535 | { | 545 | { |
536 | if (SUCCEEDED(hrStatus) && !m_fPrereqPackagePlanned) | 546 | if (SUCCEEDED(hrStatus) && !m_fPrereqPackagePlanned) |
537 | { | 547 | { |
@@ -547,7 +557,7 @@ public: // IBootstrapperApplication | |||
547 | // Need to force the state change since normally moving backwards is prevented. | 557 | // Need to force the state change since normally moving backwards is prevented. |
548 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_CHANGE_STATE, 0, WIXSTDBA_STATE_HELP); | 558 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_CHANGE_STATE, 0, WIXSTDBA_STATE_HELP); |
549 | 559 | ||
550 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_SHOW_HELP, 0, 0); | 560 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_SHOW_HELP, 0, 0); |
551 | 561 | ||
552 | ExitFunction(); | 562 | ExitFunction(); |
553 | } | 563 | } |
@@ -562,7 +572,7 @@ public: // IBootstrapperApplication | |||
562 | ExitFunction(); | 572 | ExitFunction(); |
563 | } | 573 | } |
564 | 574 | ||
565 | if (fPlannedPrereqs) | 575 | if (fPreplannedPrereqs) |
566 | { | 576 | { |
567 | // If the UI should be visible, display it now and hide the splash screen | 577 | // If the UI should be visible, display it now and hide the splash screen |
568 | if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) | 578 | if (BOOTSTRAPPER_DISPLAY_NONE < m_command.display) |
@@ -1056,13 +1066,14 @@ public: // IBootstrapperApplication | |||
1056 | 1066 | ||
1057 | hr = __super::OnExecutePackageComplete(wzPackageId, hrStatus, restart, recommendation, pAction); | 1067 | hr = __super::OnExecutePackageComplete(wzPackageId, hrStatus, restart, recommendation, pAction); |
1058 | 1068 | ||
1059 | BAL_INFO_PACKAGE* pPackage = NULL; | 1069 | if (m_fPrereq && BOOTSTRAPPER_APPLY_RESTART_NONE != restart) |
1060 | HRESULT hrPrereq = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); | ||
1061 | if (SUCCEEDED(hrPrereq)) | ||
1062 | { | 1070 | { |
1071 | BAL_INFO_PACKAGE* pPackage = NULL; | ||
1072 | HRESULT hrPrereq = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); | ||
1073 | |||
1063 | // If the prerequisite required a restart (any restart) then do an immediate | 1074 | // If the prerequisite required a restart (any restart) then do an immediate |
1064 | // restart to ensure that the bundle will get launched again post reboot. | 1075 | // restart to ensure that the bundle will get launched again post reboot. |
1065 | if (m_fPrereq && pPackage->fPrereqPackage && BOOTSTRAPPER_APPLY_RESTART_NONE != restart) | 1076 | if (SUCCEEDED(hrPrereq) && pPackage->fPrereqPackage) |
1066 | { | 1077 | { |
1067 | *pAction = BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_RESTART; | 1078 | *pAction = BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_RESTART; |
1068 | } | 1079 | } |
@@ -2283,7 +2294,7 @@ private: | |||
2283 | // Okay, we're ready for packages now. | 2294 | // Okay, we're ready for packages now. |
2284 | pThis->SetState(WIXSTDBA_STATE_INITIALIZED, hr); | 2295 | pThis->SetState(WIXSTDBA_STATE_INITIALIZED, hr); |
2285 | 2296 | ||
2286 | if (!pThis->m_fPreplanPrereqs && BOOTSTRAPPER_ACTION_HELP == pThis->m_command.action) | 2297 | if (pThis->m_fPerformHelp && BOOTSTRAPPER_ACTION_HELP == pThis->m_command.action) |
2287 | { | 2298 | { |
2288 | firstAction = WM_WIXSTDBA_SHOW_HELP; | 2299 | firstAction = WM_WIXSTDBA_SHOW_HELP; |
2289 | } | 2300 | } |
@@ -4246,7 +4257,7 @@ public: | |||
4246 | m_hWnd = NULL; | 4257 | m_hWnd = NULL; |
4247 | 4258 | ||
4248 | m_state = WIXSTDBA_STATE_INITIALIZING; | 4259 | m_state = WIXSTDBA_STATE_INITIALIZING; |
4249 | m_hrFinal = pPrereqData ? pPrereqData->hrHostInitialization : S_OK; | 4260 | m_hrFinal = pPrereqData ? pPrereqData->hrFatalError : S_OK; |
4250 | 4261 | ||
4251 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; | 4262 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; |
4252 | m_fRestartRequired = FALSE; | 4263 | m_fRestartRequired = FALSE; |
@@ -4269,7 +4280,8 @@ public: | |||
4269 | 4280 | ||
4270 | m_pPrereqData = pPrereqData; | 4281 | m_pPrereqData = pPrereqData; |
4271 | m_fPrereq = NULL != pPrereqData; | 4282 | m_fPrereq = NULL != pPrereqData; |
4272 | m_fPreplanPrereqs = m_fPrereq && m_pPrereqData->fAlwaysInstallPrereqs; | 4283 | m_fPreplanPrereqs = FALSE; |
4284 | m_fPerformHelp = !m_fPrereq || m_pPrereqData->fPerformHelp; | ||
4273 | m_fPrereqPackagePlanned = FALSE; | 4285 | m_fPrereqPackagePlanned = FALSE; |
4274 | m_fPrereqInstalled = FALSE; | 4286 | m_fPrereqInstalled = FALSE; |
4275 | m_fPrereqSkipped = FALSE; | 4287 | m_fPrereqSkipped = FALSE; |
@@ -4554,6 +4566,7 @@ private: | |||
4554 | PREQBA_DATA* m_pPrereqData; | 4566 | PREQBA_DATA* m_pPrereqData; |
4555 | BOOL m_fPrereq; | 4567 | BOOL m_fPrereq; |
4556 | BOOL m_fPreplanPrereqs; | 4568 | BOOL m_fPreplanPrereqs; |
4569 | BOOL m_fPerformHelp; | ||
4557 | BOOL m_fPrereqPackagePlanned; | 4570 | BOOL m_fPrereqPackagePlanned; |
4558 | BOOL m_fPrereqInstalled; | 4571 | BOOL m_fPrereqInstalled; |
4559 | BOOL m_fPrereqSkipped; | 4572 | BOOL m_fPrereqSkipped; |