aboutsummaryrefslogtreecommitdiff
path: root/src/api/burn
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/burn')
-rw-r--r--src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h14
-rw-r--r--src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs12
-rw-r--r--src/api/burn/WixToolset.Mba.Core/EventArgs.cs38
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs127
-rw-r--r--src/api/burn/balutil/inc/BalBaseBAFunctions.h10
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h32
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h10
-rw-r--r--src/api/burn/balutil/inc/IBootstrapperApplication.h12
8 files changed, 173 insertions, 82 deletions
diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
index c65ca86b..2633a9c2 100644
--- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
+++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
@@ -293,6 +293,14 @@ enum BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION
293 BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_SUSPEND, 293 BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_SUSPEND,
294}; 294};
295 295
296enum BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION
297{
298 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION_NONE,
299 // Instructs the engine to stop processing the chain and restart.
300 // The engine will launch again after the machine is restarted.
301 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION_RESTART,
302};
303
296enum BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION 304enum BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION
297{ 305{
298 // Instructs the engine to stop waiting for the process to exit. 306 // Instructs the engine to stop waiting for the process to exit.
@@ -697,11 +705,14 @@ struct BA_ONCOMMITMSITRANSACTIONCOMPLETE_ARGS
697 DWORD cbSize; 705 DWORD cbSize;
698 LPCWSTR wzTransactionId; 706 LPCWSTR wzTransactionId;
699 HRESULT hrStatus; 707 HRESULT hrStatus;
708 BOOTSTRAPPER_APPLY_RESTART restart;
709 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation;
700}; 710};
701 711
702struct BA_ONCOMMITMSITRANSACTIONCOMPLETE_RESULTS 712struct BA_ONCOMMITMSITRANSACTIONCOMPLETE_RESULTS
703{ 713{
704 DWORD cbSize; 714 DWORD cbSize;
715 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION action;
705}; 716};
706 717
707struct BA_ONDETECTBEGIN_ARGS 718struct BA_ONDETECTBEGIN_ARGS
@@ -1417,11 +1428,14 @@ struct BA_ONROLLBACKMSITRANSACTIONCOMPLETE_ARGS
1417 DWORD cbSize; 1428 DWORD cbSize;
1418 LPCWSTR wzTransactionId; 1429 LPCWSTR wzTransactionId;
1419 HRESULT hrStatus; 1430 HRESULT hrStatus;
1431 BOOTSTRAPPER_APPLY_RESTART restart;
1432 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation;
1420}; 1433};
1421 1434
1422struct BA_ONROLLBACKMSITRANSACTIONCOMPLETE_RESULTS 1435struct BA_ONROLLBACKMSITRANSACTIONCOMPLETE_RESULTS
1423{ 1436{
1424 DWORD cbSize; 1437 DWORD cbSize;
1438 BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION action;
1425}; 1439};
1426 1440
1427struct BA_ONSETUPDATEBEGIN_ARGS 1441struct BA_ONSETUPDATEBEGIN_ARGS
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
index ecc99069..b23cb3b2 100644
--- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
@@ -60,7 +60,7 @@ namespace WixToolset.Mba.Core
60 60
61 /// <inheritdoc/> 61 /// <inheritdoc/>
62 public event EventHandler<DetectCompatibleMsiPackageEventArgs> DetectCompatibleMsiPackage; 62 public event EventHandler<DetectCompatibleMsiPackageEventArgs> DetectCompatibleMsiPackage;
63 63
64 /// <inheritdoc/> 64 /// <inheritdoc/>
65 public event EventHandler<DetectRelatedMsiPackageEventArgs> DetectRelatedMsiPackage; 65 public event EventHandler<DetectRelatedMsiPackageEventArgs> DetectRelatedMsiPackage;
66 66
@@ -1985,11 +1985,12 @@ namespace WixToolset.Mba.Core
1985 return args.HResult; 1985 return args.HResult;
1986 } 1986 }
1987 1987
1988 int IBootstrapperApplication.OnCommitMsiTransactionComplete(string transactionId, int hrStatus) 1988 int IBootstrapperApplication.OnCommitMsiTransactionComplete(string transactionId, int hrStatus, ApplyRestart restart, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION pAction)
1989 { 1989 {
1990 CommitMsiTransactionCompleteEventArgs args = new CommitMsiTransactionCompleteEventArgs(transactionId, hrStatus); 1990 CommitMsiTransactionCompleteEventArgs args = new CommitMsiTransactionCompleteEventArgs(transactionId, hrStatus, restart, recommendation, pAction);
1991 this.OnCommitMsiTransactionComplete(args); 1991 this.OnCommitMsiTransactionComplete(args);
1992 1992
1993 pAction = args.Action;
1993 return args.HResult; 1994 return args.HResult;
1994 } 1995 }
1995 1996
@@ -2001,11 +2002,12 @@ namespace WixToolset.Mba.Core
2001 return args.HResult; 2002 return args.HResult;
2002 } 2003 }
2003 2004
2004 int IBootstrapperApplication.OnRollbackMsiTransactionComplete(string transactionId, int hrStatus) 2005 int IBootstrapperApplication.OnRollbackMsiTransactionComplete(string transactionId, int hrStatus, ApplyRestart restart, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION pAction)
2005 { 2006 {
2006 RollbackMsiTransactionCompleteEventArgs args = new RollbackMsiTransactionCompleteEventArgs(transactionId, hrStatus); 2007 RollbackMsiTransactionCompleteEventArgs args = new RollbackMsiTransactionCompleteEventArgs(transactionId, hrStatus, restart, recommendation, pAction);
2007 this.OnRollbackMsiTransactionComplete(args); 2008 this.OnRollbackMsiTransactionComplete(args);
2008 2009
2010 pAction = args.Action;
2009 return args.HResult; 2011 return args.HResult;
2010 } 2012 }
2011 2013
diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
index 48850fd7..9d18c4eb 100644
--- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
+++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
@@ -568,7 +568,7 @@ namespace WixToolset.Mba.Core
568 public class DetectPatchTargetEventArgs : CancellableHResultEventArgs 568 public class DetectPatchTargetEventArgs : CancellableHResultEventArgs
569 { 569 {
570 /// <summary> 570 /// <summary>
571 /// 571 ///
572 /// </summary> 572 /// </summary>
573 /// <param name="packageId"></param> 573 /// <param name="packageId"></param>
574 /// <param name="productCode"></param> 574 /// <param name="productCode"></param>
@@ -944,7 +944,7 @@ namespace WixToolset.Mba.Core
944 public class PlanPatchTargetEventArgs : CancellableHResultEventArgs 944 public class PlanPatchTargetEventArgs : CancellableHResultEventArgs
945 { 945 {
946 /// <summary> 946 /// <summary>
947 /// 947 ///
948 /// </summary> 948 /// </summary>
949 /// <param name="packageId"></param> 949 /// <param name="packageId"></param>
950 /// <param name="productCode"></param> 950 /// <param name="productCode"></param>
@@ -1086,7 +1086,7 @@ namespace WixToolset.Mba.Core
1086 public class PlanPackageCompleteEventArgs : StatusEventArgs 1086 public class PlanPackageCompleteEventArgs : StatusEventArgs
1087 { 1087 {
1088 /// <summary> 1088 /// <summary>
1089 /// 1089 ///
1090 /// </summary> 1090 /// </summary>
1091 /// <param name="packageId"></param> 1091 /// <param name="packageId"></param>
1092 /// <param name="hrStatus"></param> 1092 /// <param name="hrStatus"></param>
@@ -2117,19 +2117,25 @@ namespace WixToolset.Mba.Core
2117 /// Additional arguments passed by the engine after committing an MSI transaction. 2117 /// Additional arguments passed by the engine after committing an MSI transaction.
2118 /// </summary> 2118 /// </summary>
2119 [Serializable] 2119 [Serializable]
2120 public class CommitMsiTransactionCompleteEventArgs : StatusEventArgs 2120 public class CommitMsiTransactionCompleteEventArgs : ActionEventArgs<BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION>
2121 { 2121 {
2122 /// <summary /> 2122 /// <summary />
2123 public CommitMsiTransactionCompleteEventArgs(string transactionId, int hrStatus) 2123 public CommitMsiTransactionCompleteEventArgs(string transactionId, int hrStatus, ApplyRestart restart, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION action)
2124 : base(hrStatus) 2124 : base(hrStatus, recommendation, action)
2125 { 2125 {
2126 this.TransactionId = transactionId; 2126 this.TransactionId = transactionId;
2127 this.Restart = restart;
2127 } 2128 }
2128 2129
2129 /// <summary> 2130 /// <summary>
2130 /// Gets the MSI transaction Id. 2131 /// Gets the MSI transaction Id.
2131 /// </summary> 2132 /// </summary>
2132 public string TransactionId { get; private set; } 2133 public string TransactionId { get; private set; }
2134
2135 /// <summary>
2136 /// Gets the package restart state after being applied.
2137 /// </summary>
2138 public ApplyRestart Restart { get; private set; }
2133 } 2139 }
2134 2140
2135 /// <summary> 2141 /// <summary>
@@ -2154,19 +2160,25 @@ namespace WixToolset.Mba.Core
2154 /// Additional arguments passed by the engine after rolling back an MSI transaction. 2160 /// Additional arguments passed by the engine after rolling back an MSI transaction.
2155 /// </summary> 2161 /// </summary>
2156 [Serializable] 2162 [Serializable]
2157 public class RollbackMsiTransactionCompleteEventArgs : StatusEventArgs 2163 public class RollbackMsiTransactionCompleteEventArgs : ActionEventArgs<BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION>
2158 { 2164 {
2159 /// <summary /> 2165 /// <summary />
2160 public RollbackMsiTransactionCompleteEventArgs(string transactionId, int hrStatus) 2166 public RollbackMsiTransactionCompleteEventArgs(string transactionId, int hrStatus, ApplyRestart restart, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation, BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION action)
2161 : base(hrStatus) 2167 : base(hrStatus, recommendation, action)
2162 { 2168 {
2163 this.TransactionId = transactionId; 2169 this.TransactionId = transactionId;
2170 this.Restart = restart;
2164 } 2171 }
2165 2172
2166 /// <summary> 2173 /// <summary>
2167 /// Gets the MSI transaction Id. 2174 /// Gets the MSI transaction Id.
2168 /// </summary> 2175 /// </summary>
2169 public string TransactionId { get; private set; } 2176 public string TransactionId { get; private set; }
2177
2178 /// <summary>
2179 /// Gets the package restart state after being applied.
2180 /// </summary>
2181 public ApplyRestart Restart { get; private set; }
2170 } 2182 }
2171 2183
2172 /// <summary> 2184 /// <summary>
@@ -2176,7 +2188,7 @@ namespace WixToolset.Mba.Core
2176 public class PauseAutomaticUpdatesBeginEventArgs : HResultEventArgs 2188 public class PauseAutomaticUpdatesBeginEventArgs : HResultEventArgs
2177 { 2189 {
2178 /// <summary> 2190 /// <summary>
2179 /// 2191 ///
2180 /// </summary> 2192 /// </summary>
2181 public PauseAutomaticUpdatesBeginEventArgs() 2193 public PauseAutomaticUpdatesBeginEventArgs()
2182 { 2194 {
@@ -2190,7 +2202,7 @@ namespace WixToolset.Mba.Core
2190 public class PauseAutomaticUpdatesCompleteEventArgs : StatusEventArgs 2202 public class PauseAutomaticUpdatesCompleteEventArgs : StatusEventArgs
2191 { 2203 {
2192 /// <summary> 2204 /// <summary>
2193 /// 2205 ///
2194 /// </summary> 2206 /// </summary>
2195 /// <param name="hrStatus"></param> 2207 /// <param name="hrStatus"></param>
2196 public PauseAutomaticUpdatesCompleteEventArgs(int hrStatus) 2208 public PauseAutomaticUpdatesCompleteEventArgs(int hrStatus)
@@ -2206,7 +2218,7 @@ namespace WixToolset.Mba.Core
2206 public class SystemRestorePointBeginEventArgs : HResultEventArgs 2218 public class SystemRestorePointBeginEventArgs : HResultEventArgs
2207 { 2219 {
2208 /// <summary> 2220 /// <summary>
2209 /// 2221 ///
2210 /// </summary> 2222 /// </summary>
2211 public SystemRestorePointBeginEventArgs() 2223 public SystemRestorePointBeginEventArgs()
2212 { 2224 {
@@ -2220,7 +2232,7 @@ namespace WixToolset.Mba.Core
2220 public class SystemRestorePointCompleteEventArgs : StatusEventArgs 2232 public class SystemRestorePointCompleteEventArgs : StatusEventArgs
2221 { 2233 {
2222 /// <summary> 2234 /// <summary>
2223 /// 2235 ///
2224 /// </summary> 2236 /// </summary>
2225 /// <param name="hrStatus"></param> 2237 /// <param name="hrStatus"></param>
2226 public SystemRestorePointCompleteEventArgs(int hrStatus) 2238 public SystemRestorePointCompleteEventArgs(int hrStatus)
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
index daa95e17..7bfabeb3 100644
--- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
@@ -933,12 +933,18 @@ namespace WixToolset.Mba.Core
933 /// </summary> 933 /// </summary>
934 /// <param name="wzTransactionId"></param> 934 /// <param name="wzTransactionId"></param>
935 /// <param name="hrStatus"></param> 935 /// <param name="hrStatus"></param>
936 /// <param name="restart"></param>
937 /// <param name="recommendation"></param>
938 /// <param name="pAction"></param>
936 /// <returns></returns> 939 /// <returns></returns>
937 [PreserveSig] 940 [PreserveSig]
938 [return: MarshalAs(UnmanagedType.I4)] 941 [return: MarshalAs(UnmanagedType.I4)]
939 int OnCommitMsiTransactionComplete( 942 int OnCommitMsiTransactionComplete(
940 [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, 943 [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId,
941 int hrStatus 944 int hrStatus,
945 [MarshalAs(UnmanagedType.U4)] ApplyRestart restart,
946 [MarshalAs(UnmanagedType.I4)] BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation,
947 [MarshalAs(UnmanagedType.I4)] ref BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION pAction
942 ); 948 );
943 949
944 /// <summary> 950 /// <summary>
@@ -957,12 +963,18 @@ namespace WixToolset.Mba.Core
957 /// </summary> 963 /// </summary>
958 /// <param name="wzTransactionId"></param> 964 /// <param name="wzTransactionId"></param>
959 /// <param name="hrStatus"></param> 965 /// <param name="hrStatus"></param>
966 /// <param name="restart"></param>
967 /// <param name="recommendation"></param>
968 /// <param name="pAction"></param>
960 /// <returns></returns> 969 /// <returns></returns>
961 [PreserveSig] 970 [PreserveSig]
962 [return: MarshalAs(UnmanagedType.I4)] 971 [return: MarshalAs(UnmanagedType.I4)]
963 int OnRollbackMsiTransactionComplete( 972 int OnRollbackMsiTransactionComplete(
964 [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, 973 [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId,
965 int hrStatus 974 int hrStatus,
975 [MarshalAs(UnmanagedType.U4)] ApplyRestart restart,
976 [MarshalAs(UnmanagedType.I4)] BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation,
977 [MarshalAs(UnmanagedType.I4)] ref BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION pAction
966 ); 978 );
967 979
968 /// <summary> 980 /// <summary>
@@ -1199,27 +1211,27 @@ namespace WixToolset.Mba.Core
1199 public enum Display 1211 public enum Display
1200 { 1212 {
1201 /// <summary> 1213 /// <summary>
1202 /// 1214 ///
1203 /// </summary> 1215 /// </summary>
1204 Unknown, 1216 Unknown,
1205 1217
1206 /// <summary> 1218 /// <summary>
1207 /// 1219 ///
1208 /// </summary> 1220 /// </summary>
1209 Embedded, 1221 Embedded,
1210 1222
1211 /// <summary> 1223 /// <summary>
1212 /// 1224 ///
1213 /// </summary> 1225 /// </summary>
1214 None, 1226 None,
1215 1227
1216 /// <summary> 1228 /// <summary>
1217 /// 1229 ///
1218 /// </summary> 1230 /// </summary>
1219 Passive, 1231 Passive,
1220 1232
1221 /// <summary> 1233 /// <summary>
1222 /// 1234 ///
1223 /// </summary> 1235 /// </summary>
1224 Full, 1236 Full,
1225 } 1237 }
@@ -1331,27 +1343,27 @@ namespace WixToolset.Mba.Core
1331 public enum Restart 1343 public enum Restart
1332 { 1344 {
1333 /// <summary> 1345 /// <summary>
1334 /// 1346 ///
1335 /// </summary> 1347 /// </summary>
1336 Unknown, 1348 Unknown,
1337 1349
1338 /// <summary> 1350 /// <summary>
1339 /// 1351 ///
1340 /// </summary> 1352 /// </summary>
1341 Never, 1353 Never,
1342 1354
1343 /// <summary> 1355 /// <summary>
1344 /// 1356 ///
1345 /// </summary> 1357 /// </summary>
1346 Prompt, 1358 Prompt,
1347 1359
1348 /// <summary> 1360 /// <summary>
1349 /// 1361 ///
1350 /// </summary> 1362 /// </summary>
1351 Automatic, 1363 Automatic,
1352 1364
1353 /// <summary> 1365 /// <summary>
1354 /// 1366 ///
1355 /// </summary> 1367 /// </summary>
1356 Always, 1368 Always,
1357 } 1369 }
@@ -1384,47 +1396,47 @@ namespace WixToolset.Mba.Core
1384 public enum Result 1396 public enum Result
1385 { 1397 {
1386 /// <summary> 1398 /// <summary>
1387 /// 1399 ///
1388 /// </summary> 1400 /// </summary>
1389 Error = -1, 1401 Error = -1,
1390 1402
1391 /// <summary> 1403 /// <summary>
1392 /// 1404 ///
1393 /// </summary> 1405 /// </summary>
1394 None, 1406 None,
1395 1407
1396 /// <summary> 1408 /// <summary>
1397 /// 1409 ///
1398 /// </summary> 1410 /// </summary>
1399 Ok, 1411 Ok,
1400 1412
1401 /// <summary> 1413 /// <summary>
1402 /// 1414 ///
1403 /// </summary> 1415 /// </summary>
1404 Cancel, 1416 Cancel,
1405 1417
1406 /// <summary> 1418 /// <summary>
1407 /// 1419 ///
1408 /// </summary> 1420 /// </summary>
1409 Abort, 1421 Abort,
1410 1422
1411 /// <summary> 1423 /// <summary>
1412 /// 1424 ///
1413 /// </summary> 1425 /// </summary>
1414 Retry, 1426 Retry,
1415 1427
1416 /// <summary> 1428 /// <summary>
1417 /// 1429 ///
1418 /// </summary> 1430 /// </summary>
1419 Ignore, 1431 Ignore,
1420 1432
1421 /// <summary> 1433 /// <summary>
1422 /// 1434 ///
1423 /// </summary> 1435 /// </summary>
1424 Yes, 1436 Yes,
1425 1437
1426 /// <summary> 1438 /// <summary>
1427 /// 1439 ///
1428 /// </summary> 1440 /// </summary>
1429 No, 1441 No,
1430 1442
@@ -1434,17 +1446,17 @@ namespace WixToolset.Mba.Core
1434 Close, 1446 Close,
1435 1447
1436 /// <summary> 1448 /// <summary>
1437 /// 1449 ///
1438 /// </summary> 1450 /// </summary>
1439 Help, 1451 Help,
1440 1452
1441 /// <summary> 1453 /// <summary>
1442 /// 1454 ///
1443 /// </summary> 1455 /// </summary>
1444 TryAgain, 1456 TryAgain,
1445 1457
1446 /// <summary> 1458 /// <summary>
1447 /// 1459 ///
1448 /// </summary> 1460 /// </summary>
1449 Continue, 1461 Continue,
1450 } 1462 }
@@ -1455,7 +1467,7 @@ namespace WixToolset.Mba.Core
1455 public enum ResumeType 1467 public enum ResumeType
1456 { 1468 {
1457 /// <summary> 1469 /// <summary>
1458 /// 1470 ///
1459 /// </summary> 1471 /// </summary>
1460 None, 1472 None,
1461 1473
@@ -1546,7 +1558,7 @@ namespace WixToolset.Mba.Core
1546 public enum RelatedOperation 1558 public enum RelatedOperation
1547 { 1559 {
1548 /// <summary> 1560 /// <summary>
1549 /// 1561 ///
1550 /// </summary> 1562 /// </summary>
1551 None, 1563 None,
1552 1564
@@ -1685,47 +1697,47 @@ namespace WixToolset.Mba.Core
1685 public enum RelationType 1697 public enum RelationType
1686 { 1698 {
1687 /// <summary> 1699 /// <summary>
1688 /// 1700 ///
1689 /// </summary> 1701 /// </summary>
1690 None, 1702 None,
1691 1703
1692 /// <summary> 1704 /// <summary>
1693 /// 1705 ///
1694 /// </summary> 1706 /// </summary>
1695 Detect, 1707 Detect,
1696 1708
1697 /// <summary> 1709 /// <summary>
1698 /// 1710 ///
1699 /// </summary> 1711 /// </summary>
1700 Upgrade, 1712 Upgrade,
1701 1713
1702 /// <summary> 1714 /// <summary>
1703 /// 1715 ///
1704 /// </summary> 1716 /// </summary>
1705 Addon, 1717 Addon,
1706 1718
1707 /// <summary> 1719 /// <summary>
1708 /// 1720 ///
1709 /// </summary> 1721 /// </summary>
1710 Patch, 1722 Patch,
1711 1723
1712 /// <summary> 1724 /// <summary>
1713 /// 1725 ///
1714 /// </summary> 1726 /// </summary>
1715 DependentAddon, 1727 DependentAddon,
1716 1728
1717 /// <summary> 1729 /// <summary>
1718 /// 1730 ///
1719 /// </summary> 1731 /// </summary>
1720 DependentPatch, 1732 DependentPatch,
1721 1733
1722 /// <summary> 1734 /// <summary>
1723 /// 1735 ///
1724 /// </summary> 1736 /// </summary>
1725 Update, 1737 Update,
1726 1738
1727 /// <summary> 1739 /// <summary>
1728 /// 1740 ///
1729 /// </summary> 1741 /// </summary>
1730 ChainPackage, 1742 ChainPackage,
1731 } 1743 }
@@ -1736,37 +1748,37 @@ namespace WixToolset.Mba.Core
1736 public enum RelatedBundlePlanType 1748 public enum RelatedBundlePlanType
1737 { 1749 {
1738 /// <summary> 1750 /// <summary>
1739 /// 1751 ///
1740 /// </summary> 1752 /// </summary>
1741 None, 1753 None,
1742 1754
1743 /// <summary> 1755 /// <summary>
1744 /// 1756 ///
1745 /// </summary> 1757 /// </summary>
1746 Downgrade, 1758 Downgrade,
1747 1759
1748 /// <summary> 1760 /// <summary>
1749 /// 1761 ///
1750 /// </summary> 1762 /// </summary>
1751 Upgrade, 1763 Upgrade,
1752 1764
1753 /// <summary> 1765 /// <summary>
1754 /// 1766 ///
1755 /// </summary> 1767 /// </summary>
1756 Addon, 1768 Addon,
1757 1769
1758 /// <summary> 1770 /// <summary>
1759 /// 1771 ///
1760 /// </summary> 1772 /// </summary>
1761 Patch, 1773 Patch,
1762 1774
1763 /// <summary> 1775 /// <summary>
1764 /// 1776 ///
1765 /// </summary> 1777 /// </summary>
1766 DependentAddon, 1778 DependentAddon,
1767 1779
1768 /// <summary> 1780 /// <summary>
1769 /// 1781 ///
1770 /// </summary> 1782 /// </summary>
1771 DependentPatch, 1783 DependentPatch,
1772 } 1784 }
@@ -1804,7 +1816,7 @@ namespace WixToolset.Mba.Core
1804 public enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION 1816 public enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION
1805 { 1817 {
1806 /// <summary> 1818 /// <summary>
1807 /// 1819 ///
1808 /// </summary> 1820 /// </summary>
1809 None, 1821 None,
1810 1822
@@ -1843,7 +1855,7 @@ namespace WixToolset.Mba.Core
1843 public enum BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION 1855 public enum BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION
1844 { 1856 {
1845 /// <summary> 1857 /// <summary>
1846 /// 1858 ///
1847 /// </summary> 1859 /// </summary>
1848 None, 1860 None,
1849 1861
@@ -1860,7 +1872,7 @@ namespace WixToolset.Mba.Core
1860 public enum BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION 1872 public enum BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION
1861 { 1873 {
1862 /// <summary> 1874 /// <summary>
1863 /// 1875 ///
1864 /// </summary> 1876 /// </summary>
1865 None, 1877 None,
1866 1878
@@ -1883,7 +1895,7 @@ namespace WixToolset.Mba.Core
1883 public enum BOOTSTRAPPER_CACHEPACKAGENONVITALVALIDATIONFAILURE_ACTION 1895 public enum BOOTSTRAPPER_CACHEPACKAGENONVITALVALIDATIONFAILURE_ACTION
1884 { 1896 {
1885 /// <summary> 1897 /// <summary>
1886 /// 1898 ///
1887 /// </summary> 1899 /// </summary>
1888 None, 1900 None,
1889 1901
@@ -1900,7 +1912,7 @@ namespace WixToolset.Mba.Core
1900 public enum BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION 1912 public enum BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION
1901 { 1913 {
1902 /// <summary> 1914 /// <summary>
1903 /// 1915 ///
1904 /// </summary> 1916 /// </summary>
1905 None, 1917 None,
1906 1918
@@ -1921,7 +1933,7 @@ namespace WixToolset.Mba.Core
1921 public enum BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION 1933 public enum BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION
1922 { 1934 {
1923 /// <summary> 1935 /// <summary>
1924 /// 1936 ///
1925 /// </summary> 1937 /// </summary>
1926 None, 1938 None,
1927 1939
@@ -1950,6 +1962,23 @@ namespace WixToolset.Mba.Core
1950 } 1962 }
1951 1963
1952 /// <summary> 1964 /// <summary>
1965 /// The available actions for <see cref="IDefaultBootstrapperApplication.CommitMsiTransactionComplete"/> and <see cref="IDefaultBootstrapperApplication.RollbackMsiTransactionComplete"/>.
1966 /// </summary>
1967 public enum BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION
1968 {
1969 /// <summary>
1970 ///
1971 /// </summary>
1972 None,
1973
1974 /// <summary>
1975 /// Instructs the engine to stop processing the chain and restart.
1976 /// The engine will launch again after the machine is restarted.
1977 /// </summary>
1978 Restart,
1979 };
1980
1981 /// <summary>
1953 /// The available actions for <see cref="IDefaultBootstrapperApplication.ExecuteProcessCancel"/>. 1982 /// The available actions for <see cref="IDefaultBootstrapperApplication.ExecuteProcessCancel"/>.
1954 /// </summary> 1983 /// </summary>
1955 public enum BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION 1984 public enum BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION
@@ -2017,7 +2046,7 @@ namespace WixToolset.Mba.Core
2017 public enum BOOTSTRAPPER_SHUTDOWN_ACTION 2046 public enum BOOTSTRAPPER_SHUTDOWN_ACTION
2018 { 2047 {
2019 /// <summary> 2048 /// <summary>
2020 /// 2049 ///
2021 /// </summary> 2050 /// </summary>
2022 None, 2051 None,
2023 2052
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
index 9a8ac87e..6ad109c3 100644
--- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h
+++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
@@ -710,7 +710,10 @@ public: // IBootstrapperApplication
710 710
711 virtual STDMETHODIMP OnCommitMsiTransactionComplete( 711 virtual STDMETHODIMP OnCommitMsiTransactionComplete(
712 __in_z LPCWSTR /*wzTransactionId*/, 712 __in_z LPCWSTR /*wzTransactionId*/,
713 __in HRESULT /*hrStatus*/ 713 __in HRESULT /*hrStatus*/,
714 __in BOOTSTRAPPER_APPLY_RESTART /*restart*/,
715 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION /*recommendation*/,
716 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* /*pAction*/
714 ) 717 )
715 { 718 {
716 return S_OK; 719 return S_OK;
@@ -725,7 +728,10 @@ public: // IBootstrapperApplication
725 728
726 virtual STDMETHODIMP OnRollbackMsiTransactionComplete( 729 virtual STDMETHODIMP OnRollbackMsiTransactionComplete(
727 __in_z LPCWSTR /*wzTransactionId*/, 730 __in_z LPCWSTR /*wzTransactionId*/,
728 __in HRESULT /*hrStatus*/ 731 __in HRESULT /*hrStatus*/,
732 __in BOOTSTRAPPER_APPLY_RESTART /*restart*/,
733 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION /*recommendation*/,
734 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* /*pAction*/
729 ) 735 )
730 { 736 {
731 return S_OK; 737 return S_OK;
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
index 58cc0673..c8b80d13 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
@@ -197,7 +197,7 @@ public: // IBootstrapperApplication
197 __in LPCWSTR /*wzVersion*/, 197 __in LPCWSTR /*wzVersion*/,
198 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/, 198 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/,
199 __inout BOOL* pfCancel 199 __inout BOOL* pfCancel
200 ) 200 )
201 { 201 {
202 *pfCancel |= CheckCanceled(); 202 *pfCancel |= CheckCanceled();
203 return S_OK; 203 return S_OK;
@@ -902,10 +902,21 @@ public: // IBootstrapperApplication
902 902
903 virtual STDMETHODIMP OnCommitMsiTransactionComplete( 903 virtual STDMETHODIMP OnCommitMsiTransactionComplete(
904 __in_z LPCWSTR /*wzTransactionId*/, 904 __in_z LPCWSTR /*wzTransactionId*/,
905 __in HRESULT /*hrStatus*/ 905 __in HRESULT /*hrStatus*/,
906 __in BOOTSTRAPPER_APPLY_RESTART /*restart*/,
907 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION /*recommendation*/,
908 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* /*pAction*/
906 ) 909 )
907 { 910 {
908 return S_OK; 911 HRESULT hr = S_OK;
912
913 if (CheckCanceled())
914 {
915 ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT));
916 }
917
918 LExit:
919 return hr;
909 } 920 }
910 921
911 virtual STDMETHODIMP OnRollbackMsiTransactionBegin( 922 virtual STDMETHODIMP OnRollbackMsiTransactionBegin(
@@ -917,10 +928,21 @@ public: // IBootstrapperApplication
917 928
918 virtual STDMETHODIMP OnRollbackMsiTransactionComplete( 929 virtual STDMETHODIMP OnRollbackMsiTransactionComplete(
919 __in_z LPCWSTR /*wzTransactionId*/, 930 __in_z LPCWSTR /*wzTransactionId*/,
920 __in HRESULT /*hrStatus*/ 931 __in HRESULT /*hrStatus*/,
932 __in BOOTSTRAPPER_APPLY_RESTART /*restart*/,
933 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION /*recommendation*/,
934 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* /*pAction*/
921 ) 935 )
922 { 936 {
923 return S_OK; 937 HRESULT hr = S_OK;
938
939 if (CheckCanceled())
940 {
941 ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT));
942 }
943
944 LExit:
945 return hr;
924 } 946 }
925 947
926 virtual STDMETHODIMP OnPauseAutomaticUpdatesBegin( 948 virtual STDMETHODIMP OnPauseAutomaticUpdatesBegin(
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
index 62cb85bc..34739ba3 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -579,10 +579,10 @@ static HRESULT BalBaseBAProcOnCommitMsiTransactionBegin(
579static HRESULT BalBaseBAProcOnCommitMsiTransactionComplete( 579static HRESULT BalBaseBAProcOnCommitMsiTransactionComplete(
580 __in IBootstrapperApplication* pBA, 580 __in IBootstrapperApplication* pBA,
581 __in BA_ONCOMMITMSITRANSACTIONCOMPLETE_ARGS* pArgs, 581 __in BA_ONCOMMITMSITRANSACTIONCOMPLETE_ARGS* pArgs,
582 __inout BA_ONCOMMITMSITRANSACTIONCOMPLETE_RESULTS* /*pResults*/ 582 __inout BA_ONCOMMITMSITRANSACTIONCOMPLETE_RESULTS* pResults
583 ) 583 )
584{ 584{
585 return pBA->OnCommitMsiTransactionComplete(pArgs->wzTransactionId, pArgs->hrStatus); 585 return pBA->OnCommitMsiTransactionComplete(pArgs->wzTransactionId, pArgs->hrStatus, pArgs->restart, pArgs->recommendation, &pResults->action);
586} 586}
587 587
588static HRESULT BalBaseBAProcOnRollbackMsiTransactionBegin( 588static HRESULT BalBaseBAProcOnRollbackMsiTransactionBegin(
@@ -597,10 +597,10 @@ static HRESULT BalBaseBAProcOnRollbackMsiTransactionBegin(
597static HRESULT BalBaseBAProcOnRollbackMsiTransactionComplete( 597static HRESULT BalBaseBAProcOnRollbackMsiTransactionComplete(
598 __in IBootstrapperApplication* pBA, 598 __in IBootstrapperApplication* pBA,
599 __in BA_ONROLLBACKMSITRANSACTIONCOMPLETE_ARGS* pArgs, 599 __in BA_ONROLLBACKMSITRANSACTIONCOMPLETE_ARGS* pArgs,
600 __inout BA_ONROLLBACKMSITRANSACTIONCOMPLETE_RESULTS* /*pResults*/ 600 __inout BA_ONROLLBACKMSITRANSACTIONCOMPLETE_RESULTS* pResults
601 ) 601 )
602{ 602{
603 return pBA->OnRollbackMsiTransactionComplete(pArgs->wzTransactionId, pArgs->hrStatus); 603 return pBA->OnRollbackMsiTransactionComplete(pArgs->wzTransactionId, pArgs->hrStatus, pArgs->restart, pArgs->recommendation, &pResults->action);
604} 604}
605 605
606static HRESULT BalBaseBAProcOnPauseAutomaticUpdatesBegin( 606static HRESULT BalBaseBAProcOnPauseAutomaticUpdatesBegin(
@@ -780,7 +780,7 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc(
780{ 780{
781 IBootstrapperApplication* pBA = reinterpret_cast<IBootstrapperApplication*>(pvContext); 781 IBootstrapperApplication* pBA = reinterpret_cast<IBootstrapperApplication*>(pvContext);
782 HRESULT hr = pBA->BAProc(message, pvArgs, pvResults, pvContext); 782 HRESULT hr = pBA->BAProc(message, pvArgs, pvResults, pvContext);
783 783
784 if (E_NOTIMPL == hr) 784 if (E_NOTIMPL == hr)
785 { 785 {
786 switch (message) 786 switch (message)
diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h
index fba919ea..faa211e4 100644
--- a/src/api/burn/balutil/inc/IBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h
@@ -574,7 +574,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
574 ) = 0; 574 ) = 0;
575 575
576 // OnLaunchApprovedExeBegin - called before trying to launch the preapproved executable. 576 // OnLaunchApprovedExeBegin - called before trying to launch the preapproved executable.
577 // 577 //
578 STDMETHOD(OnLaunchApprovedExeBegin)( 578 STDMETHOD(OnLaunchApprovedExeBegin)(
579 __inout BOOL* pfCancel 579 __inout BOOL* pfCancel
580 ) = 0; 580 ) = 0;
@@ -603,7 +603,10 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
603 603
604 STDMETHOD(OnCommitMsiTransactionComplete)( 604 STDMETHOD(OnCommitMsiTransactionComplete)(
605 __in_z LPCWSTR wzTransactionId, 605 __in_z LPCWSTR wzTransactionId,
606 __in HRESULT hrStatus 606 __in HRESULT hrStatus,
607 __in BOOTSTRAPPER_APPLY_RESTART restart,
608 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation,
609 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* pAction
607 ) = 0; 610 ) = 0;
608 611
609 STDMETHOD(OnRollbackMsiTransactionBegin)( 612 STDMETHOD(OnRollbackMsiTransactionBegin)(
@@ -612,7 +615,10 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
612 615
613 STDMETHOD(OnRollbackMsiTransactionComplete)( 616 STDMETHOD(OnRollbackMsiTransactionComplete)(
614 __in_z LPCWSTR wzTransactionId, 617 __in_z LPCWSTR wzTransactionId,
615 __in HRESULT hrStatus 618 __in HRESULT hrStatus,
619 __in BOOTSTRAPPER_APPLY_RESTART restart,
620 __in BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION recommendation,
621 __inout BOOTSTRAPPER_EXECUTEMSITRANSACTIONCOMPLETE_ACTION* pAction
616 ) = 0; 622 ) = 0;
617 623
618 STDMETHOD(OnPauseAutomaticUpdatesBegin)( 624 STDMETHOD(OnPauseAutomaticUpdatesBegin)(