aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h9
-rw-r--r--src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs5
-rw-r--r--src/api/burn/WixToolset.Mba.Core/EventArgs.cs14
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs31
-rw-r--r--src/api/burn/balutil/inc/BalBaseBAFunctions.h4
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h4
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h2
-rw-r--r--src/api/burn/balutil/inc/IBootstrapperApplication.h4
-rw-r--r--src/burn/engine/elevation.cpp12
-rw-r--r--src/burn/engine/logging.cpp17
-rw-r--r--src/burn/engine/logging.h4
-rw-r--r--src/burn/engine/msiengine.cpp140
-rw-r--r--src/burn/engine/msiengine.h13
-rw-r--r--src/burn/engine/mspengine.cpp38
-rw-r--r--src/burn/engine/plan.cpp4
-rw-r--r--src/burn/engine/plan.h2
-rw-r--r--src/burn/engine/userexperience.cpp8
-rw-r--r--src/burn/engine/userexperience.h3
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp48
-rw-r--r--src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp6
20 files changed, 250 insertions, 118 deletions
diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
index b7dc17c2..ad920577 100644
--- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
+++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
@@ -115,6 +115,13 @@ enum BOOTSTRAPPER_PACKAGE_CONDITION_RESULT
115 BOOTSTRAPPER_PACKAGE_CONDITION_TRUE, 115 BOOTSTRAPPER_PACKAGE_CONDITION_TRUE,
116}; 116};
117 117
118enum BOOTSTRAPPER_MSI_FILE_VERSIONING
119{
120 BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, //o
121 BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER_OR_EQUAL, //e
122 BOOTSTRAPPER_MSI_FILE_VERSIONING_ALL, //a
123};
124
118enum BOOTSTRAPPER_APPLICATION_MESSAGE 125enum BOOTSTRAPPER_APPLICATION_MESSAGE
119{ 126{
120 BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTBEGIN, 127 BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTBEGIN,
@@ -1058,6 +1065,7 @@ struct BA_ONPLANMSIPACKAGE_ARGS
1058 LPCWSTR wzPackageId; 1065 LPCWSTR wzPackageId;
1059 BOOL fExecute; // false means rollback. 1066 BOOL fExecute; // false means rollback.
1060 BOOTSTRAPPER_ACTION_STATE action; 1067 BOOTSTRAPPER_ACTION_STATE action;
1068 BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning;
1061}; 1069};
1062 1070
1063struct BA_ONPLANMSIPACKAGE_RESULTS 1071struct BA_ONPLANMSIPACKAGE_RESULTS
@@ -1067,6 +1075,7 @@ struct BA_ONPLANMSIPACKAGE_RESULTS
1067 BURN_MSI_PROPERTY actionMsiProperty; 1075 BURN_MSI_PROPERTY actionMsiProperty;
1068 INSTALLUILEVEL uiLevel; 1076 INSTALLUILEVEL uiLevel;
1069 BOOL fDisableExternalUiHandler; 1077 BOOL fDisableExternalUiHandler;
1078 BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning;
1070}; 1079};
1071 1080
1072struct BA_ONPLANNEDPACKAGE_ARGS 1081struct BA_ONPLANNEDPACKAGE_ARGS
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
index b6fdca1e..0520463f 100644
--- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
@@ -1433,15 +1433,16 @@ namespace WixToolset.Mba.Core
1433 return args.HResult; 1433 return args.HResult;
1434 } 1434 }
1435 1435
1436 int IBootstrapperApplication.OnPlanMsiPackage(string wzPackageId, bool fExecute, ActionState action, ref bool fCancel, ref BURN_MSI_PROPERTY actionMsiProperty, ref INSTALLUILEVEL uiLevel, ref bool fDisableExternalUiHandler) 1436 int IBootstrapperApplication.OnPlanMsiPackage(string wzPackageId, bool fExecute, ActionState action, BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning, ref bool fCancel, ref BURN_MSI_PROPERTY actionMsiProperty, ref INSTALLUILEVEL uiLevel, ref bool fDisableExternalUiHandler, ref BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning)
1437 { 1437 {
1438 PlanMsiPackageEventArgs args = new PlanMsiPackageEventArgs(wzPackageId, fExecute, action, fCancel, actionMsiProperty, uiLevel, fDisableExternalUiHandler); 1438 PlanMsiPackageEventArgs args = new PlanMsiPackageEventArgs(wzPackageId, fExecute, action, recommendedFileVersioning, fCancel, actionMsiProperty, uiLevel, fDisableExternalUiHandler, fileVersioning);
1439 this.OnPlanMsiPackage(args); 1439 this.OnPlanMsiPackage(args);
1440 1440
1441 fCancel = args.Cancel; 1441 fCancel = args.Cancel;
1442 actionMsiProperty = args.ActionMsiProperty; 1442 actionMsiProperty = args.ActionMsiProperty;
1443 uiLevel = args.UiLevel; 1443 uiLevel = args.UiLevel;
1444 fDisableExternalUiHandler = args.DisableExternalUiHandler; 1444 fDisableExternalUiHandler = args.DisableExternalUiHandler;
1445 fileVersioning = args.FileVersioning;
1445 return args.HResult; 1446 return args.HResult;
1446 } 1447 }
1447 1448
diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
index 04e7b579..556db821 100644
--- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
+++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
@@ -902,15 +902,17 @@ namespace WixToolset.Mba.Core
902 public class PlanMsiPackageEventArgs : CancellableHResultEventArgs 902 public class PlanMsiPackageEventArgs : CancellableHResultEventArgs
903 { 903 {
904 /// <summary /> 904 /// <summary />
905 public PlanMsiPackageEventArgs(string packageId, bool shouldExecute, ActionState action, bool cancelRecommendation, BURN_MSI_PROPERTY actionMsiProperty, INSTALLUILEVEL uiLevel, bool disableExternalUiHandler) 905 public PlanMsiPackageEventArgs(string packageId, bool shouldExecute, ActionState action, BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning, bool cancelRecommendation, BURN_MSI_PROPERTY actionMsiProperty, INSTALLUILEVEL uiLevel, bool disableExternalUiHandler, BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning)
906 : base(cancelRecommendation) 906 : base(cancelRecommendation)
907 { 907 {
908 this.PackageId = packageId; 908 this.PackageId = packageId;
909 this.ShouldExecute = shouldExecute; 909 this.ShouldExecute = shouldExecute;
910 this.Action = action; 910 this.Action = action;
911 this.RecommendedFileVersioning = recommendedFileVersioning;
911 this.ActionMsiProperty = actionMsiProperty; 912 this.ActionMsiProperty = actionMsiProperty;
912 this.UiLevel = uiLevel; 913 this.UiLevel = uiLevel;
913 this.DisableExternalUiHandler = disableExternalUiHandler; 914 this.DisableExternalUiHandler = disableExternalUiHandler;
915 this.FileVersioning = fileVersioning;
914 } 916 }
915 917
916 /// <summary> 918 /// <summary>
@@ -929,6 +931,11 @@ namespace WixToolset.Mba.Core
929 public ActionState Action { get; private set; } 931 public ActionState Action { get; private set; }
930 932
931 /// <summary> 933 /// <summary>
934 /// Gets the recommended file versioning for the package.
935 /// </summary>
936 public BOOTSTRAPPER_MSI_FILE_VERSIONING RecommendedFileVersioning { get; private set; }
937
938 /// <summary>
932 /// Gets or sets the requested MSI property to add. 939 /// Gets or sets the requested MSI property to add.
933 /// </summary> 940 /// </summary>
934 public BURN_MSI_PROPERTY ActionMsiProperty { get; set; } 941 public BURN_MSI_PROPERTY ActionMsiProperty { get; set; }
@@ -942,6 +949,11 @@ namespace WixToolset.Mba.Core
942 /// Gets or sets whether Burn is requested to set up an external UI handler. 949 /// Gets or sets whether Burn is requested to set up an external UI handler.
943 /// </summary> 950 /// </summary>
944 public bool DisableExternalUiHandler { get; set; } 951 public bool DisableExternalUiHandler { get; set; }
952
953 /// <summary>
954 /// Gets or sets the requested file versioning.
955 /// </summary>
956 public BOOTSTRAPPER_MSI_FILE_VERSIONING FileVersioning { get; set; }
945 } 957 }
946 958
947 /// <summary> 959 /// <summary>
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
index 07c1a23b..259c407f 100644
--- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
@@ -373,24 +373,18 @@ namespace WixToolset.Mba.Core
373 /// <summary> 373 /// <summary>
374 /// See <see cref="IDefaultBootstrapperApplication.PlanMsiPackage"/>. 374 /// See <see cref="IDefaultBootstrapperApplication.PlanMsiPackage"/>.
375 /// </summary> 375 /// </summary>
376 /// <param name="wzPackageId"></param>
377 /// <param name="fExecute"></param>
378 /// <param name="action"></param>
379 /// <param name="fCancel"></param>
380 /// <param name="actionMsiProperty"></param>
381 /// <param name="uiLevel"></param>
382 /// <param name="fDisableExternalUiHandler"></param>
383 /// <returns></returns>
384 [PreserveSig] 376 [PreserveSig]
385 [return: MarshalAs(UnmanagedType.I4)] 377 [return: MarshalAs(UnmanagedType.I4)]
386 int OnPlanMsiPackage( 378 int OnPlanMsiPackage(
387 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, 379 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId,
388 [MarshalAs(UnmanagedType.Bool)] bool fExecute, 380 [MarshalAs(UnmanagedType.Bool)] bool fExecute,
389 [MarshalAs(UnmanagedType.U4)] ActionState action, 381 [MarshalAs(UnmanagedType.U4)] ActionState action,
382 [MarshalAs(UnmanagedType.U4)] BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning,
390 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, 383 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel,
391 [MarshalAs(UnmanagedType.U4)] ref BURN_MSI_PROPERTY actionMsiProperty, 384 [MarshalAs(UnmanagedType.U4)] ref BURN_MSI_PROPERTY actionMsiProperty,
392 [MarshalAs(UnmanagedType.U4)] ref INSTALLUILEVEL uiLevel, 385 [MarshalAs(UnmanagedType.U4)] ref INSTALLUILEVEL uiLevel,
393 [MarshalAs(UnmanagedType.Bool)] ref bool fDisableExternalUiHandler 386 [MarshalAs(UnmanagedType.Bool)] ref bool fDisableExternalUiHandler,
387 [MarshalAs(UnmanagedType.U4)] ref BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning
394 ); 388 );
395 389
396 /// <summary> 390 /// <summary>
@@ -1852,6 +1846,25 @@ namespace WixToolset.Mba.Core
1852 } 1846 }
1853 1847
1854 /// <summary> 1848 /// <summary>
1849 /// The file versioning options for REINSTALLMODE, see https://docs.microsoft.com/en-us/windows/win32/msi/reinstallmode.
1850 /// </summary>
1851 public enum BOOTSTRAPPER_MSI_FILE_VERSIONING
1852 {
1853 /// <summary>
1854 /// o
1855 /// </summary>
1856 Older,
1857 /// <summary>
1858 /// e
1859 /// </summary>
1860 Equal,
1861 /// <summary>
1862 /// a
1863 /// </summary>
1864 All,
1865 }
1866
1867 /// <summary>
1855 /// The property Burn will add so the MSI can know the planned action for the package. 1868 /// The property Burn will add so the MSI can know the planned action for the package.
1856 /// </summary> 1869 /// </summary>
1857 public enum BURN_MSI_PROPERTY 1870 public enum BURN_MSI_PROPERTY
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
index 2866f6b0..e45db2dc 100644
--- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h
+++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
@@ -303,10 +303,12 @@ public: // IBootstrapperApplication
303 __in_z LPCWSTR /*wzPackageId*/, 303 __in_z LPCWSTR /*wzPackageId*/,
304 __in BOOL /*fExecute*/, 304 __in BOOL /*fExecute*/,
305 __in BOOTSTRAPPER_ACTION_STATE /*action*/, 305 __in BOOTSTRAPPER_ACTION_STATE /*action*/,
306 __in BOOTSTRAPPER_MSI_FILE_VERSIONING /*recommendedFileVersioning*/,
306 __inout BOOL* /*pfCancel*/, 307 __inout BOOL* /*pfCancel*/,
307 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/, 308 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/,
308 __inout INSTALLUILEVEL* /*pUiLevel*/, 309 __inout INSTALLUILEVEL* /*pUiLevel*/,
309 __inout BOOL* /*pfDisableExternalUiHandler*/ 310 __inout BOOL* /*pfDisableExternalUiHandler*/,
311 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* /*pFileVersioning*/
310 ) 312 )
311 { 313 {
312 return S_OK; 314 return S_OK;
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
index 4c07ba89..c10b662c 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
@@ -319,10 +319,12 @@ public: // IBootstrapperApplication
319 __in_z LPCWSTR /*wzPackageId*/, 319 __in_z LPCWSTR /*wzPackageId*/,
320 __in BOOL /*fExecute*/, 320 __in BOOL /*fExecute*/,
321 __in BOOTSTRAPPER_ACTION_STATE /*action*/, 321 __in BOOTSTRAPPER_ACTION_STATE /*action*/,
322 __in BOOTSTRAPPER_MSI_FILE_VERSIONING /*recommendedFileVersioning*/,
322 __inout BOOL* pfCancel, 323 __inout BOOL* pfCancel,
323 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/, 324 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/,
324 __inout INSTALLUILEVEL* /*pUiLevel*/, 325 __inout INSTALLUILEVEL* /*pUiLevel*/,
325 __inout BOOL* /*pfDisableExternalUiHandler*/ 326 __inout BOOL* /*pfDisableExternalUiHandler*/,
327 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* /*pFileVersioning*/
326 ) 328 )
327 { 329 {
328 *pfCancel |= CheckCanceled(); 330 *pfCancel |= CheckCanceled();
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
index d536729f..f17e1fcb 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -510,7 +510,7 @@ static HRESULT BalBaseBAProcOnPlanMsiPackage(
510 __inout BA_ONPLANMSIPACKAGE_RESULTS* pResults 510 __inout BA_ONPLANMSIPACKAGE_RESULTS* pResults
511 ) 511 )
512{ 512{
513 return pBA->OnPlanMsiPackage(pArgs->wzPackageId, pArgs->fExecute, pArgs->action, &pResults->fCancel, &pResults->actionMsiProperty, &pResults->uiLevel, &pResults->fDisableExternalUiHandler); 513 return pBA->OnPlanMsiPackage(pArgs->wzPackageId, pArgs->fExecute, pArgs->action, pArgs->recommendedFileVersioning, &pResults->fCancel, &pResults->actionMsiProperty, &pResults->uiLevel, &pResults->fDisableExternalUiHandler, &pResults->fileVersioning);
514} 514}
515 515
516static HRESULT BalBaseBAProcOnBeginMsiTransactionBegin( 516static HRESULT BalBaseBAProcOnBeginMsiTransactionBegin(
diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h
index 51f58ec7..1fc99988 100644
--- a/src/api/burn/balutil/inc/IBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h
@@ -208,10 +208,12 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
208 __in_z LPCWSTR wzPackageId, 208 __in_z LPCWSTR wzPackageId,
209 __in BOOL fExecute, // false means rollback. 209 __in BOOL fExecute, // false means rollback.
210 __in BOOTSTRAPPER_ACTION_STATE action, 210 __in BOOTSTRAPPER_ACTION_STATE action,
211 __in BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning,
211 __inout BOOL* pfCancel, 212 __inout BOOL* pfCancel,
212 __inout BURN_MSI_PROPERTY* pActionMsiProperty, 213 __inout BURN_MSI_PROPERTY* pActionMsiProperty,
213 __inout INSTALLUILEVEL* pUiLevel, 214 __inout INSTALLUILEVEL* pUiLevel,
214 __inout BOOL* pfDisableExternalUiHandler 215 __inout BOOL* pfDisableExternalUiHandler,
216 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
215 ) = 0; 217 ) = 0;
216 218
217 // OnPlanPackageComplete - called after the engine has completed getting the BA's input 219 // OnPlanPackageComplete - called after the engine has completed getting the BA's input
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp
index ba6b1dd3..12c9f296 100644
--- a/src/burn/engine/elevation.cpp
+++ b/src/burn/engine/elevation.cpp
@@ -1002,6 +1002,9 @@ extern "C" HRESULT ElevationExecuteMsiPackage(
1002 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->msiPackage.fDisableExternalUiHandler); 1002 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->msiPackage.fDisableExternalUiHandler);
1003 ExitOnFailure(hr, "Failed to write fDisableExternalUiHandler to message buffer."); 1003 ExitOnFailure(hr, "Failed to write fDisableExternalUiHandler to message buffer.");
1004 1004
1005 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->msiPackage.fileVersioning);
1006 ExitOnFailure(hr, "Failed to write fileVersioning to message buffer.");
1007
1005 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->msiPackage.action); 1008 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->msiPackage.action);
1006 ExitOnFailure(hr, "Failed to write action to message buffer."); 1009 ExitOnFailure(hr, "Failed to write action to message buffer.");
1007 1010
@@ -1083,6 +1086,9 @@ extern "C" HRESULT ElevationExecuteMspPackage(
1083 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->mspTarget.fDisableExternalUiHandler); 1086 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->mspTarget.fDisableExternalUiHandler);
1084 ExitOnFailure(hr, "Failed to write fDisableExternalUiHandler to message buffer."); 1087 ExitOnFailure(hr, "Failed to write fDisableExternalUiHandler to message buffer.");
1085 1088
1089 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->mspTarget.fileVersioning);
1090 ExitOnFailure(hr, "Failed to write fileVersioning to message buffer.");
1091
1086 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->mspTarget.action); 1092 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)pExecuteAction->mspTarget.action);
1087 ExitOnFailure(hr, "Failed to write action to message buffer."); 1093 ExitOnFailure(hr, "Failed to write action to message buffer.");
1088 1094
@@ -2603,6 +2609,9 @@ static HRESULT OnExecuteMsiPackage(
2603 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.msiPackage.fDisableExternalUiHandler); 2609 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.msiPackage.fDisableExternalUiHandler);
2604 ExitOnFailure(hr, "Failed to read fDisableExternalUiHandler."); 2610 ExitOnFailure(hr, "Failed to read fDisableExternalUiHandler.");
2605 2611
2612 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.msiPackage.fileVersioning);
2613 ExitOnFailure(hr, "Failed to read fileVersioning.");
2614
2606 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.msiPackage.action); 2615 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.msiPackage.action);
2607 ExitOnFailure(hr, "Failed to read action."); 2616 ExitOnFailure(hr, "Failed to read action.");
2608 2617
@@ -2703,6 +2712,9 @@ static HRESULT OnExecuteMspPackage(
2703 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.mspTarget.fDisableExternalUiHandler); 2712 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.mspTarget.fDisableExternalUiHandler);
2704 ExitOnFailure(hr, "Failed to read fDisableExternalUiHandler."); 2713 ExitOnFailure(hr, "Failed to read fDisableExternalUiHandler.");
2705 2714
2715 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.mspTarget.fileVersioning);
2716 ExitOnFailure(hr, "Failed to read fileVersioning.");
2717
2706 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.mspTarget.action); 2718 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&executeAction.mspTarget.action);
2707 ExitOnFailure(hr, "Failed to read action."); 2719 ExitOnFailure(hr, "Failed to read action.");
2708 2720
diff --git a/src/burn/engine/logging.cpp b/src/burn/engine/logging.cpp
index 33295acd..21e010bc 100644
--- a/src/burn/engine/logging.cpp
+++ b/src/burn/engine/logging.cpp
@@ -480,6 +480,23 @@ extern "C" LPCSTR LoggingPackageRegistrationStateToString(
480 } 480 }
481} 481}
482 482
483extern "C" LPCSTR LoggingMsiFileVersioningToString(
484 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning
485 )
486{
487 switch (fileVersioning)
488 {
489 case BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER:
490 return "o";
491 case BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER_OR_EQUAL:
492 return "e";
493 case BOOTSTRAPPER_MSI_FILE_VERSIONING_ALL:
494 return "a";
495 default:
496 return "Invalid";
497 }
498}
499
483extern "C" LPCSTR LoggingMsiFeatureStateToString( 500extern "C" LPCSTR LoggingMsiFeatureStateToString(
484 __in BOOTSTRAPPER_FEATURE_STATE featureState 501 __in BOOTSTRAPPER_FEATURE_STATE featureState
485 ) 502 )
diff --git a/src/burn/engine/logging.h b/src/burn/engine/logging.h
index 367b94a3..11f676b3 100644
--- a/src/burn/engine/logging.h
+++ b/src/burn/engine/logging.h
@@ -106,6 +106,10 @@ LPCSTR LoggingPackageRegistrationStateToString(
106 __in BURN_PACKAGE_REGISTRATION_STATE registrationState 106 __in BURN_PACKAGE_REGISTRATION_STATE registrationState
107 ); 107 );
108 108
109LPCSTR LoggingMsiFileVersioningToString(
110 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning
111 );
112
109LPCSTR LoggingMsiFeatureStateToString( 113LPCSTR LoggingMsiFeatureStateToString(
110 __in BOOTSTRAPPER_FEATURE_STATE featureState 114 __in BOOTSTRAPPER_FEATURE_STATE featureState
111 ); 115 );
diff --git a/src/burn/engine/msiengine.cpp b/src/burn/engine/msiengine.cpp
index c80fd79f..509fbb7a 100644
--- a/src/burn/engine/msiengine.cpp
+++ b/src/burn/engine/msiengine.cpp
@@ -958,8 +958,8 @@ extern "C" HRESULT MsiEnginePlanAddPackage(
958 pAction->msiPackage.rgFeatures = rgRollbackFeatureActions; 958 pAction->msiPackage.rgFeatures = rgRollbackFeatureActions;
959 rgRollbackFeatureActions = NULL; 959 rgRollbackFeatureActions = NULL;
960 960
961 hr = MsiEngineCalculateInstallUiLevel(display, pUserExperience, pPackage->sczId, FALSE, pAction->msiPackage.action, 961 hr = MsiEnginePlanPackageOptions(display, pUserExperience, pPackage->sczId, FALSE, pAction->msiPackage.action,
962 &pAction->msiPackage.actionMsiProperty, &pAction->msiPackage.uiLevel, &pAction->msiPackage.fDisableExternalUiHandler); 962 &pAction->msiPackage.actionMsiProperty, &pAction->msiPackage.uiLevel, &pAction->msiPackage.fDisableExternalUiHandler, &pAction->msiPackage.fileVersioning);
963 ExitOnFailure(hr, "Failed to get msi ui options."); 963 ExitOnFailure(hr, "Failed to get msi ui options.");
964 964
965 LoggingSetPackageVariable(pPackage, NULL, TRUE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors. 965 LoggingSetPackageVariable(pPackage, NULL, TRUE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors.
@@ -984,8 +984,8 @@ extern "C" HRESULT MsiEnginePlanAddPackage(
984 pAction->msiPackage.rgFeatures = rgFeatureActions; 984 pAction->msiPackage.rgFeatures = rgFeatureActions;
985 rgFeatureActions = NULL; 985 rgFeatureActions = NULL;
986 986
987 hr = MsiEngineCalculateInstallUiLevel(display, pUserExperience, pPackage->sczId, TRUE, pAction->msiPackage.action, 987 hr = MsiEnginePlanPackageOptions(display, pUserExperience, pPackage->sczId, TRUE, pAction->msiPackage.action,
988 &pAction->msiPackage.actionMsiProperty, &pAction->msiPackage.uiLevel, &pAction->msiPackage.fDisableExternalUiHandler); 988 &pAction->msiPackage.actionMsiProperty, &pAction->msiPackage.uiLevel, &pAction->msiPackage.fDisableExternalUiHandler, &pAction->msiPackage.fileVersioning);
989 ExitOnFailure(hr, "Failed to get msi ui options."); 989 ExitOnFailure(hr, "Failed to get msi ui options.");
990 990
991 LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors. 991 LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors.
@@ -1153,10 +1153,10 @@ extern "C" HRESULT MsiEngineExecutePackage(
1153 } 1153 }
1154 1154
1155 // set up properties 1155 // set up properties
1156 hr = MsiEngineConcatProperties(pPackage->Msi.rgProperties, pPackage->Msi.cProperties, pVariables, fRollback, &sczProperties, FALSE); 1156 hr = MsiEngineConcatPackageProperties(pPackage->Msi.rgProperties, pPackage->Msi.cProperties, pVariables, fRollback, &sczProperties, FALSE);
1157 ExitOnFailure(hr, "Failed to add properties to argument string."); 1157 ExitOnFailure(hr, "Failed to add properties to argument string.");
1158 1158
1159 hr = MsiEngineConcatProperties(pPackage->Msi.rgProperties, pPackage->Msi.cProperties, pVariables, fRollback, &sczObfuscatedProperties, TRUE); 1159 hr = MsiEngineConcatPackageProperties(pPackage->Msi.rgProperties, pPackage->Msi.cProperties, pVariables, fRollback, &sczObfuscatedProperties, TRUE);
1160 ExitOnFailure(hr, "Failed to add obfuscated properties to argument string."); 1160 ExitOnFailure(hr, "Failed to add obfuscated properties to argument string.");
1161 1161
1162 // add feature action properties 1162 // add feature action properties
@@ -1173,10 +1173,10 @@ extern "C" HRESULT MsiEngineExecutePackage(
1173 hr = ConcatPatchProperty(pCache, pPackage, fRollback, &sczObfuscatedProperties); 1173 hr = ConcatPatchProperty(pCache, pPackage, fRollback, &sczObfuscatedProperties);
1174 ExitOnFailure(hr, "Failed to add patch properties to obfuscated argument string."); 1174 ExitOnFailure(hr, "Failed to add patch properties to obfuscated argument string.");
1175 1175
1176 hr = MsiEngineConcatActionProperty(pExecuteAction->msiPackage.actionMsiProperty, &sczProperties); 1176 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, !pPackage->Msi.cFeatures, &sczProperties);
1177 ExitOnFailure(hr, "Failed to add action property to argument string."); 1177 ExitOnFailure(hr, "Failed to add action property to argument string.");
1178 1178
1179 hr = MsiEngineConcatActionProperty(pExecuteAction->msiPackage.actionMsiProperty, &sczObfuscatedProperties); 1179 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, !pPackage->Msi.cFeatures, &sczObfuscatedProperties);
1180 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string."); 1180 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string.");
1181 1181
1182 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msiPackage.action), sczMsiPath, sczObfuscatedProperties ? sczObfuscatedProperties : L""); 1182 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msiPackage.action), sczMsiPath, sczObfuscatedProperties ? sczObfuscatedProperties : L"");
@@ -1187,9 +1187,6 @@ extern "C" HRESULT MsiEngineExecutePackage(
1187 switch (pExecuteAction->msiPackage.action) 1187 switch (pExecuteAction->msiPackage.action)
1188 { 1188 {
1189 case BOOTSTRAPPER_ACTION_STATE_INSTALL: 1189 case BOOTSTRAPPER_ACTION_STATE_INSTALL:
1190 hr = StrAllocConcatSecure(&sczProperties, L" REBOOT=ReallySuppress", 0);
1191 ExitOnFailure(hr, "Failed to add reboot suppression property on install.");
1192
1193 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart); 1190 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart);
1194 ExitOnFailure(hr, "Failed to install MSI package."); 1191 ExitOnFailure(hr, "Failed to install MSI package.");
1195 1192
@@ -1197,17 +1194,6 @@ extern "C" HRESULT MsiEngineExecutePackage(
1197 break; 1194 break;
1198 1195
1199 case BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE: 1196 case BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE:
1200 // If feature selection is not enabled, then reinstall the existing features to ensure they get
1201 // updated.
1202 if (0 == pPackage->Msi.cFeatures)
1203 {
1204 hr = StrAllocConcatSecure(&sczProperties, L" REINSTALL=ALL", 0);
1205 ExitOnFailure(hr, "Failed to add reinstall all property on minor upgrade.");
1206 }
1207
1208 hr = StrAllocConcatSecure(&sczProperties, L" REINSTALLMODE=\"vomus\" REBOOT=ReallySuppress", 0);
1209 ExitOnFailure(hr, "Failed to add reinstall mode and reboot suppression properties on minor upgrade.");
1210
1211 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart); 1197 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart);
1212 ExitOnFailure(hr, "Failed to perform minor upgrade of MSI package."); 1198 ExitOnFailure(hr, "Failed to perform minor upgrade of MSI package.");
1213 1199
@@ -1217,31 +1203,11 @@ extern "C" HRESULT MsiEngineExecutePackage(
1217 case BOOTSTRAPPER_ACTION_STATE_MODIFY: __fallthrough; 1203 case BOOTSTRAPPER_ACTION_STATE_MODIFY: __fallthrough;
1218 case BOOTSTRAPPER_ACTION_STATE_MEND: __fallthrough; 1204 case BOOTSTRAPPER_ACTION_STATE_MEND: __fallthrough;
1219 case BOOTSTRAPPER_ACTION_STATE_REPAIR: 1205 case BOOTSTRAPPER_ACTION_STATE_REPAIR:
1220 {
1221 LPCWSTR wzReinstallAll = (BOOTSTRAPPER_ACTION_STATE_MODIFY == pExecuteAction->msiPackage.action ||
1222 pPackage->Msi.cFeatures) ? L"" : L" REINSTALL=ALL";
1223 LPCWSTR wzReinstallMode = (BOOTSTRAPPER_ACTION_STATE_MODIFY == pExecuteAction->msiPackage.action || BOOTSTRAPPER_ACTION_STATE_MEND == pExecuteAction->msiPackage.action) ? L"o" : L"e";
1224
1225 hr = StrAllocFormattedSecure(&sczProperties, L"%ls%ls REINSTALLMODE=\"cmus%ls\" REBOOT=ReallySuppress", sczProperties ? sczProperties : L"", wzReinstallAll, wzReinstallMode);
1226 ExitOnFailure(hr, "Failed to add reinstall mode and reboot suppression properties on repair.");
1227 }
1228
1229 // Ignore all dependencies, since the Burn engine already performed the check.
1230 hr = StrAllocFormattedSecure(&sczProperties, L"%ls %ls=ALL", sczProperties, DEPENDENCY_IGNOREDEPENDENCIES);
1231 ExitOnFailure(hr, "Failed to add the list of dependencies to ignore to the properties.");
1232
1233 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart); 1206 hr = WiuInstallProduct(sczMsiPath, sczProperties, &restart);
1234 ExitOnFailure(hr, "Failed to run maintenance mode for MSI package."); 1207 ExitOnFailure(hr, "Failed to run maintenance mode for MSI package.");
1235 break; 1208 break;
1236 1209
1237 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL: 1210 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL:
1238 hr = StrAllocConcatSecure(&sczProperties, L" REBOOT=ReallySuppress", 0);
1239 ExitOnFailure(hr, "Failed to add reboot suppression property on uninstall.");
1240
1241 // Ignore all dependencies, since the Burn engine already performed the check.
1242 hr = StrAllocFormattedSecure(&sczProperties, L"%ls %ls=ALL", sczProperties, DEPENDENCY_IGNOREDEPENDENCIES);
1243 ExitOnFailure(hr, "Failed to add the list of dependencies to ignore to the properties.");
1244
1245 hr = WiuConfigureProductEx(pPackage->Msi.sczProductCode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, sczProperties, &restart); 1211 hr = WiuConfigureProductEx(pPackage->Msi.sczProductCode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, sczProperties, &restart);
1246 if (HRESULT_FROM_WIN32(ERROR_UNKNOWN_PRODUCT) == hr) 1212 if (HRESULT_FROM_WIN32(ERROR_UNKNOWN_PRODUCT) == hr)
1247 { 1213 {
@@ -1283,13 +1249,55 @@ LExit:
1283 return hr; 1249 return hr;
1284} 1250}
1285 1251
1286extern "C" HRESULT MsiEngineConcatActionProperty( 1252extern "C" HRESULT MsiEngineConcatBurnProperties(
1253 __in BOOTSTRAPPER_ACTION_STATE action,
1287 __in BURN_MSI_PROPERTY actionMsiProperty, 1254 __in BURN_MSI_PROPERTY actionMsiProperty,
1255 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning,
1256 __in BOOL fMsiPackage,
1257 __in BOOL fFeatureSelectionEnabled,
1288 __deref_out_z LPWSTR* psczProperties 1258 __deref_out_z LPWSTR* psczProperties
1289 ) 1259 )
1290{ 1260{
1291 HRESULT hr = S_OK; 1261 HRESULT hr = S_OK;
1292 LPCWSTR wzPropertyName = NULL; 1262 LPCWSTR wzPropertyName = NULL;
1263 LPCWSTR wzReinstallModeOptions = NULL;
1264 LPCWSTR wzFileVersioning = L"";
1265 BOOL fReinstallAll = FALSE;
1266 BOOL fIgnoreDependencies = FALSE;
1267
1268 switch (action)
1269 {
1270 case BOOTSTRAPPER_ACTION_STATE_INSTALL:
1271 wzReinstallModeOptions = L"mus";
1272 break;
1273 case BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE:
1274 if (fMsiPackage)
1275 {
1276 // If feature selection is not enabled,
1277 // then reinstall the existing features to ensure they get updated.
1278 fReinstallAll = !fFeatureSelectionEnabled;
1279
1280 wzReinstallModeOptions = L"vmus";
1281 }
1282 break;
1283 case BOOTSTRAPPER_ACTION_STATE_REPAIR: __fallthrough;
1284 case BOOTSTRAPPER_ACTION_STATE_MEND: __fallthrough;
1285 case BOOTSTRAPPER_ACTION_STATE_MODIFY:
1286 if (fMsiPackage)
1287 {
1288 fReinstallAll = BOOTSTRAPPER_ACTION_STATE_MODIFY != action && !fFeatureSelectionEnabled;
1289 wzReinstallModeOptions = L"cmus";
1290 fIgnoreDependencies = TRUE;
1291 }
1292 else
1293 {
1294 wzReinstallModeOptions = L"mus";
1295 }
1296 break;
1297 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL:
1298 fIgnoreDependencies = TRUE;
1299 break;
1300 }
1293 1301
1294 switch (actionMsiProperty) 1302 switch (actionMsiProperty)
1295 { 1303 {
@@ -1313,11 +1321,46 @@ extern "C" HRESULT MsiEngineConcatActionProperty(
1313 ExitOnFailure(hr, "Failed to add burn action property."); 1321 ExitOnFailure(hr, "Failed to add burn action property.");
1314 } 1322 }
1315 1323
1324 if (fReinstallAll)
1325 {
1326 hr = StrAllocConcatSecure(psczProperties, L" REINSTALL=ALL", 0);
1327 ExitOnFailure(hr, "Failed to add reinstall all property.");
1328 }
1329
1330 if (wzReinstallModeOptions)
1331 {
1332 switch (fileVersioning)
1333 {
1334 case BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER:
1335 wzFileVersioning = L"o";
1336 break;
1337 case BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER_OR_EQUAL:
1338 wzFileVersioning = L"e";
1339 break;
1340 case BOOTSTRAPPER_MSI_FILE_VERSIONING_ALL:
1341 wzFileVersioning = L"a";
1342 break;
1343 }
1344
1345 hr = StrAllocConcatFormattedSecure(psczProperties, L" REINSTALLMODE=\"%ls%ls\"", wzReinstallModeOptions, wzFileVersioning);
1346 ExitOnFailure(hr, "Failed to add reinstall mode.");
1347 }
1348
1349 hr = StrAllocConcatSecure(psczProperties, L" REBOOT=ReallySuppress", 0);
1350 ExitOnFailure(hr, "Failed to add reboot suppression property.");
1351
1352 if (fIgnoreDependencies)
1353 {
1354 // Ignore all dependencies, since the Burn engine already performed the check.
1355 hr = StrAllocConcatFormattedSecure(psczProperties, L" %ls=ALL", DEPENDENCY_IGNOREDEPENDENCIES);
1356 ExitOnFailure(hr, "Failed to add the list of dependencies to ignore to the properties.");
1357 }
1358
1316LExit: 1359LExit:
1317 return hr; 1360 return hr;
1318} 1361}
1319 1362
1320extern "C" HRESULT MsiEngineConcatProperties( 1363extern "C" HRESULT MsiEngineConcatPackageProperties(
1321 __in_ecount(cProperties) BURN_MSIPROPERTY* rgProperties, 1364 __in_ecount(cProperties) BURN_MSIPROPERTY* rgProperties,
1322 __in DWORD cProperties, 1365 __in DWORD cProperties,
1323 __in BURN_VARIABLES* pVariables, 1366 __in BURN_VARIABLES* pVariables,
@@ -1379,7 +1422,7 @@ LExit:
1379 return hr; 1422 return hr;
1380} 1423}
1381 1424
1382extern "C" HRESULT MsiEngineCalculateInstallUiLevel( 1425extern "C" HRESULT MsiEnginePlanPackageOptions(
1383 __in BOOTSTRAPPER_DISPLAY display, 1426 __in BOOTSTRAPPER_DISPLAY display,
1384 __in BURN_USER_EXPERIENCE* pUserExperience, 1427 __in BURN_USER_EXPERIENCE* pUserExperience,
1385 __in LPCWSTR wzPackageId, 1428 __in LPCWSTR wzPackageId,
@@ -1387,11 +1430,13 @@ extern "C" HRESULT MsiEngineCalculateInstallUiLevel(
1387 __in BOOTSTRAPPER_ACTION_STATE actionState, 1430 __in BOOTSTRAPPER_ACTION_STATE actionState,
1388 __out BURN_MSI_PROPERTY* pActionMsiProperty, 1431 __out BURN_MSI_PROPERTY* pActionMsiProperty,
1389 __out INSTALLUILEVEL* pUiLevel, 1432 __out INSTALLUILEVEL* pUiLevel,
1390 __out BOOL* pfDisableExternalUiHandler 1433 __out BOOL* pfDisableExternalUiHandler,
1434 __out BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
1391 ) 1435 )
1392{ 1436{
1393 *pUiLevel = INSTALLUILEVEL_NONE; 1437 *pUiLevel = INSTALLUILEVEL_NONE;
1394 *pfDisableExternalUiHandler = FALSE; 1438 *pfDisableExternalUiHandler = FALSE;
1439 *pFileVersioning = BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER;
1395 1440
1396 if (BOOTSTRAPPER_DISPLAY_FULL == display || 1441 if (BOOTSTRAPPER_DISPLAY_FULL == display ||
1397 BOOTSTRAPPER_DISPLAY_PASSIVE == display) 1442 BOOTSTRAPPER_DISPLAY_PASSIVE == display)
@@ -1406,6 +1451,7 @@ extern "C" HRESULT MsiEngineCalculateInstallUiLevel(
1406 break; 1451 break;
1407 case BOOTSTRAPPER_ACTION_STATE_REPAIR: 1452 case BOOTSTRAPPER_ACTION_STATE_REPAIR:
1408 *pActionMsiProperty = BURN_MSI_PROPERTY_REPAIR; 1453 *pActionMsiProperty = BURN_MSI_PROPERTY_REPAIR;
1454 *pFileVersioning = BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER_OR_EQUAL;
1409 break; 1455 break;
1410 case BOOTSTRAPPER_ACTION_STATE_MODIFY: 1456 case BOOTSTRAPPER_ACTION_STATE_MODIFY:
1411 *pActionMsiProperty = BURN_MSI_PROPERTY_MODIFY; 1457 *pActionMsiProperty = BURN_MSI_PROPERTY_MODIFY;
@@ -1415,7 +1461,7 @@ extern "C" HRESULT MsiEngineCalculateInstallUiLevel(
1415 break; 1461 break;
1416 } 1462 }
1417 1463
1418 return UserExperienceOnPlanMsiPackage(pUserExperience, wzPackageId, fExecute, actionState, pActionMsiProperty, pUiLevel, pfDisableExternalUiHandler); 1464 return UserExperienceOnPlanMsiPackage(pUserExperience, wzPackageId, fExecute, actionState, pActionMsiProperty, pUiLevel, pfDisableExternalUiHandler, pFileVersioning);
1419} 1465}
1420 1466
1421extern "C" void MsiEngineUpdateInstallRegistrationState( 1467extern "C" void MsiEngineUpdateInstallRegistrationState(
diff --git a/src/burn/engine/msiengine.h b/src/burn/engine/msiengine.h
index 87f47f7c..113bf438 100644
--- a/src/burn/engine/msiengine.h
+++ b/src/burn/engine/msiengine.h
@@ -70,11 +70,15 @@ HRESULT MsiEngineExecutePackage(
70 __in LPVOID pvContext, 70 __in LPVOID pvContext,
71 __out BOOTSTRAPPER_APPLY_RESTART* pRestart 71 __out BOOTSTRAPPER_APPLY_RESTART* pRestart
72 ); 72 );
73HRESULT MsiEngineConcatActionProperty( 73HRESULT MsiEngineConcatBurnProperties(
74 __in BOOTSTRAPPER_ACTION_STATE action,
74 __in BURN_MSI_PROPERTY actionMsiProperty, 75 __in BURN_MSI_PROPERTY actionMsiProperty,
76 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning,
77 __in BOOL fMsiPackage,
78 __in BOOL fFeatureSelectionEnabled,
75 __deref_out_z LPWSTR* psczProperties 79 __deref_out_z LPWSTR* psczProperties
76 ); 80 );
77HRESULT MsiEngineConcatProperties( 81HRESULT MsiEngineConcatPackageProperties(
78 __in_ecount(cProperties) BURN_MSIPROPERTY* rgProperties, 82 __in_ecount(cProperties) BURN_MSIPROPERTY* rgProperties,
79 __in DWORD cProperties, 83 __in DWORD cProperties,
80 __in BURN_VARIABLES* pVariables, 84 __in BURN_VARIABLES* pVariables,
@@ -82,7 +86,7 @@ HRESULT MsiEngineConcatProperties(
82 __deref_out_z LPWSTR* psczProperties, 86 __deref_out_z LPWSTR* psczProperties,
83 __in BOOL fObfuscateHiddenVariables 87 __in BOOL fObfuscateHiddenVariables
84 ); 88 );
85HRESULT MsiEngineCalculateInstallUiLevel( 89HRESULT MsiEnginePlanPackageOptions(
86 __in BOOTSTRAPPER_DISPLAY display, 90 __in BOOTSTRAPPER_DISPLAY display,
87 __in BURN_USER_EXPERIENCE* pUserExperience, 91 __in BURN_USER_EXPERIENCE* pUserExperience,
88 __in LPCWSTR wzPackageId, 92 __in LPCWSTR wzPackageId,
@@ -90,7 +94,8 @@ HRESULT MsiEngineCalculateInstallUiLevel(
90 __in BOOTSTRAPPER_ACTION_STATE actionState, 94 __in BOOTSTRAPPER_ACTION_STATE actionState,
91 __out BURN_MSI_PROPERTY* pActionMsiProperty, 95 __out BURN_MSI_PROPERTY* pActionMsiProperty,
92 __out INSTALLUILEVEL* pUiLevel, 96 __out INSTALLUILEVEL* pUiLevel,
93 __out BOOL* pfDisableExternalUiHandler 97 __out BOOL* pfDisableExternalUiHandler,
98 __out BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
94 ); 99 );
95void MsiEngineUpdateInstallRegistrationState( 100void MsiEngineUpdateInstallRegistrationState(
96 __in BURN_EXECUTE_ACTION* pAction, 101 __in BURN_EXECUTE_ACTION* pAction,
diff --git a/src/burn/engine/mspengine.cpp b/src/burn/engine/mspengine.cpp
index 3d7b5517..a88d0cb2 100644
--- a/src/burn/engine/mspengine.cpp
+++ b/src/burn/engine/mspengine.cpp
@@ -629,16 +629,26 @@ extern "C" HRESULT MspEngineExecutePackage(
629 } 629 }
630 630
631 // set up properties 631 // set up properties
632 hr = MsiEngineConcatProperties(pExecuteAction->mspTarget.pPackage->Msp.rgProperties, pExecuteAction->mspTarget.pPackage->Msp.cProperties, pVariables, fRollback, &sczProperties, FALSE); 632 hr = MsiEngineConcatPackageProperties(pExecuteAction->mspTarget.pPackage->Msp.rgProperties, pExecuteAction->mspTarget.pPackage->Msp.cProperties, pVariables, fRollback, &sczProperties, FALSE);
633 ExitOnFailure(hr, "Failed to add properties to argument string."); 633 ExitOnFailure(hr, "Failed to add properties to argument string.");
634 634
635 hr = MsiEngineConcatProperties(pExecuteAction->mspTarget.pPackage->Msp.rgProperties, pExecuteAction->mspTarget.pPackage->Msp.cProperties, pVariables, fRollback, &sczObfuscatedProperties, TRUE); 635 hr = MsiEngineConcatPackageProperties(pExecuteAction->mspTarget.pPackage->Msp.rgProperties, pExecuteAction->mspTarget.pPackage->Msp.cProperties, pVariables, fRollback, &sczObfuscatedProperties, TRUE);
636 ExitOnFailure(hr, "Failed to add properties to obfuscated argument string."); 636 ExitOnFailure(hr, "Failed to add properties to obfuscated argument string.");
637 637
638 hr = MsiEngineConcatActionProperty(pExecuteAction->mspTarget.actionMsiProperty, &sczProperties); 638 if (BOOTSTRAPPER_ACTION_STATE_UNINSTALL != pExecuteAction->mspTarget.action)
639 {
640 hr = StrAllocConcatFormattedSecure(&sczProperties, L" PATCH=\"%ls\"", sczPatches);
641 ExitOnFailure(hr, "Failed to add PATCH property to argument string.");
642
643 hr = StrAllocConcatFormatted(&sczObfuscatedProperties, L" PATCH=\"%ls\"", sczPatches);
644 ExitOnFailure(hr, "Failed to add PATCH property to obfuscated argument string.");
645 }
646
647 // Always add Burn properties last.
648 hr = MsiEngineConcatBurnProperties(pExecuteAction->mspTarget.action, pExecuteAction->mspTarget.actionMsiProperty, pExecuteAction->mspTarget.fileVersioning, FALSE, FALSE, &sczProperties);
639 ExitOnFailure(hr, "Failed to add action property to argument string."); 649 ExitOnFailure(hr, "Failed to add action property to argument string.");
640 650
641 hr = MsiEngineConcatActionProperty(pExecuteAction->mspTarget.actionMsiProperty, &sczObfuscatedProperties); 651 hr = MsiEngineConcatBurnProperties(pExecuteAction->mspTarget.action, pExecuteAction->mspTarget.actionMsiProperty, pExecuteAction->mspTarget.fileVersioning, FALSE, FALSE, &sczObfuscatedProperties);
642 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string."); 652 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string.");
643 653
644 LogId(REPORT_STANDARD, MSG_APPLYING_PATCH_PACKAGE, pExecuteAction->mspTarget.pPackage->sczId, LoggingActionStateToString(pExecuteAction->mspTarget.action), sczPatches, sczObfuscatedProperties, pExecuteAction->mspTarget.sczTargetProductCode); 654 LogId(REPORT_STANDARD, MSG_APPLYING_PATCH_PACKAGE, pExecuteAction->mspTarget.pPackage->sczId, LoggingActionStateToString(pExecuteAction->mspTarget.action), sczPatches, sczObfuscatedProperties, pExecuteAction->mspTarget.sczTargetProductCode);
@@ -650,27 +660,11 @@ extern "C" HRESULT MspEngineExecutePackage(
650 { 660 {
651 case BOOTSTRAPPER_ACTION_STATE_INSTALL: __fallthrough; 661 case BOOTSTRAPPER_ACTION_STATE_INSTALL: __fallthrough;
652 case BOOTSTRAPPER_ACTION_STATE_REPAIR: 662 case BOOTSTRAPPER_ACTION_STATE_REPAIR:
653 hr = StrAllocConcatSecure(&sczProperties, L" PATCH=\"", 0);
654 ExitOnFailure(hr, "Failed to add PATCH property on install.");
655
656 hr = StrAllocConcatSecure(&sczProperties, sczPatches, 0);
657 ExitOnFailure(hr, "Failed to add patches to PATCH property on install.");
658
659 hr = StrAllocConcatSecure(&sczProperties, L"\" REBOOT=ReallySuppress", 0);
660 ExitOnFailure(hr, "Failed to add reboot suppression property on install.");
661
662 hr = WiuConfigureProductEx(pExecuteAction->mspTarget.sczTargetProductCode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_DEFAULT, sczProperties, &restart); 663 hr = WiuConfigureProductEx(pExecuteAction->mspTarget.sczTargetProductCode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_DEFAULT, sczProperties, &restart);
663 ExitOnFailure(hr, "Failed to install MSP package."); 664 ExitOnFailure(hr, "Failed to install MSP package.");
664 break; 665 break;
665 666
666 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL: 667 case BOOTSTRAPPER_ACTION_STATE_UNINSTALL:
667 hr = StrAllocConcatSecure(&sczProperties, L" REBOOT=ReallySuppress", 0);
668 ExitOnFailure(hr, "Failed to add reboot suppression property on uninstall.");
669
670 // Ignore all dependencies, since the Burn engine already performed the check.
671 hr = StrAllocFormattedSecure(&sczProperties, L"%ls %ls=ALL", sczProperties, DEPENDENCY_IGNOREDEPENDENCIES);
672 ExitOnFailure(hr, "Failed to add the list of dependencies to ignore to the properties.");
673
674 hr = WiuRemovePatches(sczPatches, pExecuteAction->mspTarget.sczTargetProductCode, sczProperties, &restart); 668 hr = WiuRemovePatches(sczPatches, pExecuteAction->mspTarget.sczTargetProductCode, sczProperties, &restart);
675 ExitOnFailure(hr, "Failed to uninstall MSP package."); 669 ExitOnFailure(hr, "Failed to uninstall MSP package.");
676 break; 670 break;
@@ -1128,8 +1122,8 @@ static HRESULT PlanTargetProduct(
1128 hr = StrAllocString(&pAction->mspTarget.sczTargetProductCode, pTargetProduct->wzTargetProductCode, 0); 1122 hr = StrAllocString(&pAction->mspTarget.sczTargetProductCode, pTargetProduct->wzTargetProductCode, 0);
1129 ExitOnFailure(hr, "Failed to copy target product code."); 1123 ExitOnFailure(hr, "Failed to copy target product code.");
1130 1124
1131 hr = MsiEngineCalculateInstallUiLevel(display, pUserExperience, pPackage->sczId, !fRollback, pAction->mspTarget.action, 1125 hr = MsiEnginePlanPackageOptions(display, pUserExperience, pPackage->sczId, !fRollback, pAction->mspTarget.action,
1132 &pAction->mspTarget.actionMsiProperty, &pAction->mspTarget.uiLevel, &pAction->mspTarget.fDisableExternalUiHandler); 1126 &pAction->mspTarget.actionMsiProperty, &pAction->mspTarget.uiLevel, &pAction->mspTarget.fDisableExternalUiHandler, &pAction->mspTarget.fileVersioning);
1133 ExitOnFailure(hr, "Failed to get msp ui options."); 1127 ExitOnFailure(hr, "Failed to get msp ui options.");
1134 1128
1135 // If this is a per-machine target product, then the plan needs to be per-machine as well. 1129 // If this is a per-machine target product, then the plan needs to be per-machine as well.
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index 58981352..5aad8c9b 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -2596,7 +2596,7 @@ static void ExecuteActionLog(
2596 break; 2596 break;
2597 2597
2598 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE: 2598 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE:
2599 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSI_PACKAGE package id: %ls, action: %hs, action msi property: %ls, ui level: %u, disable externaluihandler: %ls, log path: %ls, logging attrib: %u", wzBase, iAction, pAction->msiPackage.pPackage->sczId, LoggingActionStateToString(pAction->msiPackage.action), LoggingBurnMsiPropertyToString(pAction->msiPackage.actionMsiProperty), pAction->msiPackage.uiLevel, pAction->msiPackage.fDisableExternalUiHandler ? L"yes" : L"no", pAction->msiPackage.sczLogPath, pAction->msiPackage.dwLoggingAttributes); 2599 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSI_PACKAGE package id: %ls, action: %hs, action msi property: %ls, ui level: %u, disable externaluihandler: %hs, file versioning: %hs, log path: %ls, logging attrib: %u", wzBase, iAction, pAction->msiPackage.pPackage->sczId, LoggingActionStateToString(pAction->msiPackage.action), LoggingBurnMsiPropertyToString(pAction->msiPackage.actionMsiProperty), pAction->msiPackage.uiLevel, LoggingBoolToString(pAction->msiPackage.fDisableExternalUiHandler), LoggingMsiFileVersioningToString(pAction->msiPackage.fileVersioning), pAction->msiPackage.sczLogPath, pAction->msiPackage.dwLoggingAttributes);
2600 for (DWORD j = 0; j < pAction->msiPackage.pPackage->Msi.cSlipstreamMspPackages; ++j) 2600 for (DWORD j = 0; j < pAction->msiPackage.pPackage->Msi.cSlipstreamMspPackages; ++j)
2601 { 2601 {
2602 const BURN_SLIPSTREAM_MSP* pSlipstreamMsp = pAction->msiPackage.pPackage->Msi.rgSlipstreamMsps + j; 2602 const BURN_SLIPSTREAM_MSP* pSlipstreamMsp = pAction->msiPackage.pPackage->Msi.rgSlipstreamMsps + j;
@@ -2605,7 +2605,7 @@ static void ExecuteActionLog(
2605 break; 2605 break;
2606 2606
2607 case BURN_EXECUTE_ACTION_TYPE_MSP_TARGET: 2607 case BURN_EXECUTE_ACTION_TYPE_MSP_TARGET:
2608 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSP_TARGET package id: %ls, action: %hs, target product code: %ls, target per-machine: %ls, action msi property: %ls, ui level: %u, disable externaluihandler: %ls, log path: %ls", wzBase, iAction, pAction->mspTarget.pPackage->sczId, LoggingActionStateToString(pAction->mspTarget.action), pAction->mspTarget.sczTargetProductCode, pAction->mspTarget.fPerMachineTarget ? L"yes" : L"no", LoggingBurnMsiPropertyToString(pAction->mspTarget.actionMsiProperty), pAction->mspTarget.uiLevel, pAction->mspTarget.fDisableExternalUiHandler ? L"yes" : L"no", pAction->mspTarget.sczLogPath); 2608 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSP_TARGET package id: %ls, action: %hs, target product code: %ls, target per-machine: %hs, action msi property: %ls, ui level: %u, disable externaluihandler: %hs, file versioning: %hs, log path: %ls", wzBase, iAction, pAction->mspTarget.pPackage->sczId, LoggingActionStateToString(pAction->mspTarget.action), pAction->mspTarget.sczTargetProductCode, LoggingBoolToString(pAction->mspTarget.fPerMachineTarget), LoggingBurnMsiPropertyToString(pAction->mspTarget.actionMsiProperty), pAction->mspTarget.uiLevel, LoggingBoolToString(pAction->mspTarget.fDisableExternalUiHandler), LoggingMsiFileVersioningToString(pAction->mspTarget.fileVersioning), pAction->mspTarget.sczLogPath);
2609 for (DWORD j = 0; j < pAction->mspTarget.cOrderedPatches; ++j) 2609 for (DWORD j = 0; j < pAction->mspTarget.cOrderedPatches; ++j)
2610 { 2610 {
2611 LogStringLine(PlanDumpLevel, " Patch[%u]: order: %u, msp package id: %ls", j, pAction->mspTarget.rgOrderedPatches[j].pTargetProduct->dwOrder, pAction->mspTarget.rgOrderedPatches[j].pPackage->sczId); 2611 LogStringLine(PlanDumpLevel, " Patch[%u]: order: %u, msp package id: %ls", j, pAction->mspTarget.rgOrderedPatches[j].pTargetProduct->dwOrder, pAction->mspTarget.rgOrderedPatches[j].pPackage->sczId);
diff --git a/src/burn/engine/plan.h b/src/burn/engine/plan.h
index b8bb8c3d..b4348cc4 100644
--- a/src/burn/engine/plan.h
+++ b/src/burn/engine/plan.h
@@ -175,6 +175,7 @@ typedef struct _BURN_EXECUTE_ACTION
175 INSTALLUILEVEL uiLevel; 175 INSTALLUILEVEL uiLevel;
176 BOOL fDisableExternalUiHandler; 176 BOOL fDisableExternalUiHandler;
177 BOOTSTRAPPER_ACTION_STATE action; 177 BOOTSTRAPPER_ACTION_STATE action;
178 BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning;
178 179
179 BOOTSTRAPPER_FEATURE_ACTION* rgFeatures; 180 BOOTSTRAPPER_FEATURE_ACTION* rgFeatures;
180 } msiPackage; 181 } msiPackage;
@@ -190,6 +191,7 @@ typedef struct _BURN_EXECUTE_ACTION
190 INSTALLUILEVEL uiLevel; 191 INSTALLUILEVEL uiLevel;
191 BOOL fDisableExternalUiHandler; 192 BOOL fDisableExternalUiHandler;
192 BOOTSTRAPPER_ACTION_STATE action; 193 BOOTSTRAPPER_ACTION_STATE action;
194 BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning;
193 195
194 BURN_ORDERED_PATCHES* rgOrderedPatches; 196 BURN_ORDERED_PATCHES* rgOrderedPatches;
195 DWORD cOrderedPatches; 197 DWORD cOrderedPatches;
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp
index c974f4d4..2bd6ecaf 100644
--- a/src/burn/engine/userexperience.cpp
+++ b/src/burn/engine/userexperience.cpp
@@ -104,7 +104,7 @@ extern "C" HRESULT UserExperienceLoad(
104 args.pCommand = pCommand; 104 args.pCommand = pCommand;
105 args.pfnBootstrapperEngineProc = EngineForApplicationProc; 105 args.pfnBootstrapperEngineProc = EngineForApplicationProc;
106 args.pvBootstrapperEngineProcContext = pEngineContext; 106 args.pvBootstrapperEngineProcContext = pEngineContext;
107 args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 8, 10, 0); 107 args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 12, 7, 0);
108 108
109 results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); 109 results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS);
110 110
@@ -1896,7 +1896,8 @@ EXTERN_C BAAPI UserExperienceOnPlanMsiPackage(
1896 __in BOOTSTRAPPER_ACTION_STATE action, 1896 __in BOOTSTRAPPER_ACTION_STATE action,
1897 __inout BURN_MSI_PROPERTY* pActionMsiProperty, 1897 __inout BURN_MSI_PROPERTY* pActionMsiProperty,
1898 __inout INSTALLUILEVEL* pUiLevel, 1898 __inout INSTALLUILEVEL* pUiLevel,
1899 __inout BOOL* pfDisableExternalUiHandler 1899 __inout BOOL* pfDisableExternalUiHandler,
1900 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
1900 ) 1901 )
1901{ 1902{
1902 HRESULT hr = S_OK; 1903 HRESULT hr = S_OK;
@@ -1907,11 +1908,13 @@ EXTERN_C BAAPI UserExperienceOnPlanMsiPackage(
1907 args.wzPackageId = wzPackageId; 1908 args.wzPackageId = wzPackageId;
1908 args.fExecute = fExecute; 1909 args.fExecute = fExecute;
1909 args.action = action; 1910 args.action = action;
1911 args.recommendedFileVersioning = *pFileVersioning;
1910 1912
1911 results.cbSize = sizeof(results); 1913 results.cbSize = sizeof(results);
1912 results.actionMsiProperty = *pActionMsiProperty; 1914 results.actionMsiProperty = *pActionMsiProperty;
1913 results.uiLevel = *pUiLevel; 1915 results.uiLevel = *pUiLevel;
1914 results.fDisableExternalUiHandler = *pfDisableExternalUiHandler; 1916 results.fDisableExternalUiHandler = *pfDisableExternalUiHandler;
1917 results.fileVersioning = args.recommendedFileVersioning;
1915 1918
1916 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANMSIPACKAGE, &args, &results); 1919 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANMSIPACKAGE, &args, &results);
1917 ExitOnFailure(hr, "BA OnPlanMsiPackage failed."); 1920 ExitOnFailure(hr, "BA OnPlanMsiPackage failed.");
@@ -1923,6 +1926,7 @@ EXTERN_C BAAPI UserExperienceOnPlanMsiPackage(
1923 *pActionMsiProperty = results.actionMsiProperty; 1926 *pActionMsiProperty = results.actionMsiProperty;
1924 *pUiLevel = results.uiLevel; 1927 *pUiLevel = results.uiLevel;
1925 *pfDisableExternalUiHandler = results.fDisableExternalUiHandler; 1928 *pfDisableExternalUiHandler = results.fDisableExternalUiHandler;
1929 *pFileVersioning = results.fileVersioning;
1926 1930
1927LExit: 1931LExit:
1928 return hr; 1932 return hr;
diff --git a/src/burn/engine/userexperience.h b/src/burn/engine/userexperience.h
index c2219f7e..2493569b 100644
--- a/src/burn/engine/userexperience.h
+++ b/src/burn/engine/userexperience.h
@@ -440,7 +440,8 @@ BAAPI UserExperienceOnPlanMsiPackage(
440 __in BOOTSTRAPPER_ACTION_STATE action, 440 __in BOOTSTRAPPER_ACTION_STATE action,
441 __inout BURN_MSI_PROPERTY* pActionMsiProperty, 441 __inout BURN_MSI_PROPERTY* pActionMsiProperty,
442 __inout INSTALLUILEVEL* pUiLevel, 442 __inout INSTALLUILEVEL* pUiLevel,
443 __inout BOOL* pfDisableExternalUiHandler 443 __inout BOOL* pfDisableExternalUiHandler,
444 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
444 ); 445 );
445BAAPI UserExperienceOnPlannedPackage( 446BAAPI UserExperienceOnPlannedPackage(
446 __in BURN_USER_EXPERIENCE* pUserExperience, 447 __in BURN_USER_EXPERIENCE* pUserExperience,
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index ee3dcf3a..921f2a50 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -87,7 +87,7 @@ namespace Bootstrapper
87 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 87 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
88 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 88 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
89 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 89 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
90 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 90 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
91 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 91 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
92 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 92 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
93 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 93 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -100,7 +100,7 @@ namespace Bootstrapper
100 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageB"); 100 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageB");
101 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 101 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
102 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER); 102 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER);
103 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 103 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
104 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 104 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
105 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 105 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
106 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 106 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -109,7 +109,7 @@ namespace Bootstrapper
109 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageC"); 109 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageC");
110 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 110 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
111 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER); 111 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER);
112 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 112 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
113 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 113 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
114 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 114 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
115 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 115 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -126,7 +126,7 @@ namespace Bootstrapper
126 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 126 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
127 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 127 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
128 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 128 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
129 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 129 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
130 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 130 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
131 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 131 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
132 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 132 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -209,13 +209,13 @@ namespace Bootstrapper
209 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 209 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
210 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 210 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
211 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER); 211 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER);
212 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 212 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
213 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 213 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
214 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 214 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
215 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 215 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
216 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 216 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
217 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER); 217 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER);
218 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 218 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
219 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 219 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
220 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 220 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
221 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 221 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -225,7 +225,7 @@ namespace Bootstrapper
225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
226 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 226 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
227 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 227 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
228 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 228 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
229 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 229 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
230 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 230 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
231 Assert::Equal(dwIndex, pPlan->cExecuteActions); 231 Assert::Equal(dwIndex, pPlan->cExecuteActions);
@@ -251,7 +251,7 @@ namespace Bootstrapper
251 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 251 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
252 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 252 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
253 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 253 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
254 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 254 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
255 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 255 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
256 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 256 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
257 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 257 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -325,7 +325,7 @@ namespace Bootstrapper
325 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 325 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
326 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 326 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
327 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 327 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
328 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 328 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
329 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 329 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
330 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 330 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
331 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 331 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -340,7 +340,7 @@ namespace Bootstrapper
340 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 340 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
341 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 341 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
342 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 342 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
343 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 343 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
344 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 344 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
345 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 345 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
346 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 346 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -478,7 +478,7 @@ namespace Bootstrapper
478 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 478 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
479 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 479 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
480 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 480 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
481 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 481 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
482 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 482 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
483 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 483 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
484 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 484 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -494,7 +494,7 @@ namespace Bootstrapper
494 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 494 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
495 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 495 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
496 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 496 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
497 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 497 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
498 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 498 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
499 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 499 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
500 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 500 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -615,7 +615,7 @@ namespace Bootstrapper
615 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 615 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
616 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 616 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
617 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 617 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
618 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 618 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
619 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 619 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
620 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 620 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
621 Assert::Equal(dwIndex, pPlan->cExecuteActions); 621 Assert::Equal(dwIndex, pPlan->cExecuteActions);
@@ -628,7 +628,7 @@ namespace Bootstrapper
628 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 628 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
629 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 629 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
630 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 630 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
631 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 631 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
632 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 632 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
633 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 633 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
634 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 634 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -768,13 +768,13 @@ namespace Bootstrapper
768 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 768 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
769 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 769 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
770 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 770 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
771 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 771 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
772 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 772 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
773 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 773 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
774 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 774 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
775 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 775 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
776 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); 776 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER);
777 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); 777 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
778 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 778 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
779 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 779 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
780 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 780 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -793,14 +793,14 @@ namespace Bootstrapper
793 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 793 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
794 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 794 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
795 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 795 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
796 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 796 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
797 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 797 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
798 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 798 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
799 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 799 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
800 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 800 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
801 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); 801 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER);
802 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 802 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
803 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); 803 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
804 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 804 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
805 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 805 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
806 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 806 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -862,7 +862,7 @@ namespace Bootstrapper
862 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 862 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
863 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 863 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
864 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); 864 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER);
865 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); 865 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
866 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 866 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
867 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 867 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
868 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 868 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -870,7 +870,7 @@ namespace Bootstrapper
870 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 870 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
871 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 871 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
872 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 872 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
873 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 873 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
874 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 874 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
875 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 875 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
876 Assert::Equal(dwIndex, pPlan->cExecuteActions); 876 Assert::Equal(dwIndex, pPlan->cExecuteActions);
@@ -883,14 +883,14 @@ namespace Bootstrapper
883 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 883 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
884 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); 884 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER);
885 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 885 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
886 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); 886 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
887 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 887 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
888 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 888 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
889 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 889 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
890 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 890 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
891 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 891 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
892 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 892 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
893 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 893 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
894 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 894 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
895 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 895 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
896 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 896 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -1312,6 +1312,7 @@ namespace Bootstrapper
1312 __in BURN_MSI_PROPERTY actionMsiProperty, 1312 __in BURN_MSI_PROPERTY actionMsiProperty,
1313 __in DWORD uiLevel, 1313 __in DWORD uiLevel,
1314 __in BOOL fDisableExternalUiHandler, 1314 __in BOOL fDisableExternalUiHandler,
1315 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning,
1315 __in DWORD dwLoggingAttributes 1316 __in DWORD dwLoggingAttributes
1316 ) 1317 )
1317 { 1318 {
@@ -1322,6 +1323,7 @@ namespace Bootstrapper
1322 Assert::Equal<DWORD>(actionMsiProperty, pAction->msiPackage.actionMsiProperty); 1323 Assert::Equal<DWORD>(actionMsiProperty, pAction->msiPackage.actionMsiProperty);
1323 Assert::Equal<DWORD>(uiLevel, pAction->msiPackage.uiLevel); 1324 Assert::Equal<DWORD>(uiLevel, pAction->msiPackage.uiLevel);
1324 Assert::Equal<BOOL>(fDisableExternalUiHandler, pAction->msiPackage.fDisableExternalUiHandler); 1325 Assert::Equal<BOOL>(fDisableExternalUiHandler, pAction->msiPackage.fDisableExternalUiHandler);
1326 Assert::Equal<DWORD>(fileVersioning, pAction->msiPackage.fileVersioning);
1325 NativeAssert::NotNull(pAction->msiPackage.sczLogPath); 1327 NativeAssert::NotNull(pAction->msiPackage.sczLogPath);
1326 Assert::Equal<DWORD>(dwLoggingAttributes, pAction->msiPackage.dwLoggingAttributes); 1328 Assert::Equal<DWORD>(dwLoggingAttributes, pAction->msiPackage.dwLoggingAttributes);
1327 Assert::Equal<BOOL>(FALSE, pAction->fDeleted); 1329 Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
@@ -1338,6 +1340,7 @@ namespace Bootstrapper
1338 __in BURN_MSI_PROPERTY actionMsiProperty, 1340 __in BURN_MSI_PROPERTY actionMsiProperty,
1339 __in DWORD uiLevel, 1341 __in DWORD uiLevel,
1340 __in BOOL fDisableExternalUiHandler, 1342 __in BOOL fDisableExternalUiHandler,
1343 __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning,
1341 __in BOOL fDeleted 1344 __in BOOL fDeleted
1342 ) 1345 )
1343 { 1346 {
@@ -1350,6 +1353,7 @@ namespace Bootstrapper
1350 Assert::Equal<DWORD>(actionMsiProperty, pAction->mspTarget.actionMsiProperty); 1353 Assert::Equal<DWORD>(actionMsiProperty, pAction->mspTarget.actionMsiProperty);
1351 Assert::Equal<DWORD>(uiLevel, pAction->mspTarget.uiLevel); 1354 Assert::Equal<DWORD>(uiLevel, pAction->mspTarget.uiLevel);
1352 Assert::Equal<BOOL>(fDisableExternalUiHandler, pAction->mspTarget.fDisableExternalUiHandler); 1355 Assert::Equal<BOOL>(fDisableExternalUiHandler, pAction->mspTarget.fDisableExternalUiHandler);
1356 Assert::Equal<DWORD>(fileVersioning, pAction->mspTarget.fileVersioning);
1353 NativeAssert::NotNull(pAction->mspTarget.sczLogPath); 1357 NativeAssert::NotNull(pAction->mspTarget.sczLogPath);
1354 Assert::Equal<BOOL>(fDeleted, pAction->fDeleted); 1358 Assert::Equal<BOOL>(fDeleted, pAction->fDeleted);
1355 return pAction; 1359 return pAction;
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
index 6a8bb2b8..abf5af83 100644
--- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
@@ -462,10 +462,12 @@ public: // IBootstrapperApplication
462 __in_z LPCWSTR wzPackageId, 462 __in_z LPCWSTR wzPackageId,
463 __in BOOL fExecute, 463 __in BOOL fExecute,
464 __in BOOTSTRAPPER_ACTION_STATE action, 464 __in BOOTSTRAPPER_ACTION_STATE action,
465 __in BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning,
465 __inout BOOL* pfCancel, 466 __inout BOOL* pfCancel,
466 __inout BURN_MSI_PROPERTY* pActionMsiProperty, 467 __inout BURN_MSI_PROPERTY* pActionMsiProperty,
467 __inout INSTALLUILEVEL* pUiLevel, 468 __inout INSTALLUILEVEL* pUiLevel,
468 __inout BOOL* pfDisableExternalUiHandler 469 __inout BOOL* pfDisableExternalUiHandler,
470 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
469 ) 471 )
470 { 472 {
471 HRESULT hr = S_OK; 473 HRESULT hr = S_OK;
@@ -501,7 +503,7 @@ public: // IBootstrapperApplication
501 } 503 }
502 504
503 LExit: 505 LExit:
504 return __super::OnPlanMsiPackage(wzPackageId, fExecute, action, pfCancel, pActionMsiProperty, pUiLevel, pfDisableExternalUiHandler); 506 return __super::OnPlanMsiPackage(wzPackageId, fExecute, action, recommendedFileVersioning, pfCancel, pActionMsiProperty, pUiLevel, pfDisableExternalUiHandler, pFileVersioning);
505 } 507 }
506 508
507 509