diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-05-03 15:30:50 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-05-04 10:05:21 -0500 |
| commit | 29f7e00586412163a20e298fbf84505f8a917425 (patch) | |
| tree | 30257a3544f6982ded159443ebed0eb933f11a51 /src/burn/engine/uithread.cpp | |
| parent | 41d2c12d60ee84cefc26ec99abb328701883c8f5 (diff) | |
| download | wix-29f7e00586412163a20e298fbf84505f8a917425.tar.gz wix-29f7e00586412163a20e298fbf84505f8a917425.tar.bz2 wix-29f7e00586412163a20e298fbf84505f8a917425.zip | |
Only block shutdown during Apply.
Diffstat (limited to 'src/burn/engine/uithread.cpp')
| -rw-r--r-- | src/burn/engine/uithread.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/burn/engine/uithread.cpp b/src/burn/engine/uithread.cpp index bb1e5972..cdd8613c 100644 --- a/src/burn/engine/uithread.cpp +++ b/src/burn/engine/uithread.cpp | |||
| @@ -17,8 +17,7 @@ struct UITHREAD_CONTEXT | |||
| 17 | struct UITHREAD_INFO | 17 | struct UITHREAD_INFO |
| 18 | { | 18 | { |
| 19 | BOOL fElevatedEngine; | 19 | BOOL fElevatedEngine; |
| 20 | BURN_USER_EXPERIENCE* pUserExperience; | 20 | BURN_ENGINE_STATE* pEngineState; |
| 21 | BOOL* pfCriticalShutdownInitiated; | ||
| 22 | }; | 21 | }; |
| 23 | 22 | ||
| 24 | 23 | ||
| @@ -132,8 +131,7 @@ static DWORD WINAPI ThreadProc( | |||
| 132 | fRegistered = TRUE; | 131 | fRegistered = TRUE; |
| 133 | 132 | ||
| 134 | info.fElevatedEngine = fElevatedEngine; | 133 | info.fElevatedEngine = fElevatedEngine; |
| 135 | info.pUserExperience = &pEngineState->userExperience; | 134 | info.pEngineState = pEngineState; |
| 136 | info.pfCriticalShutdownInitiated = &pEngineState->fCriticalShutdownInitiated; | ||
| 137 | 135 | ||
| 138 | // Create the window to handle reboots without activating it. | 136 | // Create the window to handle reboots without activating it. |
| 139 | hWnd = ::CreateWindowExW(WS_EX_NOACTIVATE, wc.lpszClassName, NULL, WS_POPUP, 0, 0, 0, 0, HWND_DESKTOP, NULL, pContext->hInstance, &info); | 137 | hWnd = ::CreateWindowExW(WS_EX_NOACTIVATE, wc.lpszClassName, NULL, WS_POPUP, 0, 0, 0, 0, HWND_DESKTOP, NULL, pContext->hInstance, &info); |
| @@ -196,21 +194,17 @@ static LRESULT CALLBACK WndProc( | |||
| 196 | { | 194 | { |
| 197 | DWORD dwEndSession = static_cast<DWORD>(lParam); | 195 | DWORD dwEndSession = static_cast<DWORD>(lParam); |
| 198 | BOOL fCritical = ENDSESSION_CRITICAL & dwEndSession; | 196 | BOOL fCritical = ENDSESSION_CRITICAL & dwEndSession; |
| 199 | BOOL fCancel = TRUE; | 197 | BOOL fCancel = FALSE; |
| 200 | BOOL fRet = FALSE; | 198 | BOOL fRet = FALSE; |
| 201 | 199 | ||
| 202 | // Always block shutdown in the elevated process, but ask the BA in the non-elevated. | 200 | // Always block shutdown during apply. |
| 203 | UITHREAD_INFO* pInfo = reinterpret_cast<UITHREAD_INFO*>(::GetWindowLongPtrW(hWnd, GWLP_USERDATA)); | 201 | UITHREAD_INFO* pInfo = reinterpret_cast<UITHREAD_INFO*>(::GetWindowLongPtrW(hWnd, GWLP_USERDATA)); |
| 204 | if (!pInfo->fElevatedEngine) | 202 | if (pInfo->pEngineState->plan.fApplying) |
| 205 | { | 203 | { |
| 206 | // TODO: instead of recommending canceling all non-critical shutdowns, maybe we should only recommend cancel | 204 | fCancel = TRUE; |
| 207 | // when the engine is doing work? | ||
| 208 | fCancel = !fCritical; | ||
| 209 | // TODO: There's a race condition here where the BA may not have been loaded, or already was unloaded. | ||
| 210 | UserExperienceOnSystemShutdown(pInfo->pUserExperience, dwEndSession, &fCancel); | ||
| 211 | } | 205 | } |
| 212 | 206 | ||
| 213 | *pInfo->pfCriticalShutdownInitiated |= fCritical; | 207 | pInfo->pEngineState->fCriticalShutdownInitiated |= fCritical; |
| 214 | 208 | ||
| 215 | fRet = !fCancel; | 209 | fRet = !fCancel; |
| 216 | LogId(REPORT_STANDARD, MSG_SYSTEM_SHUTDOWN, LoggingBoolToString(fCritical), LoggingBoolToString(pInfo->fElevatedEngine), LoggingBoolToString(fRet)); | 210 | LogId(REPORT_STANDARD, MSG_SYSTEM_SHUTDOWN, LoggingBoolToString(fCritical), LoggingBoolToString(pInfo->fElevatedEngine), LoggingBoolToString(fRet)); |
