diff options
| author | Rob Mensching <rob@firegiant.com> | 2024-01-11 18:26:20 -0800 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2024-03-06 18:03:38 -0800 |
| commit | 0d3d54992104288e9ee0c834d0b96e8502fd2d42 (patch) | |
| tree | 9efa49c4983cd2ba1becab64bd1f2faccac88acf /src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs | |
| parent | 2824298d9dd817a47527c920363556b54ead5d5d (diff) | |
| download | wix-0d3d54992104288e9ee0c834d0b96e8502fd2d42.tar.gz wix-0d3d54992104288e9ee0c834d0b96e8502fd2d42.tar.bz2 wix-0d3d54992104288e9ee0c834d0b96e8502fd2d42.zip | |
Move the BootstrapperApplication out of proc
Diffstat (limited to 'src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs')
| -rw-r--r-- | src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs | 149 |
1 files changed, 74 insertions, 75 deletions
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs index a0ec6ab9..98b34217 100644 --- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs | |||
| @@ -13,23 +13,15 @@ namespace WixToolset.Mba.Core | |||
| 13 | public abstract class BootstrapperApplication : MarshalByRefObject, IDefaultBootstrapperApplication | 13 | public abstract class BootstrapperApplication : MarshalByRefObject, IDefaultBootstrapperApplication |
| 14 | { | 14 | { |
| 15 | /// <summary> | 15 | /// <summary> |
| 16 | /// Specifies whether this bootstrapper should run asynchronously. The default is true. | ||
| 17 | /// </summary> | ||
| 18 | protected readonly bool asyncExecution; | ||
| 19 | |||
| 20 | /// <summary> | ||
| 21 | /// Gets the <see cref="IEngine"/> for interaction with the engine. | 16 | /// Gets the <see cref="IEngine"/> for interaction with the engine. |
| 22 | /// </summary> | 17 | /// </summary> |
| 23 | protected readonly IEngine engine; | 18 | protected IEngine engine; |
| 24 | 19 | ||
| 25 | /// <summary> | 20 | /// <inheritdoc/> |
| 26 | /// Creates a new instance of the <see cref="BootstrapperApplication"/> class. | 21 | public event EventHandler<CreateEventArgs> Create; |
| 27 | /// </summary> | 22 | |
| 28 | protected BootstrapperApplication(IEngine engine) | 23 | /// <inheritdoc/> |
| 29 | { | 24 | public event EventHandler<DestroyEventArgs> Destroy; |
| 30 | this.engine = engine; | ||
| 31 | this.asyncExecution = true; | ||
| 32 | } | ||
| 33 | 25 | ||
| 34 | /// <inheritdoc/> | 26 | /// <inheritdoc/> |
| 35 | public event EventHandler<StartupEventArgs> Startup; | 27 | public event EventHandler<StartupEventArgs> Startup; |
| @@ -266,12 +258,6 @@ namespace WixToolset.Mba.Core | |||
| 266 | public event EventHandler<CachePayloadExtractCompleteEventArgs> CachePayloadExtractComplete; | 258 | public event EventHandler<CachePayloadExtractCompleteEventArgs> CachePayloadExtractComplete; |
| 267 | 259 | ||
| 268 | /// <inheritdoc/> | 260 | /// <inheritdoc/> |
| 269 | public event EventHandler<SetUpdateBeginEventArgs> SetUpdateBegin; | ||
| 270 | |||
| 271 | /// <inheritdoc/> | ||
| 272 | public event EventHandler<SetUpdateCompleteEventArgs> SetUpdateComplete; | ||
| 273 | |||
| 274 | /// <inheritdoc/> | ||
| 275 | public event EventHandler<PlanRestoreRelatedBundleEventArgs> PlanRestoreRelatedBundle; | 261 | public event EventHandler<PlanRestoreRelatedBundleEventArgs> PlanRestoreRelatedBundle; |
| 276 | 262 | ||
| 277 | /// <inheritdoc/> | 263 | /// <inheritdoc/> |
| @@ -284,35 +270,73 @@ namespace WixToolset.Mba.Core | |||
| 284 | public event EventHandler<CachePackageNonVitalValidationFailureEventArgs> CachePackageNonVitalValidationFailure; | 270 | public event EventHandler<CachePackageNonVitalValidationFailureEventArgs> CachePackageNonVitalValidationFailure; |
| 285 | 271 | ||
| 286 | /// <summary> | 272 | /// <summary> |
| 273 | /// The default constructor. | ||
| 274 | /// </summary> | ||
| 275 | /// <remarks> | ||
| 276 | /// The engine object will be valid after handling the OnCreate() event. | ||
| 277 | /// </remarks> | ||
| 278 | protected BootstrapperApplication() | ||
| 279 | { | ||
| 280 | } | ||
| 281 | |||
| 282 | /// <summary> | ||
| 283 | /// This constructor is no longer used. | ||
| 284 | /// </summary> | ||
| 285 | [Obsolete("This constructor is no longer used. Use the default constructor. The engine object will be valid after handling the OnCreate() event.")] | ||
| 286 | protected BootstrapperApplication(IEngine engine) | ||
| 287 | { | ||
| 288 | throw new NotImplementedException("This constructor is no longer used. Use the default constructor. The engine object will be valid after handling the OnCreate() event."); | ||
| 289 | } | ||
| 290 | |||
| 291 | /// <summary> | ||
| 287 | /// Entry point that is called when the bootstrapper application is ready to run. | 292 | /// Entry point that is called when the bootstrapper application is ready to run. |
| 288 | /// </summary> | 293 | /// </summary> |
| 289 | protected abstract void Run(); | 294 | protected abstract void Run(); |
| 290 | 295 | ||
| 291 | /// <summary> | 296 | /// <summary> |
| 292 | /// Called by the engine, raises the <see cref="Startup"/> event. | 297 | /// Called by the engine, raises the <see cref="Create"/> event. |
| 293 | /// </summary> | 298 | /// </summary> |
| 294 | /// <param name="args">Additional arguments for this event.</param> | 299 | /// <param name="args">Additional arguments for this event.</param> |
| 295 | protected virtual void OnStartup(StartupEventArgs args) | 300 | protected virtual void OnCreate(CreateEventArgs args) |
| 296 | { | 301 | { |
| 297 | EventHandler<StartupEventArgs> handler = this.Startup; | 302 | this.engine = args.Engine; |
| 303 | |||
| 304 | EventHandler<CreateEventArgs> handler = this.Create; | ||
| 298 | if (null != handler) | 305 | if (null != handler) |
| 299 | { | 306 | { |
| 300 | handler(this, args); | 307 | handler(this, args); |
| 301 | } | 308 | } |
| 309 | } | ||
| 302 | 310 | ||
| 303 | if (this.asyncExecution) | 311 | /// <summary> |
| 312 | /// Called by the engine, raises the <see cref="Destroy"/> event. | ||
| 313 | /// </summary> | ||
| 314 | /// <param name="args">Additional arguments for this event.</param> | ||
| 315 | protected virtual void OnDestroy(DestroyEventArgs args) | ||
| 316 | { | ||
| 317 | EventHandler<DestroyEventArgs> handler = this.Destroy; | ||
| 318 | if (null != handler) | ||
| 304 | { | 319 | { |
| 305 | this.engine.Log(LogLevel.Verbose, "Creating BA thread to run asynchronously."); | 320 | handler(this, args); |
| 306 | Thread uiThread = new Thread(this.Run); | ||
| 307 | uiThread.Name = "UIThread"; | ||
| 308 | uiThread.SetApartmentState(ApartmentState.STA); | ||
| 309 | uiThread.Start(); | ||
| 310 | } | 321 | } |
| 311 | else | 322 | } |
| 323 | |||
| 324 | /// <summary> | ||
| 325 | /// Called by the engine, raises the <see cref="Startup"/> event. | ||
| 326 | /// </summary> | ||
| 327 | /// <param name="args">Additional arguments for this event.</param> | ||
| 328 | protected virtual void OnStartup(StartupEventArgs args) | ||
| 329 | { | ||
| 330 | EventHandler<StartupEventArgs> handler = this.Startup; | ||
| 331 | if (null != handler) | ||
| 312 | { | 332 | { |
| 313 | this.engine.Log(LogLevel.Verbose, "Creating BA thread to run synchronously."); | 333 | handler(this, args); |
| 314 | this.Run(); | ||
| 315 | } | 334 | } |
| 335 | |||
| 336 | Thread uiThread = new Thread(this.Run); | ||
| 337 | uiThread.Name = "UIThread"; | ||
| 338 | uiThread.SetApartmentState(ApartmentState.STA); | ||
| 339 | uiThread.Start(); | ||
| 316 | } | 340 | } |
| 317 | 341 | ||
| 318 | /// <summary> | 342 | /// <summary> |
| @@ -1315,31 +1339,6 @@ namespace WixToolset.Mba.Core | |||
| 1315 | } | 1339 | } |
| 1316 | } | 1340 | } |
| 1317 | 1341 | ||
| 1318 | /// <summary> | ||
| 1319 | /// Called by the engine, raises the <see cref="SetUpdateBegin"/> event. | ||
| 1320 | /// </summary> | ||
| 1321 | /// <param name="args">Additional arguments for this event.</param> | ||
| 1322 | protected virtual void OnSetUpdateBegin(SetUpdateBeginEventArgs args) | ||
| 1323 | { | ||
| 1324 | EventHandler<SetUpdateBeginEventArgs> handler = this.SetUpdateBegin; | ||
| 1325 | if (null != handler) | ||
| 1326 | { | ||
| 1327 | handler(this, args); | ||
| 1328 | } | ||
| 1329 | } | ||
| 1330 | |||
| 1331 | /// <summary> | ||
| 1332 | /// Called by the engine, raises the <see cref="SetUpdateComplete"/> event. | ||
| 1333 | /// </summary> | ||
| 1334 | /// <param name="args">Additional arguments for this event.</param> | ||
| 1335 | protected virtual void OnSetUpdateComplete(SetUpdateCompleteEventArgs args) | ||
| 1336 | { | ||
| 1337 | EventHandler<SetUpdateCompleteEventArgs> handler = this.SetUpdateComplete; | ||
| 1338 | if (null != handler) | ||
| 1339 | { | ||
| 1340 | handler(this, args); | ||
| 1341 | } | ||
| 1342 | } | ||
| 1343 | 1342 | ||
| 1344 | /// <summary> | 1343 | /// <summary> |
| 1345 | /// Called by the engine, raises the <see cref="PlanRestoreRelatedBundle"/> event. | 1344 | /// Called by the engine, raises the <see cref="PlanRestoreRelatedBundle"/> event. |
| @@ -1395,7 +1394,7 @@ namespace WixToolset.Mba.Core | |||
| 1395 | 1394 | ||
| 1396 | #region IBootstrapperApplication Members | 1395 | #region IBootstrapperApplication Members |
| 1397 | 1396 | ||
| 1398 | int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext) | 1397 | int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults) |
| 1399 | { | 1398 | { |
| 1400 | switch (message) | 1399 | switch (message) |
| 1401 | { | 1400 | { |
| @@ -1404,8 +1403,24 @@ namespace WixToolset.Mba.Core | |||
| 1404 | } | 1403 | } |
| 1405 | } | 1404 | } |
| 1406 | 1405 | ||
| 1407 | void IBootstrapperApplication.BAProcFallback(int message, IntPtr pvArgs, IntPtr pvResults, ref int phr, IntPtr pvContext) | 1406 | void IBootstrapperApplication.BAProcFallback(int message, IntPtr pvArgs, IntPtr pvResults, ref int phr) |
| 1407 | { | ||
| 1408 | } | ||
| 1409 | |||
| 1410 | int IBootstrapperApplication.OnCreate(IBootstrapperEngine engine, ref Command command) | ||
| 1408 | { | 1411 | { |
| 1412 | CreateEventArgs args = new CreateEventArgs(new Engine(engine), command.GetBootstrapperCommand()); | ||
| 1413 | this.OnCreate(args); | ||
| 1414 | |||
| 1415 | return args.HResult; | ||
| 1416 | } | ||
| 1417 | |||
| 1418 | int IBootstrapperApplication.OnDestroy(bool reload) | ||
| 1419 | { | ||
| 1420 | DestroyEventArgs args = new DestroyEventArgs(reload); | ||
| 1421 | this.OnDestroy(args); | ||
| 1422 | |||
| 1423 | return args.HResult; | ||
| 1409 | } | 1424 | } |
| 1410 | 1425 | ||
| 1411 | int IBootstrapperApplication.OnStartup() | 1426 | int IBootstrapperApplication.OnStartup() |
| @@ -2107,22 +2122,6 @@ namespace WixToolset.Mba.Core | |||
| 2107 | return args.HResult; | 2122 | return args.HResult; |
| 2108 | } | 2123 | } |
| 2109 | 2124 | ||
| 2110 | int IBootstrapperApplication.OnSetUpdateBegin() | ||
| 2111 | { | ||
| 2112 | SetUpdateBeginEventArgs args = new SetUpdateBeginEventArgs(); | ||
| 2113 | this.OnSetUpdateBegin(args); | ||
| 2114 | |||
| 2115 | return args.HResult; | ||
| 2116 | } | ||
| 2117 | |||
| 2118 | int IBootstrapperApplication.OnSetUpdateComplete(int hrStatus, string wzPreviousPackageId, string wzNewPackageId) | ||
| 2119 | { | ||
| 2120 | SetUpdateCompleteEventArgs args = new SetUpdateCompleteEventArgs(hrStatus, wzPreviousPackageId, wzNewPackageId); | ||
| 2121 | this.OnSetUpdateComplete(args); | ||
| 2122 | |||
| 2123 | return args.HResult; | ||
| 2124 | } | ||
| 2125 | |||
| 2126 | int IBootstrapperApplication.OnPlanRestoreRelatedBundle(string wzBundleId, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) | 2125 | int IBootstrapperApplication.OnPlanRestoreRelatedBundle(string wzBundleId, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) |
| 2127 | { | 2126 | { |
| 2128 | PlanRestoreRelatedBundleEventArgs args = new PlanRestoreRelatedBundleEventArgs(wzBundleId, recommendedState, pRequestedState, fCancel); | 2127 | PlanRestoreRelatedBundleEventArgs args = new PlanRestoreRelatedBundleEventArgs(wzBundleId, recommendedState, pRequestedState, fCancel); |
