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 | |
| 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')
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 |
