aboutsummaryrefslogtreecommitdiff
path: root/src/api/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-12-07 17:34:09 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-12-08 17:14:11 -0600
commit19d85eed389fbd964f64c2fbb85e40ec20439d26 (patch)
tree29adf2c191ea8a50153238ee457ff34f0d73d059 /src/api/burn
parent5c7b1a8fa2b02ddd758c0c267f59b7e77b527f62 (diff)
downloadwix-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')
-rw-r--r--src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h9
-rw-r--r--src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs5
-rw-r--r--src/api/burn/WixToolset.Mba.Core/EventArgs.cs14
-rw-r--r--src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs31
-rw-r--r--src/api/burn/balutil/inc/BalBaseBAFunctions.h4
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h4
-rw-r--r--src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h2
-rw-r--r--src/api/burn/balutil/inc/IBootstrapperApplication.h4
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
118enum BOOTSTRAPPER_MSI_FILE_VERSIONING
119{
120 BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, //o
121 BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER_OR_EQUAL, //e
122 BOOTSTRAPPER_MSI_FILE_VERSIONING_ALL, //a
123};
124
118enum BOOTSTRAPPER_APPLICATION_MESSAGE 125enum BOOTSTRAPPER_APPLICATION_MESSAGE
119{ 126{
120 BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTBEGIN, 127 BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTBEGIN,
@@ -1058,6 +1065,7 @@ struct BA_ONPLANMSIPACKAGE_ARGS
1058 LPCWSTR wzPackageId; 1065 LPCWSTR wzPackageId;
1059 BOOL fExecute; // false means rollback. 1066 BOOL fExecute; // false means rollback.
1060 BOOTSTRAPPER_ACTION_STATE action; 1067 BOOTSTRAPPER_ACTION_STATE action;
1068 BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning;
1061}; 1069};
1062 1070
1063struct BA_ONPLANMSIPACKAGE_RESULTS 1071struct BA_ONPLANMSIPACKAGE_RESULTS
@@ -1067,6 +1075,7 @@ struct BA_ONPLANMSIPACKAGE_RESULTS
1067 BURN_MSI_PROPERTY actionMsiProperty; 1075 BURN_MSI_PROPERTY actionMsiProperty;
1068 INSTALLUILEVEL uiLevel; 1076 INSTALLUILEVEL uiLevel;
1069 BOOL fDisableExternalUiHandler; 1077 BOOL fDisableExternalUiHandler;
1078 BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning;
1070}; 1079};
1071 1080
1072struct BA_ONPLANNEDPACKAGE_ARGS 1081struct BA_ONPLANNEDPACKAGE_ARGS
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
index b6fdca1e..0520463f 100644
--- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs
@@ -1433,15 +1433,16 @@ namespace WixToolset.Mba.Core
1433 return args.HResult; 1433 return args.HResult;
1434 } 1434 }
1435 1435
1436 int IBootstrapperApplication.OnPlanMsiPackage(string wzPackageId, bool fExecute, ActionState action, ref bool fCancel, ref BURN_MSI_PROPERTY actionMsiProperty, ref INSTALLUILEVEL uiLevel, ref bool fDisableExternalUiHandler) 1436 int IBootstrapperApplication.OnPlanMsiPackage(string wzPackageId, bool fExecute, ActionState action, BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning, ref bool fCancel, ref BURN_MSI_PROPERTY actionMsiProperty, ref INSTALLUILEVEL uiLevel, ref bool fDisableExternalUiHandler, ref BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning)
1437 { 1437 {
1438 PlanMsiPackageEventArgs args = new PlanMsiPackageEventArgs(wzPackageId, fExecute, action, fCancel, actionMsiProperty, uiLevel, fDisableExternalUiHandler); 1438 PlanMsiPackageEventArgs args = new PlanMsiPackageEventArgs(wzPackageId, fExecute, action, recommendedFileVersioning, fCancel, actionMsiProperty, uiLevel, fDisableExternalUiHandler, fileVersioning);
1439 this.OnPlanMsiPackage(args); 1439 this.OnPlanMsiPackage(args);
1440 1440
1441 fCancel = args.Cancel; 1441 fCancel = args.Cancel;
1442 actionMsiProperty = args.ActionMsiProperty; 1442 actionMsiProperty = args.ActionMsiProperty;
1443 uiLevel = args.UiLevel; 1443 uiLevel = args.UiLevel;
1444 fDisableExternalUiHandler = args.DisableExternalUiHandler; 1444 fDisableExternalUiHandler = args.DisableExternalUiHandler;
1445 fileVersioning = args.FileVersioning;
1445 return args.HResult; 1446 return args.HResult;
1446 } 1447 }
1447 1448
diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
index 04e7b579..556db821 100644
--- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
+++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs
@@ -902,15 +902,17 @@ namespace WixToolset.Mba.Core
902 public class PlanMsiPackageEventArgs : CancellableHResultEventArgs 902 public class PlanMsiPackageEventArgs : CancellableHResultEventArgs
903 { 903 {
904 /// <summary /> 904 /// <summary />
905 public PlanMsiPackageEventArgs(string packageId, bool shouldExecute, ActionState action, bool cancelRecommendation, BURN_MSI_PROPERTY actionMsiProperty, INSTALLUILEVEL uiLevel, bool disableExternalUiHandler) 905 public PlanMsiPackageEventArgs(string packageId, bool shouldExecute, ActionState action, BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning, bool cancelRecommendation, BURN_MSI_PROPERTY actionMsiProperty, INSTALLUILEVEL uiLevel, bool disableExternalUiHandler, BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning)
906 : base(cancelRecommendation) 906 : base(cancelRecommendation)
907 { 907 {
908 this.PackageId = packageId; 908 this.PackageId = packageId;
909 this.ShouldExecute = shouldExecute; 909 this.ShouldExecute = shouldExecute;
910 this.Action = action; 910 this.Action = action;
911 this.RecommendedFileVersioning = recommendedFileVersioning;
911 this.ActionMsiProperty = actionMsiProperty; 912 this.ActionMsiProperty = actionMsiProperty;
912 this.UiLevel = uiLevel; 913 this.UiLevel = uiLevel;
913 this.DisableExternalUiHandler = disableExternalUiHandler; 914 this.DisableExternalUiHandler = disableExternalUiHandler;
915 this.FileVersioning = fileVersioning;
914 } 916 }
915 917
916 /// <summary> 918 /// <summary>
@@ -929,6 +931,11 @@ namespace WixToolset.Mba.Core
929 public ActionState Action { get; private set; } 931 public ActionState Action { get; private set; }
930 932
931 /// <summary> 933 /// <summary>
934 /// Gets the recommended file versioning for the package.
935 /// </summary>
936 public BOOTSTRAPPER_MSI_FILE_VERSIONING RecommendedFileVersioning { get; private set; }
937
938 /// <summary>
932 /// Gets or sets the requested MSI property to add. 939 /// Gets or sets the requested MSI property to add.
933 /// </summary> 940 /// </summary>
934 public BURN_MSI_PROPERTY ActionMsiProperty { get; set; } 941 public BURN_MSI_PROPERTY ActionMsiProperty { get; set; }
@@ -942,6 +949,11 @@ namespace WixToolset.Mba.Core
942 /// Gets or sets whether Burn is requested to set up an external UI handler. 949 /// Gets or sets whether Burn is requested to set up an external UI handler.
943 /// </summary> 950 /// </summary>
944 public bool DisableExternalUiHandler { get; set; } 951 public bool DisableExternalUiHandler { get; set; }
952
953 /// <summary>
954 /// Gets or sets the requested file versioning.
955 /// </summary>
956 public BOOTSTRAPPER_MSI_FILE_VERSIONING FileVersioning { get; set; }
945 } 957 }
946 958
947 /// <summary> 959 /// <summary>
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
index 07c1a23b..259c407f 100644
--- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
+++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs
@@ -373,24 +373,18 @@ namespace WixToolset.Mba.Core
373 /// <summary> 373 /// <summary>
374 /// See <see cref="IDefaultBootstrapperApplication.PlanMsiPackage"/>. 374 /// See <see cref="IDefaultBootstrapperApplication.PlanMsiPackage"/>.
375 /// </summary> 375 /// </summary>
376 /// <param name="wzPackageId"></param>
377 /// <param name="fExecute"></param>
378 /// <param name="action"></param>
379 /// <param name="fCancel"></param>
380 /// <param name="actionMsiProperty"></param>
381 /// <param name="uiLevel"></param>
382 /// <param name="fDisableExternalUiHandler"></param>
383 /// <returns></returns>
384 [PreserveSig] 376 [PreserveSig]
385 [return: MarshalAs(UnmanagedType.I4)] 377 [return: MarshalAs(UnmanagedType.I4)]
386 int OnPlanMsiPackage( 378 int OnPlanMsiPackage(
387 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, 379 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId,
388 [MarshalAs(UnmanagedType.Bool)] bool fExecute, 380 [MarshalAs(UnmanagedType.Bool)] bool fExecute,
389 [MarshalAs(UnmanagedType.U4)] ActionState action, 381 [MarshalAs(UnmanagedType.U4)] ActionState action,
382 [MarshalAs(UnmanagedType.U4)] BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning,
390 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, 383 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel,
391 [MarshalAs(UnmanagedType.U4)] ref BURN_MSI_PROPERTY actionMsiProperty, 384 [MarshalAs(UnmanagedType.U4)] ref BURN_MSI_PROPERTY actionMsiProperty,
392 [MarshalAs(UnmanagedType.U4)] ref INSTALLUILEVEL uiLevel, 385 [MarshalAs(UnmanagedType.U4)] ref INSTALLUILEVEL uiLevel,
393 [MarshalAs(UnmanagedType.Bool)] ref bool fDisableExternalUiHandler 386 [MarshalAs(UnmanagedType.Bool)] ref bool fDisableExternalUiHandler,
387 [MarshalAs(UnmanagedType.U4)] ref BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning
394 ); 388 );
395 389
396 /// <summary> 390 /// <summary>
@@ -1852,6 +1846,25 @@ namespace WixToolset.Mba.Core
1852 } 1846 }
1853 1847
1854 /// <summary> 1848 /// <summary>
1849 /// The file versioning options for REINSTALLMODE, see https://docs.microsoft.com/en-us/windows/win32/msi/reinstallmode.
1850 /// </summary>
1851 public enum BOOTSTRAPPER_MSI_FILE_VERSIONING
1852 {
1853 /// <summary>
1854 /// o
1855 /// </summary>
1856 Older,
1857 /// <summary>
1858 /// e
1859 /// </summary>
1860 Equal,
1861 /// <summary>
1862 /// a
1863 /// </summary>
1864 All,
1865 }
1866
1867 /// <summary>
1855 /// The property Burn will add so the MSI can know the planned action for the package. 1868 /// The property Burn will add so the MSI can know the planned action for the package.
1856 /// </summary> 1869 /// </summary>
1857 public enum BURN_MSI_PROPERTY 1870 public enum BURN_MSI_PROPERTY
diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
index 2866f6b0..e45db2dc 100644
--- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h
+++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h
@@ -303,10 +303,12 @@ public: // IBootstrapperApplication
303 __in_z LPCWSTR /*wzPackageId*/, 303 __in_z LPCWSTR /*wzPackageId*/,
304 __in BOOL /*fExecute*/, 304 __in BOOL /*fExecute*/,
305 __in BOOTSTRAPPER_ACTION_STATE /*action*/, 305 __in BOOTSTRAPPER_ACTION_STATE /*action*/,
306 __in BOOTSTRAPPER_MSI_FILE_VERSIONING /*recommendedFileVersioning*/,
306 __inout BOOL* /*pfCancel*/, 307 __inout BOOL* /*pfCancel*/,
307 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/, 308 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/,
308 __inout INSTALLUILEVEL* /*pUiLevel*/, 309 __inout INSTALLUILEVEL* /*pUiLevel*/,
309 __inout BOOL* /*pfDisableExternalUiHandler*/ 310 __inout BOOL* /*pfDisableExternalUiHandler*/,
311 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* /*pFileVersioning*/
310 ) 312 )
311 { 313 {
312 return S_OK; 314 return S_OK;
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
index 4c07ba89..c10b662c 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h
@@ -319,10 +319,12 @@ public: // IBootstrapperApplication
319 __in_z LPCWSTR /*wzPackageId*/, 319 __in_z LPCWSTR /*wzPackageId*/,
320 __in BOOL /*fExecute*/, 320 __in BOOL /*fExecute*/,
321 __in BOOTSTRAPPER_ACTION_STATE /*action*/, 321 __in BOOTSTRAPPER_ACTION_STATE /*action*/,
322 __in BOOTSTRAPPER_MSI_FILE_VERSIONING /*recommendedFileVersioning*/,
322 __inout BOOL* pfCancel, 323 __inout BOOL* pfCancel,
323 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/, 324 __inout BURN_MSI_PROPERTY* /*pActionMsiProperty*/,
324 __inout INSTALLUILEVEL* /*pUiLevel*/, 325 __inout INSTALLUILEVEL* /*pUiLevel*/,
325 __inout BOOL* /*pfDisableExternalUiHandler*/ 326 __inout BOOL* /*pfDisableExternalUiHandler*/,
327 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* /*pFileVersioning*/
326 ) 328 )
327 { 329 {
328 *pfCancel |= CheckCanceled(); 330 *pfCancel |= CheckCanceled();
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
index d536729f..f17e1fcb 100644
--- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
+++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -510,7 +510,7 @@ static HRESULT BalBaseBAProcOnPlanMsiPackage(
510 __inout BA_ONPLANMSIPACKAGE_RESULTS* pResults 510 __inout BA_ONPLANMSIPACKAGE_RESULTS* pResults
511 ) 511 )
512{ 512{
513 return pBA->OnPlanMsiPackage(pArgs->wzPackageId, pArgs->fExecute, pArgs->action, &pResults->fCancel, &pResults->actionMsiProperty, &pResults->uiLevel, &pResults->fDisableExternalUiHandler); 513 return pBA->OnPlanMsiPackage(pArgs->wzPackageId, pArgs->fExecute, pArgs->action, pArgs->recommendedFileVersioning, &pResults->fCancel, &pResults->actionMsiProperty, &pResults->uiLevel, &pResults->fDisableExternalUiHandler, &pResults->fileVersioning);
514} 514}
515 515
516static HRESULT BalBaseBAProcOnBeginMsiTransactionBegin( 516static HRESULT BalBaseBAProcOnBeginMsiTransactionBegin(
diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h
index 51f58ec7..1fc99988 100644
--- a/src/api/burn/balutil/inc/IBootstrapperApplication.h
+++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h
@@ -208,10 +208,12 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
208 __in_z LPCWSTR wzPackageId, 208 __in_z LPCWSTR wzPackageId,
209 __in BOOL fExecute, // false means rollback. 209 __in BOOL fExecute, // false means rollback.
210 __in BOOTSTRAPPER_ACTION_STATE action, 210 __in BOOTSTRAPPER_ACTION_STATE action,
211 __in BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning,
211 __inout BOOL* pfCancel, 212 __inout BOOL* pfCancel,
212 __inout BURN_MSI_PROPERTY* pActionMsiProperty, 213 __inout BURN_MSI_PROPERTY* pActionMsiProperty,
213 __inout INSTALLUILEVEL* pUiLevel, 214 __inout INSTALLUILEVEL* pUiLevel,
214 __inout BOOL* pfDisableExternalUiHandler 215 __inout BOOL* pfDisableExternalUiHandler,
216 __inout BOOTSTRAPPER_MSI_FILE_VERSIONING* pFileVersioning
215 ) = 0; 217 ) = 0;
216 218
217 // OnPlanPackageComplete - called after the engine has completed getting the BA's input 219 // OnPlanPackageComplete - called after the engine has completed getting the BA's input