aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs2
-rw-r--r--src/burn/engine/engine.cpp2
-rw-r--r--src/burn/engine/exeengine.cpp28
-rw-r--r--src/burn/engine/logging.cpp4
-rw-r--r--src/burn/engine/package.h2
-rw-r--r--src/burn/test/BurnUnitTest/ExitCodeTest.cpp20
-rw-r--r--src/ext/Bal/wixiuiba/WixInternalUIBootstrapperApplication.cpp4
-rw-r--r--src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp4
-rw-r--r--src/libs/dutil/WixToolset.DUtil/wiutil.cpp8
-rw-r--r--src/wix/WixToolset.Core/Compiler_Bundle.cs8
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs8
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs8
12 files changed, 92 insertions, 6 deletions
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs
index f025a493..4d50b01c 100644
--- a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs
+++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs
@@ -36,6 +36,8 @@ namespace WixToolset.Data.Symbols
36 Error, 36 Error,
37 ScheduleReboot, 37 ScheduleReboot,
38 ForceReboot, 38 ForceReboot,
39 ErrorScheduleReboot,
40 ErrorForceReboot,
39 } 41 }
40 42
41 public class WixBundlePackageExitCodeSymbol : IntermediateSymbol 43 public class WixBundlePackageExitCodeSymbol : IntermediateSymbol
diff --git a/src/burn/engine/engine.cpp b/src/burn/engine/engine.cpp
index daaf51dc..aefba98b 100644
--- a/src/burn/engine/engine.cpp
+++ b/src/burn/engine/engine.cpp
@@ -294,7 +294,7 @@ LExit:
294 LogId(REPORT_STANDARD, MSG_RESTART_ABORTED, LoggingRelationTypeToString(engineState.command.relationType)); 294 LogId(REPORT_STANDARD, MSG_RESTART_ABORTED, LoggingRelationTypeToString(engineState.command.relationType));
295 295
296 fRestart = FALSE; 296 fRestart = FALSE;
297 hr = HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED); 297 hr = SUCCEEDED(hr) ? HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED) : HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED);
298 } 298 }
299 299
300 UninitializeEngineState(&engineState); 300 UninitializeEngineState(&engineState);
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;
diff --git a/src/burn/engine/logging.cpp b/src/burn/engine/logging.cpp
index 38c9d2d5..a16e82b0 100644
--- a/src/burn/engine/logging.cpp
+++ b/src/burn/engine/logging.cpp
@@ -545,6 +545,10 @@ extern "C" LPCSTR LoggingExitCodeTypeToString(
545 return "ScheduleReboot"; 545 return "ScheduleReboot";
546 case BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT: 546 case BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT:
547 return "ForceReboot"; 547 return "ForceReboot";
548 case BURN_EXE_EXIT_CODE_TYPE_ERROR_SCHEDULE_REBOOT:
549 return "ErrorScheduleReboot";
550 case BURN_EXE_EXIT_CODE_TYPE_ERROR_FORCE_REBOOT:
551 return "ErrorForceReboot";
548 default: 552 default:
549 return "Invalid"; 553 return "Invalid";
550 } 554 }
diff --git a/src/burn/engine/package.h b/src/burn/engine/package.h
index e45c775d..bdebd5b6 100644
--- a/src/burn/engine/package.h
+++ b/src/burn/engine/package.h
@@ -37,6 +37,8 @@ enum BURN_EXE_EXIT_CODE_TYPE
37 BURN_EXE_EXIT_CODE_TYPE_ERROR, 37 BURN_EXE_EXIT_CODE_TYPE_ERROR,
38 BURN_EXE_EXIT_CODE_TYPE_SCHEDULE_REBOOT, 38 BURN_EXE_EXIT_CODE_TYPE_SCHEDULE_REBOOT,
39 BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT, 39 BURN_EXE_EXIT_CODE_TYPE_FORCE_REBOOT,
40 BURN_EXE_EXIT_CODE_TYPE_ERROR_SCHEDULE_REBOOT,
41 BURN_EXE_EXIT_CODE_TYPE_ERROR_FORCE_REBOOT,
40}; 42};
41 43
42enum BURN_EXE_PROTOCOL_TYPE 44enum BURN_EXE_PROTOCOL_TYPE
diff --git a/src/burn/test/BurnUnitTest/ExitCodeTest.cpp b/src/burn/test/BurnUnitTest/ExitCodeTest.cpp
index 2c32c6ab..d7d91d06 100644
--- a/src/burn/test/BurnUnitTest/ExitCodeTest.cpp
+++ b/src/burn/test/BurnUnitTest/ExitCodeTest.cpp
@@ -82,16 +82,28 @@ static void LoadEngineState(
82 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), S_OK, BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Standard" }, 82 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), S_OK, BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Standard" },
83 { ERROR_SUCCESS_REBOOT_INITIATED, S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" }, 83 { ERROR_SUCCESS_REBOOT_INITIATED, S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" },
84 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" }, 84 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" },
85 { ERROR_FAIL_REBOOT_REQUIRED, HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Standard" },
86 { (DWORD)HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Standard" },
87 { ERROR_FAIL_REBOOT_INITIATED, HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" },
88 { (DWORD)HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Standard" },
85 { 0, E_FAIL, BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 89 { 0, E_FAIL, BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
86 { 1, S_OK, BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 90 { 1, S_OK, BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
87 { 3, S_OK, BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Custom" }, 91 { 3, S_OK, BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Custom" },
88 { 4, S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Custom" }, 92 { 4, S_OK, BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Custom" },
93 { 5, HRESULT_FROM_WIN32(5), BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Custom" },
94 { (DWORD)HRESULT_FROM_WIN32(5), HRESULT_FROM_WIN32(5), BOOTSTRAPPER_APPLY_RESTART_REQUIRED, L"Custom" },
95 { 6, HRESULT_FROM_WIN32(6), BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Custom" },
96 { (DWORD)HRESULT_FROM_WIN32(6), HRESULT_FROM_WIN32(6), BOOTSTRAPPER_APPLY_RESTART_INITIATED, L"Custom" },
89 { ERROR_SUCCESS_REBOOT_REQUIRED, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 97 { ERROR_SUCCESS_REBOOT_REQUIRED, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
90 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 98 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
91 { ERROR_SUCCESS_RESTART_REQUIRED, HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 99 { ERROR_SUCCESS_RESTART_REQUIRED, HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
92 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 100 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), HRESULT_FROM_WIN32(ERROR_SUCCESS_RESTART_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
93 { ERROR_SUCCESS_REBOOT_INITIATED, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 101 { ERROR_SUCCESS_REBOOT_INITIATED, HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
94 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" }, 102 { (DWORD)HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
103 { ERROR_FAIL_REBOOT_REQUIRED, HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
104 { (DWORD)HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_REQUIRED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
105 { ERROR_FAIL_REBOOT_INITIATED, HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
106 { (DWORD)HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), HRESULT_FROM_WIN32(ERROR_FAIL_REBOOT_INITIATED), BOOTSTRAPPER_APPLY_RESTART_NONE, L"Custom" },
95 }; 107 };
96 108
97 engineState.sczBundleEngineWorkingPath = L"tests\\ignore\\this\\path\\to\\burn.exe"; 109 engineState.sczBundleEngineWorkingPath = L"tests\\ignore\\this\\path\\to\\burn.exe";
@@ -321,12 +333,20 @@ static void LoadEngineState(
321 L" <ExitCode Code='0' Type='2' />" 333 L" <ExitCode Code='0' Type='2' />"
322 L" <ExitCode Code='3' Type='3' />" 334 L" <ExitCode Code='3' Type='3' />"
323 L" <ExitCode Code='4' Type='4' />" 335 L" <ExitCode Code='4' Type='4' />"
336 L" <ExitCode Code='5' Type='5' />"
337 L" <ExitCode Code='-2147024891' Type='5' />"
338 L" <ExitCode Code='6' Type='6' />"
339 L" <ExitCode Code='-2147024890' Type='6' />"
324 L" <ExitCode Code='3010' Type='2' />" 340 L" <ExitCode Code='3010' Type='2' />"
325 L" <ExitCode Code='-2147021886' Type='2' />" 341 L" <ExitCode Code='-2147021886' Type='2' />"
326 L" <ExitCode Code='3011' Type='2' />" 342 L" <ExitCode Code='3011' Type='2' />"
327 L" <ExitCode Code='-2147021885' Type='2' />" 343 L" <ExitCode Code='-2147021885' Type='2' />"
328 L" <ExitCode Code='1641' Type='2' />" 344 L" <ExitCode Code='1641' Type='2' />"
329 L" <ExitCode Code='-2147023255' Type='2' />" 345 L" <ExitCode Code='-2147023255' Type='2' />"
346 L" <ExitCode Code='3017' Type='2' />"
347 L" <ExitCode Code='-2147021879' Type='2' />"
348 L" <ExitCode Code='3018' Type='2' />"
349 L" <ExitCode Code='-2147021878' Type='2' />"
330 L" <ExitCode Code='*' Type='1' />" 350 L" <ExitCode Code='*' Type='1' />"
331 L" <PayloadRef Id='test.exe' />" 351 L" <PayloadRef Id='test.exe' />"
332 L" </ExePackage>" 352 L" </ExePackage>"
diff --git a/src/ext/Bal/wixiuiba/WixInternalUIBootstrapperApplication.cpp b/src/ext/Bal/wixiuiba/WixInternalUIBootstrapperApplication.cpp
index dbb97366..91469489 100644
--- a/src/ext/Bal/wixiuiba/WixInternalUIBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixiuiba/WixInternalUIBootstrapperApplication.cpp
@@ -391,11 +391,11 @@ private:
391 391
392 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult) 392 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult)
393 { 393 {
394 dwQuit = ERROR_SUCCESS_REBOOT_INITIATED; 394 dwQuit = SUCCEEDED(hr) ? ERROR_SUCCESS_REBOOT_INITIATED : ERROR_FAIL_REBOOT_INITIATED;
395 } 395 }
396 else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult) 396 else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult)
397 { 397 {
398 dwQuit = ERROR_SUCCESS_REBOOT_REQUIRED; 398 dwQuit = SUCCEEDED(hr) ? ERROR_SUCCESS_REBOOT_REQUIRED : ERROR_FAIL_REBOOT_REQUIRED;
399 } 399 }
400 else if (SEVERITY_ERROR == HRESULT_SEVERITY(hr) && FACILITY_WIN32 == HRESULT_FACILITY(hr)) 400 else if (SEVERITY_ERROR == HRESULT_SEVERITY(hr) && FACILITY_WIN32 == HRESULT_FACILITY(hr))
401 { 401 {
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
index d57d78a6..8c4b0b35 100644
--- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
@@ -2684,11 +2684,11 @@ private:
2684 2684
2685 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult) 2685 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult)
2686 { 2686 {
2687 dwQuit = ERROR_SUCCESS_REBOOT_INITIATED; 2687 dwQuit = SUCCEEDED(hr) ? ERROR_SUCCESS_REBOOT_INITIATED : ERROR_FAIL_REBOOT_INITIATED;
2688 } 2688 }
2689 else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult) 2689 else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult)
2690 { 2690 {
2691 dwQuit = ERROR_SUCCESS_REBOOT_REQUIRED; 2691 dwQuit = SUCCEEDED(hr) ? ERROR_SUCCESS_REBOOT_REQUIRED : ERROR_FAIL_REBOOT_REQUIRED;
2692 } 2692 }
2693 else if (SEVERITY_ERROR == HRESULT_SEVERITY(hr) && FACILITY_WIN32 == HRESULT_FACILITY(hr)) 2693 else if (SEVERITY_ERROR == HRESULT_SEVERITY(hr) && FACILITY_WIN32 == HRESULT_FACILITY(hr))
2694 { 2694 {
diff --git a/src/libs/dutil/WixToolset.DUtil/wiutil.cpp b/src/libs/dutil/WixToolset.DUtil/wiutil.cpp
index 5f81cf3a..4ed0e2c5 100644
--- a/src/libs/dutil/WixToolset.DUtil/wiutil.cpp
+++ b/src/libs/dutil/WixToolset.DUtil/wiutil.cpp
@@ -1034,6 +1034,14 @@ static DWORD CheckForRestartErrorCode(
1034 *pRestart = WIU_RESTART_INITIATED; 1034 *pRestart = WIU_RESTART_INITIATED;
1035 dwErrorCode = ERROR_SUCCESS; 1035 dwErrorCode = ERROR_SUCCESS;
1036 break; 1036 break;
1037
1038 case ERROR_FAIL_REBOOT_REQUIRED:
1039 *pRestart = WIU_RESTART_REQUIRED;
1040 break;
1041
1042 case ERROR_FAIL_REBOOT_INITIATED:
1043 *pRestart = WIU_RESTART_INITIATED;
1044 break;
1037 } 1045 }
1038 1046
1039 return dwErrorCode; 1047 return dwErrorCode;
diff --git a/src/wix/WixToolset.Core/Compiler_Bundle.cs b/src/wix/WixToolset.Core/Compiler_Bundle.cs
index 0a1e416f..467b8fa9 100644
--- a/src/wix/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/wix/WixToolset.Core/Compiler_Bundle.cs
@@ -1628,6 +1628,12 @@ namespace WixToolset.Core
1628 case "error": 1628 case "error":
1629 behavior = ExitCodeBehaviorType.Error; 1629 behavior = ExitCodeBehaviorType.Error;
1630 break; 1630 break;
1631 case "errorForceReboot":
1632 behavior = ExitCodeBehaviorType.ErrorForceReboot;
1633 break;
1634 case "errorScheduleReboot":
1635 behavior = ExitCodeBehaviorType.ErrorScheduleReboot;
1636 break;
1631 case "forceReboot": 1637 case "forceReboot":
1632 behavior = ExitCodeBehaviorType.ForceReboot; 1638 behavior = ExitCodeBehaviorType.ForceReboot;
1633 break; 1639 break;
@@ -1638,7 +1644,7 @@ namespace WixToolset.Core
1638 behavior = ExitCodeBehaviorType.Success; 1644 behavior = ExitCodeBehaviorType.Success;
1639 break; 1645 break;
1640 default: 1646 default:
1641 this.Core.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Behavior", behaviorString, "success, error, scheduleReboot, forceReboot")); 1647 this.Core.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, node.Name.LocalName, "Behavior", behaviorString, "success, error, scheduleReboot, forceReboot, errorScheduleReboot, errorForceReboot"));
1642 behavior = ExitCodeBehaviorType.Success; // set value to avoid ExpectedAttribute below. 1648 behavior = ExitCodeBehaviorType.Success; // set value to avoid ExpectedAttribute below.
1643 break; 1649 break;
1644 } 1650 }
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
index a3ca2917..2a4ac51b 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
@@ -93,12 +93,20 @@ namespace WixToolsetTest.CoreIntegration
93 "<ExitCode Code='0' Type='2' />" + 93 "<ExitCode Code='0' Type='2' />" +
94 "<ExitCode Code='3' Type='3' />" + 94 "<ExitCode Code='3' Type='3' />" +
95 "<ExitCode Code='4' Type='4' />" + 95 "<ExitCode Code='4' Type='4' />" +
96 "<ExitCode Code='5' Type='5' />" +
97 "<ExitCode Code='-2147024891' Type='5' />" +
98 "<ExitCode Code='6' Type='6' />" +
99 "<ExitCode Code='-2147024890' Type='6' />" +
96 "<ExitCode Code='3010' Type='2' />" + 100 "<ExitCode Code='3010' Type='2' />" +
97 "<ExitCode Code='-2147021886' Type='2' />" + 101 "<ExitCode Code='-2147021886' Type='2' />" +
98 "<ExitCode Code='3011' Type='2' />" + 102 "<ExitCode Code='3011' Type='2' />" +
99 "<ExitCode Code='-2147021885' Type='2' />" + 103 "<ExitCode Code='-2147021885' Type='2' />" +
100 "<ExitCode Code='1641' Type='2' />" + 104 "<ExitCode Code='1641' Type='2' />" +
101 "<ExitCode Code='-2147023255' Type='2' />" + 105 "<ExitCode Code='-2147023255' Type='2' />" +
106 "<ExitCode Code='3017' Type='2' />" +
107 "<ExitCode Code='-2147021879' Type='2' />" +
108 "<ExitCode Code='3018' Type='2' />" +
109 "<ExitCode Code='-2147021878' Type='2' />" +
102 "<ExitCode Code='-2147483647' Type='2' />" + 110 "<ExitCode Code='-2147483647' Type='2' />" +
103 "<ExitCode Code='-2147483648' Type='2' />" + 111 "<ExitCode Code='-2147483648' Type='2' />" +
104 "<ExitCode Code='*' Type='1' />" + 112 "<ExitCode Code='*' Type='1' />" +
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs
index 9cbc9919..4536eaf8 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs
@@ -10,12 +10,20 @@
10 <ExitCode Value="0" Behavior="error" /> 10 <ExitCode Value="0" Behavior="error" />
11 <ExitCode Value="3" Behavior="scheduleReboot" /> 11 <ExitCode Value="3" Behavior="scheduleReboot" />
12 <ExitCode Value="4" Behavior="forceReboot" /> 12 <ExitCode Value="4" Behavior="forceReboot" />
13 <ExitCode Value="5" Behavior="errorScheduleReboot" />
14 <ExitCode Value="-2147024891" Behavior="errorScheduleReboot" />
15 <ExitCode Value="6" Behavior="errorForceReboot" />
16 <ExitCode Value="-2147024890" Behavior="errorForceReboot" />
13 <ExitCode Value="3010" Behavior="error" /> 17 <ExitCode Value="3010" Behavior="error" />
14 <ExitCode Value="-2147021886" Behavior="error" /> 18 <ExitCode Value="-2147021886" Behavior="error" />
15 <ExitCode Value="3011" Behavior="error" /> 19 <ExitCode Value="3011" Behavior="error" />
16 <ExitCode Value="-2147021885" Behavior="error" /> 20 <ExitCode Value="-2147021885" Behavior="error" />
17 <ExitCode Value="1641" Behavior="error" /> 21 <ExitCode Value="1641" Behavior="error" />
18 <ExitCode Value="-2147023255" Behavior="error" /> 22 <ExitCode Value="-2147023255" Behavior="error" />
23 <ExitCode Value="3017" Behavior="error" />
24 <ExitCode Value="-2147021879" Behavior="error" />
25 <ExitCode Value="3018" Behavior="error" />
26 <ExitCode Value="-2147021878" Behavior="error" />
19 <ExitCode Value="-2147483647" Behavior="error" /> 27 <ExitCode Value="-2147483647" Behavior="error" />
20 <ExitCode Value="-2147483648" Behavior="error" /> 28 <ExitCode Value="-2147483648" Behavior="error" />
21 <ExitCode Behavior="success" /> 29 <ExitCode Behavior="success" />