From 0042e3d4554a0d92e1da6141854b0f1aafa07d5b Mon Sep 17 00:00:00 2001 From: Nir Bar <nir.bar@panel-sw.co.il> Date: Wed, 11 Aug 2021 15:37:34 -0500 Subject: Allow BA to opt out of MSI transaction. --- .../WixToolset.Mba.Core/BootstrapperApplication.cs | 25 ++++++++++++++++ src/api/burn/WixToolset.Mba.Core/EventArgs.cs | 33 ++++++++++++++++++++++ .../IBootstrapperApplication.cs | 12 ++++++++ .../IDefaultBootstrapperApplication.cs | 5 ++++ 4 files changed, 75 insertions(+) (limited to 'src/api/burn/WixToolset.Mba.Core') diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs index d7dbf04c..b6fdca1e 100644 --- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs @@ -85,6 +85,9 @@ namespace WixToolset.Mba.Core /// <inheritdoc/> public event EventHandler<PlanRelatedBundleEventArgs> PlanRelatedBundle; + /// <inheritdoc/> + public event EventHandler<PlanRollbackBoundaryEventArgs> PlanRollbackBoundary; + /// <inheritdoc/> public event EventHandler<PlanPackageBeginEventArgs> PlanPackageBegin; @@ -496,6 +499,18 @@ namespace WixToolset.Mba.Core } } + /// <summary> + /// Called by the engine, raises the <see cref="PlanRollbackBoundary"/> event. + /// </summary> + protected virtual void OnPlanRollbackBoundary(PlanRollbackBoundaryEventArgs args) + { + EventHandler<PlanRollbackBoundaryEventArgs> handler = this.PlanRollbackBoundary; + if (null != handler) + { + handler(this, args); + } + } + /// <summary> /// Called by the engine, raises the <see cref="PlanPackageBegin"/> event. /// </summary> @@ -1378,6 +1393,16 @@ namespace WixToolset.Mba.Core return args.HResult; } + int IBootstrapperApplication.OnPlanRollbackBoundary(string wzRollbackBoundaryId, bool fRecommendedTransaction, ref bool fTransaction, ref bool fCancel) + { + PlanRollbackBoundaryEventArgs args = new PlanRollbackBoundaryEventArgs(wzRollbackBoundaryId, fRecommendedTransaction, fTransaction, fCancel); + this.OnPlanRollbackBoundary(args); + + fTransaction = args.Transaction; + fCancel = args.Cancel; + return args.HResult; + } + int IBootstrapperApplication.OnPlanPackageBegin(string wzPackageId, PackageState state, bool fCached, BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition, RequestState recommendedState, BOOTSTRAPPER_CACHE_TYPE recommendedCacheType, ref RequestState pRequestedState, ref BOOTSTRAPPER_CACHE_TYPE pRequestedCacheType, ref bool fCancel) { PlanPackageBeginEventArgs args = new PlanPackageBeginEventArgs(wzPackageId, state, fCached, installCondition, recommendedState, recommendedCacheType, pRequestedState, pRequestedCacheType, fCancel); diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs index 00d90c83..04e7b579 100644 --- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs +++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs @@ -781,6 +781,39 @@ namespace WixToolset.Mba.Core public BOOTSTRAPPER_CACHE_TYPE CacheType { get; set; } } + /// <summary> + /// Event arguments for <see cref="IDefaultBootstrapperApplication.PlanRollbackBoundary"/> + /// </summary> + [Serializable] + public class PlanRollbackBoundaryEventArgs : CancellableHResultEventArgs + { + /// <summary /> + public PlanRollbackBoundaryEventArgs(string rollbackBoundaryId, bool recommendedTransaction, bool transaction, bool cancelRecommendation) + : base(cancelRecommendation) + { + this.RollbackBoundaryId = rollbackBoundaryId; + this.RecommendedTransaction = recommendedTransaction; + this.Transaction = transaction; + } + + /// <summary> + /// Gets the identity of the rollback boundary to plan for. + /// </summary> + public string RollbackBoundaryId { get; private set; } + + /// <summary> + /// Whether or not the rollback boundary was authored to use an MSI transaction. + /// </summary> + public bool RecommendedTransaction { get; private set; } + + /// <summary> + /// Whether or not an MSI transaction will be used in the rollback boundary. + /// If <see cref="RecommendedTransaction"/> is false, setting the value to true has no effect. + /// If <see cref="RecommendedTransaction"/> is true, setting the value to false will cause the packages inside this rollback boundary to be executed without a wrapping MSI transaction. + /// </summary> + public bool Transaction { get; set; } + } + /// <summary> /// Event arguments for <see cref="IDefaultBootstrapperApplication.PlanPatchTarget"/> /// </summary> diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs index e6e03906..07c1a23b 100644 --- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs @@ -303,6 +303,18 @@ namespace WixToolset.Mba.Core [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); + /// <summary> + /// See <see cref="IDefaultBootstrapperApplication.PlanRollbackBoundary"/>. + /// </summary> + [PreserveSig] + [return: MarshalAs(UnmanagedType.I4)] + int OnPlanRollbackBoundary( + [MarshalAs(UnmanagedType.LPWStr)] string wzRollbackBoundaryId, + [MarshalAs(UnmanagedType.Bool)] bool fRecommendedTransaction, + [MarshalAs(UnmanagedType.Bool)] ref bool fTransaction, + [MarshalAs(UnmanagedType.Bool)] ref bool fCancel + ); + /// <summary> /// See <see cref="IDefaultBootstrapperApplication.PlanPackageBegin"/>. /// </summary> diff --git a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs index a295f6c0..20ce9f88 100644 --- a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs @@ -313,6 +313,11 @@ namespace WixToolset.Mba.Core /// </summary> event EventHandler<PlanRelatedBundleEventArgs> PlanRelatedBundle; + /// <summary> + /// Fired when the engine is planning a rollback boundary. + /// </summary> + event EventHandler<PlanRollbackBoundaryEventArgs> PlanRollbackBoundary; + /// <summary> /// Fired when the engine has changed progress for the bundle installation. /// </summary> -- cgit v1.2.3-55-g6feb