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 | |
| 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')
| -rw-r--r-- | src/ext/Bal/wixstdba/Resources/iuipreq.thm | 67 | ||||
| -rw-r--r-- | src/ext/Bal/wixstdba/Resources/iuipreq.wxl | 34 | ||||
| -rw-r--r-- | src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | 41 | ||||
| -rw-r--r-- | src/ext/Bal/wixstdba/inc/preqba.h | 4 |
4 files changed, 131 insertions, 15 deletions
diff --git a/src/ext/Bal/wixstdba/Resources/iuipreq.thm b/src/ext/Bal/wixstdba/Resources/iuipreq.thm new file mode 100644 index 00000000..5429b3d2 --- /dev/null +++ b/src/ext/Bal/wixstdba/Resources/iuipreq.thm | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Theme xmlns="http://wixtoolset.org/schemas/v4/thmutil"> | ||
| 3 | <Font Id="0" Height="-12" Weight="500" Foreground="windowtext" Background="window">Segoe UI</Font> | ||
| 4 | <Font Id="1" Height="-24" Weight="500" Foreground="windowtext">Segoe UI</Font> | ||
| 5 | <Font Id="2" Height="-22" Weight="500" Foreground="graytext">Segoe UI</Font> | ||
| 6 | <Font Id="3" Height="-12" Weight="500" Foreground="windowtext" Background="window">Segoe UI</Font> | ||
| 7 | |||
| 8 | <Window Width="485" Height="300" HexStyle="100a0000" FontId="0" Caption="#(loc.Caption)"> | ||
| 9 | <ImageControl X="11" Y="11" Width="64" Height="64" ImageFile="mbapreq.png" Visible="yes"/> | ||
| 10 | <Label X="80" Y="11" Width="-11" Height="96" FontId="1" Visible="yes" DisablePrefix="yes"> | ||
| 11 | <Text>#(loc.Title)</Text> | ||
| 12 | <Text Condition="WixBundleAction = 2 OR WixBundleCommandLineAction = 1">#(loc.NonPrereqTitle)</Text> | ||
| 13 | </Label> | ||
| 14 | |||
| 15 | <Page Name="Help"> | ||
| 16 | <Label X="11" Y="112" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Label> | ||
| 17 | <Label X="11" Y="153" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Label> | ||
| 18 | <Button Name="HelpCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> | ||
| 19 | <Text>#(loc.HelpCloseButton)</Text> | ||
| 20 | <CloseWindowAction /> | ||
| 21 | </Button> | ||
| 22 | </Page> | ||
| 23 | <Page Name="Install"> | ||
| 24 | <Hypertext Name="EulaHyperlink" X="11" Y="121" Width="-11" Height="34" TabStop="yes" FontId="3">#(loc.InstallLicenseTerms)</Hypertext> | ||
| 25 | <Button Name="InstallButton" X="-91" Y="-11" Width="130" Height="23" TabStop="yes" FontId="0">#(loc.InstallAcceptAndInstallButton)</Button> | ||
| 26 | <Button Name="InstallDeclineButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> | ||
| 27 | <Text>#(loc.InstallDeclineButton)</Text> | ||
| 28 | <CloseWindowAction /> | ||
| 29 | </Button> | ||
| 30 | </Page> | ||
| 31 | <Page Name="Progress"> | ||
| 32 | <Label X="11" Y="112" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Label> | ||
| 33 | <Label X="11" Y="153" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Label> | ||
| 34 | <Label Name="OverallProgressPackageText" X="85" Y="153" Width="-11" Height="17" FontId="3" DisablePrefix="yes">[ProgressPackageName]</Label> | ||
| 35 | <Progressbar Name="OverallCalculatedProgressbar" X="11" Y="175" Width="-11" Height="15" /> | ||
| 36 | <Button Name="ProgressCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button> | ||
| 37 | </Page> | ||
| 38 | <Page Name="Success"> | ||
| 39 | <Label X="11" Y="112" Width="-11" Height="30" FontId="2" DisablePrefix="yes"> | ||
| 40 | <Text>#(loc.SuccessHeader)</Text> | ||
| 41 | <Text Condition="WixBundleAction = 2">#(loc.SuccessLayoutHeader)</Text> | ||
| 42 | </Label> | ||
| 43 | <Label X="-11" Y="-20" Width="400" Height="34" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBARestartRequired"> | ||
| 44 | <Text>#(loc.SuccessRestartText)</Text> | ||
| 45 | </Label> | ||
| 46 | <Button Name="SuccessRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button> | ||
| 47 | <Button Name="SuccessCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> | ||
| 48 | <Text>#(loc.SuccessCloseButton)</Text> | ||
| 49 | <CloseWindowAction /> | ||
| 50 | </Button> | ||
| 51 | </Page> | ||
| 52 | <Page Name="Failure"> | ||
| 53 | <Label X="11" Y="112" Width="-11" Height="30" FontId="2" DisablePrefix="yes"> | ||
| 54 | <Text>#(loc.FailureHeader)</Text> | ||
| 55 | <Text Condition="WixBundleAction = 2">#(loc.FailureLayoutHeader)</Text> | ||
| 56 | </Label> | ||
| 57 | <Hypertext Name="FailureLogFileLink" X="11" Y="153" Width="-11" Height="51" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureLogLinkText)</Hypertext> | ||
| 58 | <Hypertext Name="FailureMessageText" X="22" Y="190" Width="-11" Height="51" FontId="3" TabStop="yes" HideWhenDisabled="yes"/> | ||
| 59 | <Label X="-11" Y="-20" Width="400" Height="34" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBARestartRequired">#(loc.FailureRestartText)</Label> | ||
| 60 | <Button Name="FailureRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button> | ||
| 61 | <Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> | ||
| 62 | <Text>#(loc.FailureCloseButton)</Text> | ||
| 63 | <CloseWindowAction /> | ||
| 64 | </Button> | ||
| 65 | </Page> | ||
| 66 | </Window> | ||
| 67 | </Theme> | ||
diff --git a/src/ext/Bal/wixstdba/Resources/iuipreq.wxl b/src/ext/Bal/wixstdba/Resources/iuipreq.wxl new file mode 100644 index 00000000..4afcd10f --- /dev/null +++ b/src/ext/Bal/wixstdba/Resources/iuipreq.wxl | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> | ||
| 3 | |||
| 4 | |||
| 5 | <WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl"> | ||
| 6 | <String Id="Caption">[WixBundleName] Prerequisite Setup</String> | ||
| 7 | <String Id="Title">Prerequisite required for [WixBundleName] setup</String> | ||
| 8 | <String Id="NonPrereqTitle">[WixBundleName] setup</String> | ||
| 9 | <String Id="ConfirmCancelMessage">Are you sure you want to cancel?</String> | ||
| 10 | <String Id="HelpHeader">Setup Help</String> | ||
| 11 | <String Id="HelpText">/passive | /quiet - displays minimal UI with no prompts or displays no UI and | ||
| 12 | no prompts. By default UI and all prompts are displayed. | ||
| 13 | |||
| 14 | /log log.txt - logs to a specific file. By default a log file is created in %TEMP%.</String> | ||
| 15 | <String Id="HelpCloseButton">&Close</String> | ||
| 16 | <String Id="InstallLicenseTerms">Click the "Accept and Install" button to accept the prerequisite <a href="#">license terms</a>.</String> | ||
| 17 | <String Id="InstallAcceptAndInstallButton">&Accept and Install</String> | ||
| 18 | <String Id="InstallDeclineButton">&Decline</String> | ||
| 19 | <String Id="ProgressHeader">Setup Progress</String> | ||
| 20 | <String Id="ProgressLabel">Processing:</String> | ||
| 21 | <String Id="ProgressCancelButton">&Cancel</String> | ||
| 22 | <String Id="SuccessHeader">Prerequisite Setup Successful</String> | ||
| 23 | <String Id="SuccessLayoutHeader">Layout Successfully Completed</String> | ||
| 24 | <String Id="SuccessRestartText">You must restart your computer before [WixBundleName] setup can continue.</String> | ||
| 25 | <String Id="SuccessRestartButton">&Restart</String> | ||
| 26 | <String Id="SuccessCloseButton">&Close</String> | ||
| 27 | <String Id="FailureHeader">Setup Failed</String> | ||
| 28 | <String Id="FailureLayoutHeader">Layout Failed</String> | ||
| 29 | <String Id="FailureLogLinkText">One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>.</String> | ||
| 30 | <String Id="FailureRestartText">You must restart your computer to complete the rollback of the software.</String> | ||
| 31 | <String Id="FailureRestartButton">&Restart</String> | ||
| 32 | <String Id="FailureCloseButton">&Close</String> | ||
| 33 | <String Id="ErrorFailNoActionReboot">No action was taken as a system reboot is required.</String> | ||
| 34 | </WixLocalization> | ||
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; |
diff --git a/src/ext/Bal/wixstdba/inc/preqba.h b/src/ext/Bal/wixstdba/inc/preqba.h index ed339730..25fa7105 100644 --- a/src/ext/Bal/wixstdba/inc/preqba.h +++ b/src/ext/Bal/wixstdba/inc/preqba.h | |||
| @@ -4,8 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | struct PREQBA_DATA | 5 | struct PREQBA_DATA |
| 6 | { | 6 | { |
| 7 | HRESULT hrHostInitialization; | 7 | HRESULT hrFatalError; |
| 8 | BOOL fAlwaysInstallPrereqs; | 8 | BOOL fAlwaysInstallPrereqs; |
| 9 | BOOL fPerformHelp; | ||
| 10 | BOOL fPerformLayout; | ||
| 9 | BOOL fCompleted; | 11 | BOOL fCompleted; |
| 10 | }; | 12 | }; |
| 11 | 13 | ||
