diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-12-07 17:34:09 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-12-08 17:14:11 -0600 |
commit | 19d85eed389fbd964f64c2fbb85e40ec20439d26 (patch) | |
tree | 29adf2c191ea8a50153238ee457ff34f0d73d059 /src/api/burn | |
parent | 5c7b1a8fa2b02ddd758c0c267f59b7e77b527f62 (diff) | |
download | wix-19d85eed389fbd964f64c2fbb85e40ec20439d26.tar.gz wix-19d85eed389fbd964f64c2fbb85e40ec20439d26.tar.bz2 wix-19d85eed389fbd964f64c2fbb85e40ec20439d26.zip |
Add ability to customize file versioning rules for MsiPackage and MspPackage.
Fixes #5911
Diffstat (limited to 'src/api/burn')
8 files changed, 57 insertions, 16 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 |