diff options
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 | ||
118 | enum 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 | |||
118 | enum BOOTSTRAPPER_APPLICATION_MESSAGE | 125 | enum 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 | ||
1063 | struct BA_ONPLANMSIPACKAGE_RESULTS | 1071 | struct 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 | ||
1072 | struct BA_ONPLANNEDPACKAGE_ARGS | 1081 | struct 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 | ||
516 | static HRESULT BalBaseBAProcOnBeginMsiTransactionBegin( | 516 | static 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 | ||
483 | extern "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 | |||
483 | extern "C" LPCSTR LoggingMsiFeatureStateToString( | 500 | extern "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 | ||
109 | LPCSTR LoggingMsiFileVersioningToString( | ||
110 | __in BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning | ||
111 | ); | ||
112 | |||
109 | LPCSTR LoggingMsiFeatureStateToString( | 113 | LPCSTR 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 | ||
1286 | extern "C" HRESULT MsiEngineConcatActionProperty( | 1252 | extern "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 | |||
1316 | LExit: | 1359 | LExit: |
1317 | return hr; | 1360 | return hr; |
1318 | } | 1361 | } |
1319 | 1362 | ||
1320 | extern "C" HRESULT MsiEngineConcatProperties( | 1363 | extern "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 | ||
1382 | extern "C" HRESULT MsiEngineCalculateInstallUiLevel( | 1425 | extern "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 | ||
1421 | extern "C" void MsiEngineUpdateInstallRegistrationState( | 1467 | extern "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 | ); |
73 | HRESULT MsiEngineConcatActionProperty( | 73 | HRESULT 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 | ); |
77 | HRESULT MsiEngineConcatProperties( | 81 | HRESULT 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 | ); |
85 | HRESULT MsiEngineCalculateInstallUiLevel( | 89 | HRESULT 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 | ); |
95 | void MsiEngineUpdateInstallRegistrationState( | 100 | void 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 | ||
1927 | LExit: | 1931 | LExit: |
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 | ); |
445 | BAAPI UserExperienceOnPlannedPackage( | 446 | BAAPI 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 | ||