From e263e6bca03d783ece2f2dc86345dcdfc4b9776d Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 2 Sep 2022 16:08:29 -0500 Subject: Delay closing the bundle log so that restart failures will be logged. --- src/burn/engine/engine.cpp | 68 ++++++++++++++++++++++++---------------------- src/burn/engine/engine.mc | 7 +++++ 2 files changed, 42 insertions(+), 33 deletions(-) (limited to 'src/burn') diff --git a/src/burn/engine/engine.cpp b/src/burn/engine/engine.cpp index 628708f5..13d23ecd 100644 --- a/src/burn/engine/engine.cpp +++ b/src/burn/engine/engine.cpp @@ -297,6 +297,41 @@ LExit: hr = SUCCEEDED(hr) ? HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED) : HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED); } + if (fRunNormal) + { + LogId(REPORT_STANDARD, MSG_EXITING, FAILED(hr) ? (int)hr : *pdwExitCode, LoggingBoolToString(fRestart)); + } + else if (fRunUntrusted) + { + LogId(REPORT_STANDARD, MSG_EXITING_CLEAN_ROOM, FAILED(hr) ? (int)hr : *pdwExitCode); + } + else if (fRunRunOnce) + { + LogId(REPORT_STANDARD, MSG_EXITING_RUN_ONCE, FAILED(hr) ? (int)hr : *pdwExitCode); + } + else if (fRunElevated) + { + LogId(REPORT_STANDARD, MSG_EXITING_ELEVATED, FAILED(hr) ? (int)hr : *pdwExitCode); + } + + if (fLogInitialized) + { + // Leave the log open before calling restart so messages can be logged from there. + // Best effort to make sure all previous messages are written to disk in case the restart causes messages to be lost in buffers. + LogFlush(); + } + + if (fRestart) + { + LogId(REPORT_STANDARD, MSG_RESTARTING); + + HRESULT hrRestart = Restart(); + if (FAILED(hrRestart)) + { + LogErrorId(hrRestart, MSG_RESTART_FAILED); + } + } + UninitializeEngineState(&engineState); if (fXmlInitialized) @@ -329,42 +364,9 @@ LExit: ::CoUninitialize(); } - if (fRunNormal) - { - LogId(REPORT_STANDARD, MSG_EXITING, FAILED(hr) ? (int)hr : *pdwExitCode, LoggingBoolToString(fRestart)); - - if (fRestart) - { - LogId(REPORT_STANDARD, MSG_RESTARTING); - } - } - else if (fRunUntrusted) - { - LogId(REPORT_STANDARD, MSG_EXITING_CLEAN_ROOM, FAILED(hr) ? (int)hr : *pdwExitCode); - } - else if (fRunRunOnce) - { - LogId(REPORT_STANDARD, MSG_EXITING_RUN_ONCE, FAILED(hr) ? (int)hr : *pdwExitCode); - } - else if (fRunElevated) - { - LogId(REPORT_STANDARD, MSG_EXITING_ELEVATED, FAILED(hr) ? (int)hr : *pdwExitCode); - } - - if (fLogInitialized) { DutilUninitialize(); - LogClose(FALSE); - } - - if (fRestart) - { - Restart(); - } - - if (fLogInitialized) - { LogUninitialize(FALSE); } diff --git a/src/burn/engine/engine.mc b/src/burn/engine/engine.mc index 32616721..dab1a504 100644 --- a/src/burn/engine/engine.mc +++ b/src/burn/engine/engine.mc @@ -184,6 +184,13 @@ Language=English Elevated engine process is not running with elevated privileges. Either run the bundle as a privileged user or reconfigure Windows to allow standard users to request elevation. . +MessageId=23 +Severity=Error +SymbolicName=MSG_RESTART_FAILED +Language=English +The restart request failed, error: %1!ls!. The machine will need to be manually restarted. +. + MessageId=51 Severity=Error SymbolicName=MSG_FAILED_PARSE_CONDITION -- cgit v1.2.3-55-g6feb