aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/exeengine.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-08-25 15:08:34 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-08-26 10:03:37 -0500
commit4f5de06073ad664f60ac775da5de8c0fa1de4923 (patch)
tree62e6d71d1e0039bdabecd785d07f9f10d023771e /src/burn/engine/exeengine.cpp
parenta37208d9a26ec7886870cc17f0726676a285bf7f (diff)
downloadwix-4f5de06073ad664f60ac775da5de8c0fa1de4923.tar.gz
wix-4f5de06073ad664f60ac775da5de8c0fa1de4923.tar.bz2
wix-4f5de06073ad664f60ac775da5de8c0fa1de4923.zip
Process and return the failed version of reboot exit codes in Burn.
(ERROR_FAIL_REBOOT_REQUIRED and ERROR_FAIL_REBOOT_INITIATED) Fixes 6762
Diffstat (limited to 'src/burn/engine/exeengine.cpp')
-rw-r--r--src/burn/engine/exeengine.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/burn/engine/exeengine.cpp b/src/burn/engine/exeengine.cpp
index 3cb9c72a..6d326a5a 100644
--- a/src/burn/engine/exeengine.cpp
+++ b/src/burn/engine/exeengine.cpp
@@ -992,6 +992,16 @@ extern "C" HRESULT ExeEngineHandleExitCode(
992 { 992 {
993 typeCode = BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT; 993 typeCode = BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT;
994 } 994 }
995 else if (ERROR_FAIL_REBOOT_REQUIRED == dwExitCode ||
996 HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED) == static_cast<HRESULT>(dwExitCode))
997 {
998 typeCode = BURN_EXE_EXIT_CODE_TYPE_ERROR_SCHEDULE_REBOOT;
999 }
1000 else if (ERROR_FAIL_REBOOT_INITIATED == dwExitCode ||
1001 HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED) == static_cast<HRESULT>(dwExitCode))
1002 {
1003 typeCode = BURN_EXE_EXIT_CODE_TYPE_ERROR_FORCE_REBOOT;
1004 }
995 else 1005 else
996 { 1006 {
997 typeCode = BURN_EXE_EXIT_CODE_TYPE_ERROR; 1007 typeCode = BURN_EXE_EXIT_CODE_TYPE_ERROR;
@@ -1024,6 +1034,24 @@ extern "C" HRESULT ExeEngineHandleExitCode(
1024 hr = S_OK; 1034 hr = S_OK;
1025 break; 1035 break;
1026 1036
1037 case BURN_EXE_EXIT_CODE_TYPE_ERROR_SCHEDULE_REBOOT:
1038 *pRestart = BOOTSTRAPPER_APPLY_RESTART_REQUIRED;
1039 hr = HRESULT_FROM_WIN32(dwExitCode);
1040 if (SUCCEEDED(hr))
1041 {
1042 hr = HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED);
1043 }
1044 break;
1045
1046 case BURN_EXE_EXIT_CODE_TYPE_ERROR_FORCE_REBOOT:
1047 *pRestart = BOOTSTRAPPER_APPLY_RESTART_INITIATED;
1048 hr = HRESULT_FROM_WIN32(dwExitCode);
1049 if (SUCCEEDED(hr))
1050 {
1051 hr = HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED);
1052 }
1053 break;
1054
1027 default: 1055 default:
1028 hr = E_UNEXPECTED; 1056 hr = E_UNEXPECTED;
1029 break; 1057 break;