summaryrefslogtreecommitdiff
path: root/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-07-19 15:17:10 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-07-20 08:53:56 -0500
commit913b6238417dceeb8440315e4669990756d17655 (patch)
treea9e3552ea124d2025e30436afc8629f071c01ed4 /src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
parent93bb820eff547f8de304f05249f572da861256fb (diff)
downloadwix-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.cpp41
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;