diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-06-16 12:05:47 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-06-17 12:01:02 -0600 |
commit | 43cc8d743cbae0c21c694621069c916109bdfbc7 (patch) | |
tree | 18fb5f9d28eec8698fa58b02bfd25d4d550dfad3 /src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | |
parent | 6895a3e9625afe647a94f970103bdbb4f58fb0f8 (diff) | |
download | wix-43cc8d743cbae0c21c694621069c916109bdfbc7.tar.gz wix-43cc8d743cbae0c21c694621069c916109bdfbc7.tar.bz2 wix-43cc8d743cbae0c21c694621069c916109bdfbc7.zip |
Add Success page to prereq BA.
This was needed to explain to the user that a restart is required but not allowed.
It also allows localizing the reboot prompt.
Fixes #3957, #5395
Diffstat (limited to 'src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp')
-rw-r--r-- | src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp index a266fa1d..62cdc70a 100644 --- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | |||
@@ -228,9 +228,9 @@ public: // IBootstrapperApplication | |||
228 | } | 228 | } |
229 | 229 | ||
230 | // If a restart was required. | 230 | // If a restart was required. |
231 | if (BOOTSTRAPPER_APPLY_RESTART_NONE != m_restartResult) | 231 | if (m_fRestartRequired) |
232 | { | 232 | { |
233 | if (m_fRestartRequired && m_fAllowRestart) | 233 | if (m_fShouldRestart && m_fAllowRestart) |
234 | { | 234 | { |
235 | *pAction = BOOTSTRAPPER_SHUTDOWN_ACTION_RESTART; | 235 | *pAction = BOOTSTRAPPER_SHUTDOWN_ACTION_RESTART; |
236 | } | 236 | } |
@@ -1097,13 +1097,13 @@ public: // IBootstrapperApplication | |||
1097 | __super::OnApplyComplete(hrStatus, restart, recommendation, pAction); | 1097 | __super::OnApplyComplete(hrStatus, restart, recommendation, pAction); |
1098 | 1098 | ||
1099 | m_restartResult = restart; // remember the restart result so we return the correct error code no matter what the user chooses to do in the UI. | 1099 | m_restartResult = restart; // remember the restart result so we return the correct error code no matter what the user chooses to do in the UI. |
1100 | 1100 | m_fRestartRequired = BOOTSTRAPPER_APPLY_RESTART_NONE != restart; | |
1101 | // If a restart was encountered and we are not suppressing restarts, then restart is required. | ||
1102 | m_fRestartRequired = (BOOTSTRAPPER_APPLY_RESTART_NONE != restart && BOOTSTRAPPER_RESTART_NEVER < m_command.restart); | ||
1103 | BalSetStringVariable(WIXSTDBA_VARIABLE_RESTART_REQUIRED, m_fRestartRequired ? L"1" : NULL, FALSE); | 1101 | BalSetStringVariable(WIXSTDBA_VARIABLE_RESTART_REQUIRED, m_fRestartRequired ? L"1" : NULL, FALSE); |
1104 | 1102 | ||
1105 | // If a restart is required and we're not displaying a UI or we are not supposed to prompt for restart then allow the restart. | 1103 | m_fShouldRestart = m_fRestartRequired && BOOTSTRAPPER_RESTART_NEVER < m_command.restart; |
1106 | m_fAllowRestart = m_fRestartRequired && (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_RESTART_PROMPT < m_command.restart); | 1104 | |
1105 | // Automatically restart if we're not displaying a UI or the command line said to always allow restarts. | ||
1106 | m_fAllowRestart = m_fShouldRestart && (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_RESTART_PROMPT < m_command.restart); | ||
1107 | 1107 | ||
1108 | if (m_fPrereq) | 1108 | if (m_fPrereq) |
1109 | { | 1109 | { |
@@ -3163,20 +3163,11 @@ private: // privates | |||
3163 | m_state = state; | 3163 | m_state = state; |
3164 | 3164 | ||
3165 | // If our install is at the end (success or failure) and we're not showing full UI or | 3165 | // If our install is at the end (success or failure) and we're not showing full UI or |
3166 | // we successfully installed the prerequisite then exit (prompt for restart if required). | 3166 | // we successfully installed the prerequisite(s) and either no restart is required or can automatically restart |
3167 | // then exit. | ||
3167 | if ((WIXSTDBA_STATE_APPLIED <= m_state && BOOTSTRAPPER_DISPLAY_FULL > m_command.display) || | 3168 | if ((WIXSTDBA_STATE_APPLIED <= m_state && BOOTSTRAPPER_DISPLAY_FULL > m_command.display) || |
3168 | (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq)) | 3169 | (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq && (!m_fRestartRequired || m_fShouldRestart && m_fAllowRestart))) |
3169 | { | 3170 | { |
3170 | // If a restart was required but we were not automatically allowed to | ||
3171 | // accept the reboot then do the prompt. | ||
3172 | if (m_fRestartRequired && !m_fAllowRestart) | ||
3173 | { | ||
3174 | StrAllocFromError(&sczUnformattedText, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), NULL); | ||
3175 | |||
3176 | int nResult = ::MessageBoxW(m_hWnd, sczUnformattedText ? sczUnformattedText : L"The requested operation is successful. Changes will not be effective until the system is rebooted.", m_pTheme->sczCaption, MB_ICONEXCLAMATION | MB_OKCANCEL); | ||
3177 | m_fAllowRestart = (IDOK == nResult); | ||
3178 | } | ||
3179 | |||
3180 | // Quietly exit. | 3171 | // Quietly exit. |
3181 | ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); | 3172 | ::PostMessageW(m_hWnd, WM_CLOSE, 0, 0); |
3182 | } | 3173 | } |
@@ -3214,13 +3205,13 @@ private: // privates | |||
3214 | } | 3205 | } |
3215 | else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled. | 3206 | else if (m_rgdwPageIds[WIXSTDBA_PAGE_SUCCESS] == dwNewPageId) // on the "Success" page, check if the restart or launch button should be enabled. |
3216 | { | 3207 | { |
3217 | BOOL fShowRestartButton = FALSE; | 3208 | BOOL fEnableRestartButton = FALSE; |
3218 | BOOL fLaunchTargetExists = FALSE; | 3209 | BOOL fLaunchTargetExists = FALSE; |
3219 | if (m_fRestartRequired) | 3210 | if (m_fShouldRestart) |
3220 | { | 3211 | { |
3221 | if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) | 3212 | if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) |
3222 | { | 3213 | { |
3223 | fShowRestartButton = TRUE; | 3214 | fEnableRestartButton = TRUE; |
3224 | } | 3215 | } |
3225 | } | 3216 | } |
3226 | else if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON)) | 3217 | else if (ThemeControlExists(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON)) |
@@ -3229,13 +3220,13 @@ private: // privates | |||
3229 | } | 3220 | } |
3230 | 3221 | ||
3231 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction); | 3222 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_LAUNCH_BUTTON, fLaunchTargetExists && BOOTSTRAPPER_ACTION_UNINSTALL < m_plannedAction); |
3232 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, fShowRestartButton); | 3223 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON, fEnableRestartButton); |
3233 | } | 3224 | } |
3234 | else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled. | 3225 | else if (m_rgdwPageIds[WIXSTDBA_PAGE_FAILURE] == dwNewPageId) // on the "Failure" page, show error message and check if the restart button should be enabled. |
3235 | { | 3226 | { |
3236 | BOOL fShowLogLink = (m_Bundle.sczLogVariable && *m_Bundle.sczLogVariable); // if there is a log file variable then we'll assume the log file exists. | 3227 | BOOL fShowLogLink = (m_Bundle.sczLogVariable && *m_Bundle.sczLogVariable); // if there is a log file variable then we'll assume the log file exists. |
3237 | BOOL fShowErrorMessage = FALSE; | 3228 | BOOL fShowErrorMessage = FALSE; |
3238 | BOOL fShowRestartButton = FALSE; | 3229 | BOOL fEnableRestartButton = FALSE; |
3239 | 3230 | ||
3240 | if (FAILED(m_hrFinal)) | 3231 | if (FAILED(m_hrFinal)) |
3241 | { | 3232 | { |
@@ -3317,17 +3308,17 @@ private: // privates | |||
3317 | fShowErrorMessage = TRUE; | 3308 | fShowErrorMessage = TRUE; |
3318 | } | 3309 | } |
3319 | 3310 | ||
3320 | if (m_fRestartRequired) | 3311 | if (m_fShouldRestart) |
3321 | { | 3312 | { |
3322 | if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) | 3313 | if (BOOTSTRAPPER_RESTART_PROMPT == m_command.restart) |
3323 | { | 3314 | { |
3324 | fShowRestartButton = TRUE; | 3315 | fEnableRestartButton = TRUE; |
3325 | } | 3316 | } |
3326 | } | 3317 | } |
3327 | 3318 | ||
3328 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, fShowLogLink); | 3319 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK, fShowLogLink); |
3329 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, fShowErrorMessage); | 3320 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT, fShowErrorMessage); |
3330 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, fShowRestartButton); | 3321 | ThemeControlEnable(m_pTheme, WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON, fEnableRestartButton); |
3331 | } | 3322 | } |
3332 | 3323 | ||
3333 | HRESULT hr = ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE); | 3324 | HRESULT hr = ThemeShowPage(m_pTheme, dwOldPageId, SW_HIDE); |
@@ -3977,6 +3968,7 @@ public: | |||
3977 | m_fDowngrading = FALSE; | 3968 | m_fDowngrading = FALSE; |
3978 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; | 3969 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; |
3979 | m_fRestartRequired = FALSE; | 3970 | m_fRestartRequired = FALSE; |
3971 | m_fShouldRestart = FALSE; | ||
3980 | m_fAllowRestart = FALSE; | 3972 | m_fAllowRestart = FALSE; |
3981 | 3973 | ||
3982 | m_sczLicenseFile = NULL; | 3974 | m_sczLicenseFile = NULL; |
@@ -4079,6 +4071,7 @@ private: | |||
4079 | BOOL m_fDowngrading; | 4071 | BOOL m_fDowngrading; |
4080 | BOOTSTRAPPER_APPLY_RESTART m_restartResult; | 4072 | BOOTSTRAPPER_APPLY_RESTART m_restartResult; |
4081 | BOOL m_fRestartRequired; | 4073 | BOOL m_fRestartRequired; |
4074 | BOOL m_fShouldRestart; | ||
4082 | BOOL m_fAllowRestart; | 4075 | BOOL m_fAllowRestart; |
4083 | 4076 | ||
4084 | LPWSTR m_sczLicenseFile; | 4077 | LPWSTR m_sczLicenseFile; |