// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. namespace WixToolset.Mba.Core { using System; using System.Runtime.InteropServices; using System.Threading; /// /// The default bootstrapper application. /// [ClassInterface(ClassInterfaceType.None)] public abstract class BootstrapperApplication : MarshalByRefObject, IDefaultBootstrapperApplication { /// /// Specifies whether this bootstrapper should run asynchronously. The default is true. /// protected readonly bool asyncExecution; /// /// Gets the for interaction with the engine. /// protected readonly IEngine engine; private bool applying; /// /// Creates a new instance of the class. /// protected BootstrapperApplication(IEngine engine) { this.engine = engine; this.applying = false; this.asyncExecution = true; } /// public event EventHandler Startup; /// public event EventHandler Shutdown; /// public event EventHandler SystemShutdown; /// public event EventHandler DetectBegin; /// public event EventHandler DetectForwardCompatibleBundle; /// public event EventHandler DetectUpdateBegin; /// public event EventHandler DetectUpdate; /// public event EventHandler DetectUpdateComplete; /// public event EventHandler DetectRelatedBundle; /// public event EventHandler DetectPackageBegin; /// public event EventHandler DetectCompatibleMsiPackage; /// public event EventHandler DetectRelatedMsiPackage; /// public event EventHandler DetectPatchTarget; /// public event EventHandler DetectMsiFeature; /// public event EventHandler DetectPackageComplete; /// public event EventHandler DetectComplete; /// public event EventHandler PlanBegin; /// public event EventHandler PlanRelatedBundle; /// public event EventHandler PlanRollbackBoundary; /// public event EventHandler PlanPackageBegin; /// public event EventHandler PlanCompatibleMsiPackageBegin; /// public event EventHandler PlanCompatibleMsiPackageComplete; /// public event EventHandler PlanPatchTarget; /// public event EventHandler PlanMsiFeature; /// public event EventHandler PlanMsiPackage; /// public event EventHandler PlanPackageComplete; /// public event EventHandler PlannedCompatiblePackage; /// public event EventHandler PlannedPackage; /// public event EventHandler PlanComplete; /// public event EventHandler ApplyBegin; /// public event EventHandler ElevateBegin; /// public event EventHandler ElevateComplete; /// public event EventHandler Progress; /// public event EventHandler Error; /// public event EventHandler RegisterBegin; /// public event EventHandler RegisterComplete; /// public event EventHandler UnregisterBegin; /// public event EventHandler UnregisterComplete; /// public event EventHandler CacheBegin; /// public event EventHandler CachePackageBegin; /// public event EventHandler CacheAcquireBegin; /// public event EventHandler CacheAcquireProgress; /// public event EventHandler CacheAcquireResolving; /// public event EventHandler CacheAcquireComplete; /// public event EventHandler CacheVerifyBegin; /// public event EventHandler CacheVerifyProgress; /// public event EventHandler CacheVerifyComplete; /// public event EventHandler CachePackageComplete; /// public event EventHandler CacheComplete; /// public event EventHandler ExecuteBegin; /// public event EventHandler ExecutePackageBegin; /// public event EventHandler ExecutePatchTarget; /// public event EventHandler ExecuteMsiMessage; /// public event EventHandler ExecuteFilesInUse; /// public event EventHandler ExecutePackageComplete; /// public event EventHandler ExecuteComplete; /// public event EventHandler ApplyComplete; /// public event EventHandler ExecuteProgress; /// public event EventHandler LaunchApprovedExeBegin; /// public event EventHandler LaunchApprovedExeComplete; /// public event EventHandler BeginMsiTransactionBegin; /// public event EventHandler BeginMsiTransactionComplete; /// public event EventHandler CommitMsiTransactionBegin; /// public event EventHandler CommitMsiTransactionComplete; /// public event EventHandler RollbackMsiTransactionBegin; /// public event EventHandler RollbackMsiTransactionComplete; /// public event EventHandler PauseAutomaticUpdatesBegin; /// public event EventHandler PauseAutomaticUpdatesComplete; /// public event EventHandler SystemRestorePointBegin; /// public event EventHandler SystemRestorePointComplete; /// public event EventHandler PlanForwardCompatibleBundle; /// public event EventHandler CacheContainerOrPayloadVerifyBegin; /// public event EventHandler CacheContainerOrPayloadVerifyProgress; /// public event EventHandler CacheContainerOrPayloadVerifyComplete; /// public event EventHandler CachePayloadExtractBegin; /// public event EventHandler CachePayloadExtractProgress; /// public event EventHandler CachePayloadExtractComplete; /// public event EventHandler SetUpdateBegin; /// public event EventHandler SetUpdateComplete; /// public event EventHandler PlanRestoreRelatedBundle; /// /// Entry point that is called when the bootstrapper application is ready to run. /// protected abstract void Run(); /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnStartup(StartupEventArgs args) { EventHandler handler = this.Startup; if (null != handler) { handler(this, args); } if (this.asyncExecution) { this.engine.Log(LogLevel.Verbose, "Creating BA thread to run asynchronously."); Thread uiThread = new Thread(this.Run); uiThread.Name = "UIThread"; uiThread.SetApartmentState(ApartmentState.STA); uiThread.Start(); } else { this.engine.Log(LogLevel.Verbose, "Creating BA thread to run synchronously."); this.Run(); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnShutdown(ShutdownEventArgs args) { EventHandler handler = this.Shutdown; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnSystemShutdown(SystemShutdownEventArgs args) { EventHandler handler = this.SystemShutdown; if (null != handler) { handler(this, args); } else if (null != args) { // Allow requests to shut down when critical or not applying. bool critical = EndSessionReasons.Critical == (EndSessionReasons.Critical & args.Reasons); args.Cancel = !critical && this.applying; } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectBegin(DetectBeginEventArgs args) { EventHandler handler = this.DetectBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectForwardCompatibleBundle(DetectForwardCompatibleBundleEventArgs args) { EventHandler handler = this.DetectForwardCompatibleBundle; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectUpdateBegin(DetectUpdateBeginEventArgs args) { EventHandler handler = this.DetectUpdateBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectUpdate(DetectUpdateEventArgs args) { EventHandler handler = this.DetectUpdate; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectUpdateComplete(DetectUpdateCompleteEventArgs args) { EventHandler handler = this.DetectUpdateComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectRelatedBundle(DetectRelatedBundleEventArgs args) { EventHandler handler = this.DetectRelatedBundle; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectPackageBegin(DetectPackageBeginEventArgs args) { EventHandler handler = this.DetectPackageBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectCompatibleMsiPackage(DetectCompatibleMsiPackageEventArgs args) { EventHandler handler = this.DetectCompatibleMsiPackage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectRelatedMsiPackage(DetectRelatedMsiPackageEventArgs args) { EventHandler handler = this.DetectRelatedMsiPackage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectPatchTarget(DetectPatchTargetEventArgs args) { EventHandler handler = this.DetectPatchTarget; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectMsiFeature(DetectMsiFeatureEventArgs args) { EventHandler handler = this.DetectMsiFeature; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectPackageComplete(DetectPackageCompleteEventArgs args) { EventHandler handler = this.DetectPackageComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnDetectComplete(DetectCompleteEventArgs args) { EventHandler handler = this.DetectComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanBegin(PlanBeginEventArgs args) { EventHandler handler = this.PlanBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanRelatedBundle(PlanRelatedBundleEventArgs args) { EventHandler handler = this.PlanRelatedBundle; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// protected virtual void OnPlanRollbackBoundary(PlanRollbackBoundaryEventArgs args) { EventHandler handler = this.PlanRollbackBoundary; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanPackageBegin(PlanPackageBeginEventArgs args) { EventHandler handler = this.PlanPackageBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanCompatibleMsiPackageBegin(PlanCompatibleMsiPackageBeginEventArgs args) { EventHandler handler = this.PlanCompatibleMsiPackageBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanCompatibleMsiPackageComplete(PlanCompatibleMsiPackageCompleteEventArgs args) { EventHandler handler = this.PlanCompatibleMsiPackageComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanPatchTarget(PlanPatchTargetEventArgs args) { EventHandler handler = this.PlanPatchTarget; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanMsiFeature(PlanMsiFeatureEventArgs args) { EventHandler handler = this.PlanMsiFeature; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanMsiPackage(PlanMsiPackageEventArgs args) { EventHandler handler = this.PlanMsiPackage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanPackageComplete(PlanPackageCompleteEventArgs args) { EventHandler handler = this.PlanPackageComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlannedCompatiblePackage(PlannedCompatiblePackageEventArgs args) { EventHandler handler = this.PlannedCompatiblePackage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlannedPackage(PlannedPackageEventArgs args) { EventHandler handler = this.PlannedPackage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanComplete(PlanCompleteEventArgs args) { EventHandler handler = this.PlanComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnApplyBegin(ApplyBeginEventArgs args) { EventHandler handler = this.ApplyBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnElevateBegin(ElevateBeginEventArgs args) { EventHandler handler = this.ElevateBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnElevateComplete(ElevateCompleteEventArgs args) { EventHandler handler = this.ElevateComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnProgress(ProgressEventArgs args) { EventHandler handler = this.Progress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnError(ErrorEventArgs args) { EventHandler handler = this.Error; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnRegisterBegin(RegisterBeginEventArgs args) { EventHandler handler = this.RegisterBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnRegisterComplete(RegisterCompleteEventArgs args) { EventHandler handler = this.RegisterComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnUnregisterBegin(UnregisterBeginEventArgs args) { EventHandler handler = this.UnregisterBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnUnregisterComplete(UnregisterCompleteEventArgs args) { EventHandler handler = this.UnregisterComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheBegin(CacheBeginEventArgs args) { EventHandler handler = this.CacheBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCachePackageBegin(CachePackageBeginEventArgs args) { EventHandler handler = this.CachePackageBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheAcquireBegin(CacheAcquireBeginEventArgs args) { EventHandler handler = this.CacheAcquireBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheAcquireProgress(CacheAcquireProgressEventArgs args) { EventHandler handler = this.CacheAcquireProgress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnCacheAcquireResolving(CacheAcquireResolvingEventArgs args) { EventHandler handler = this.CacheAcquireResolving; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheAcquireComplete(CacheAcquireCompleteEventArgs args) { EventHandler handler = this.CacheAcquireComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheVerifyBegin(CacheVerifyBeginEventArgs args) { EventHandler handler = this.CacheVerifyBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheVerifyProgress(CacheVerifyProgressEventArgs args) { EventHandler handler = this.CacheVerifyProgress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheVerifyComplete(CacheVerifyCompleteEventArgs args) { EventHandler handler = this.CacheVerifyComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCachePackageComplete(CachePackageCompleteEventArgs args) { EventHandler handler = this.CachePackageComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnCacheComplete(CacheCompleteEventArgs args) { EventHandler handler = this.CacheComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecuteBegin(ExecuteBeginEventArgs args) { EventHandler handler = this.ExecuteBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecutePackageBegin(ExecutePackageBeginEventArgs args) { EventHandler handler = this.ExecutePackageBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecutePatchTarget(ExecutePatchTargetEventArgs args) { EventHandler handler = this.ExecutePatchTarget; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecuteMsiMessage(ExecuteMsiMessageEventArgs args) { EventHandler handler = this.ExecuteMsiMessage; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecuteFilesInUse(ExecuteFilesInUseEventArgs args) { EventHandler handler = this.ExecuteFilesInUse; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecutePackageComplete(ExecutePackageCompleteEventArgs args) { EventHandler handler = this.ExecutePackageComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecuteComplete(ExecuteCompleteEventArgs args) { EventHandler handler = this.ExecuteComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnApplyComplete(ApplyCompleteEventArgs args) { EventHandler handler = this.ApplyComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnExecuteProgress(ExecuteProgressEventArgs args) { EventHandler handler = this.ExecuteProgress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnLaunchApprovedExeBegin(LaunchApprovedExeBeginEventArgs args) { EventHandler handler = this.LaunchApprovedExeBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnLaunchApprovedExeComplete(LaunchApprovedExeCompleteEventArgs args) { EventHandler handler = this.LaunchApprovedExeComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnBeginMsiTransactionBegin(BeginMsiTransactionBeginEventArgs args) { EventHandler handler = this.BeginMsiTransactionBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnBeginMsiTransactionComplete(BeginMsiTransactionCompleteEventArgs args) { EventHandler handler = this.BeginMsiTransactionComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnCommitMsiTransactionBegin(CommitMsiTransactionBeginEventArgs args) { EventHandler handler = this.CommitMsiTransactionBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnCommitMsiTransactionComplete(CommitMsiTransactionCompleteEventArgs args) { EventHandler handler = this.CommitMsiTransactionComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnRollbackMsiTransactionBegin(RollbackMsiTransactionBeginEventArgs args) { EventHandler handler = this.RollbackMsiTransactionBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnRollbackMsiTransactionComplete(RollbackMsiTransactionCompleteEventArgs args) { EventHandler handler = this.RollbackMsiTransactionComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPauseAutomaticUpdatesBegin(PauseAutomaticUpdatesBeginEventArgs args) { EventHandler handler = this.PauseAutomaticUpdatesBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPauseAutomaticUpdatesComplete(PauseAutomaticUpdatesCompleteEventArgs args) { EventHandler handler = this.PauseAutomaticUpdatesComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnSystemRestorePointBegin(SystemRestorePointBeginEventArgs args) { EventHandler handler = this.SystemRestorePointBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnSystemRestorePointComplete(SystemRestorePointCompleteEventArgs args) { EventHandler handler = this.SystemRestorePointComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// protected virtual void OnPlanForwardCompatibleBundle(PlanForwardCompatibleBundleEventArgs args) { EventHandler handler = this.PlanForwardCompatibleBundle; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheContainerOrPayloadVerifyBegin(CacheContainerOrPayloadVerifyBeginEventArgs args) { EventHandler handler = this.CacheContainerOrPayloadVerifyBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheContainerOrPayloadVerifyProgress(CacheContainerOrPayloadVerifyProgressEventArgs args) { EventHandler handler = this.CacheContainerOrPayloadVerifyProgress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCacheContainerOrPayloadVerifyComplete(CacheContainerOrPayloadVerifyCompleteEventArgs args) { EventHandler handler = this.CacheContainerOrPayloadVerifyComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCachePayloadExtractBegin(CachePayloadExtractBeginEventArgs args) { EventHandler handler = this.CachePayloadExtractBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCachePayloadExtractProgress(CachePayloadExtractProgressEventArgs args) { EventHandler handler = this.CachePayloadExtractProgress; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnCachePayloadExtractComplete(CachePayloadExtractCompleteEventArgs args) { EventHandler handler = this.CachePayloadExtractComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnSetUpdateBegin(SetUpdateBeginEventArgs args) { EventHandler handler = this.SetUpdateBegin; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// protected virtual void OnSetUpdateComplete(SetUpdateCompleteEventArgs args) { EventHandler handler = this.SetUpdateComplete; if (null != handler) { handler(this, args); } } /// /// Called by the engine, raises the event. /// /// Additional arguments for this event. protected virtual void OnPlanRestoreRelatedBundle(PlanRestoreRelatedBundleEventArgs args) { EventHandler handler = this.PlanRestoreRelatedBundle; if (null != handler) { handler(this, args); } } #region IBootstrapperApplication Members int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext) { switch (message) { default: return NativeMethods.E_NOTIMPL; } } void IBootstrapperApplication.BAProcFallback(int message, IntPtr pvArgs, IntPtr pvResults, ref int phr, IntPtr pvContext) { } int IBootstrapperApplication.OnStartup() { StartupEventArgs args = new StartupEventArgs(); this.OnStartup(args); return args.HResult; } int IBootstrapperApplication.OnShutdown(ref BOOTSTRAPPER_SHUTDOWN_ACTION action) { ShutdownEventArgs args = new ShutdownEventArgs(action); this.OnShutdown(args); action = args.Action; return args.HResult; } int IBootstrapperApplication.OnSystemShutdown(EndSessionReasons dwEndSession, ref bool fCancel) { SystemShutdownEventArgs args = new SystemShutdownEventArgs(dwEndSession, fCancel); this.OnSystemShutdown(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectBegin(bool fCached, RegistrationType registrationType, int cPackages, ref bool fCancel) { DetectBeginEventArgs args = new DetectBeginEventArgs(fCached, registrationType, cPackages, fCancel); this.OnDetectBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectForwardCompatibleBundle(string wzBundleId, RelationType relationType, string wzBundleTag, bool fPerMachine, string wzVersion, bool fMissingFromCache, ref bool fCancel) { DetectForwardCompatibleBundleEventArgs args = new DetectForwardCompatibleBundleEventArgs(wzBundleId, relationType, wzBundleTag, fPerMachine, wzVersion, fMissingFromCache, fCancel); this.OnDetectForwardCompatibleBundle(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectUpdateBegin(string wzUpdateLocation, ref bool fCancel, ref bool fSkip) { DetectUpdateBeginEventArgs args = new DetectUpdateBeginEventArgs(wzUpdateLocation, fCancel, fSkip); this.OnDetectUpdateBegin(args); fCancel = args.Cancel; fSkip = args.Skip; return args.HResult; } int IBootstrapperApplication.OnDetectUpdate(string wzUpdateLocation, long dw64Size, string wzVersion, string wzTitle, string wzSummary, string wzContentType, string wzContent, ref bool fCancel, ref bool fStopProcessingUpdates) { DetectUpdateEventArgs args = new DetectUpdateEventArgs(wzUpdateLocation, dw64Size, wzVersion, wzTitle, wzSummary, wzContentType, wzContent, fCancel, fStopProcessingUpdates); this.OnDetectUpdate(args); fCancel = args.Cancel; fStopProcessingUpdates = args.StopProcessingUpdates; return args.HResult; } int IBootstrapperApplication.OnDetectUpdateComplete(int hrStatus, ref bool fIgnoreError) { DetectUpdateCompleteEventArgs args = new DetectUpdateCompleteEventArgs(hrStatus, fIgnoreError); this.OnDetectUpdateComplete(args); fIgnoreError = args.IgnoreError; return args.HResult; } int IBootstrapperApplication.OnDetectRelatedBundle(string wzProductCode, RelationType relationType, string wzBundleTag, bool fPerMachine, string wzVersion, bool fMissingFromCache, ref bool fCancel) { DetectRelatedBundleEventArgs args = new DetectRelatedBundleEventArgs(wzProductCode, relationType, wzBundleTag, fPerMachine, wzVersion, fMissingFromCache, fCancel); this.OnDetectRelatedBundle(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectPackageBegin(string wzPackageId, ref bool fCancel) { DetectPackageBeginEventArgs args = new DetectPackageBeginEventArgs(wzPackageId, fCancel); this.OnDetectPackageBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectCompatibleMsiPackage(string wzPackageId, string wzCompatiblePackageId, string wzCompatiblePackageVersion, ref bool fCancel) { DetectCompatibleMsiPackageEventArgs args = new DetectCompatibleMsiPackageEventArgs(wzPackageId, wzCompatiblePackageId, wzCompatiblePackageVersion, fCancel); this.OnDetectCompatibleMsiPackage(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectRelatedMsiPackage(string wzPackageId, string wzUpgradeCode, string wzProductCode, bool fPerMachine, string wzVersion, RelatedOperation operation, ref bool fCancel) { DetectRelatedMsiPackageEventArgs args = new DetectRelatedMsiPackageEventArgs(wzPackageId, wzUpgradeCode, wzProductCode, fPerMachine, wzVersion, operation, fCancel); this.OnDetectRelatedMsiPackage(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectPatchTarget(string wzPackageId, string wzProductCode, PackageState patchState, ref bool fCancel) { DetectPatchTargetEventArgs args = new DetectPatchTargetEventArgs(wzPackageId, wzProductCode, patchState, fCancel); this.OnDetectPatchTarget(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectMsiFeature(string wzPackageId, string wzFeatureId, FeatureState state, ref bool fCancel) { DetectMsiFeatureEventArgs args = new DetectMsiFeatureEventArgs(wzPackageId, wzFeatureId, state, fCancel); this.OnDetectMsiFeature(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnDetectPackageComplete(string wzPackageId, int hrStatus, PackageState state, bool fCached) { DetectPackageCompleteEventArgs args = new DetectPackageCompleteEventArgs(wzPackageId, hrStatus, state, fCached); this.OnDetectPackageComplete(args); return args.HResult; } int IBootstrapperApplication.OnDetectComplete(int hrStatus, bool fEligibleForCleanup) { DetectCompleteEventArgs args = new DetectCompleteEventArgs(hrStatus, fEligibleForCleanup); this.OnDetectComplete(args); return args.HResult; } int IBootstrapperApplication.OnPlanBegin(int cPackages, ref bool fCancel) { PlanBeginEventArgs args = new PlanBeginEventArgs(cPackages, fCancel); this.OnPlanBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnPlanRelatedBundle(string wzBundleId, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) { PlanRelatedBundleEventArgs args = new PlanRelatedBundleEventArgs(wzBundleId, recommendedState, pRequestedState, fCancel); this.OnPlanRelatedBundle(args); pRequestedState = args.State; fCancel = args.Cancel; 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); this.OnPlanPackageBegin(args); pRequestedState = args.State; fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnPlanCompatibleMsiPackageBegin(string wzPackageId, string wzCompatiblePackageId, string wzCompatiblePackageVersion, bool recommendedRemove, ref bool pRequestedRemove, ref bool fCancel) { PlanCompatibleMsiPackageBeginEventArgs args = new PlanCompatibleMsiPackageBeginEventArgs(wzPackageId, wzCompatiblePackageId, wzCompatiblePackageVersion, recommendedRemove, pRequestedRemove, fCancel); this.OnPlanCompatibleMsiPackageBegin(args); pRequestedRemove = args.RequestRemove; fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnPlanCompatibleMsiPackageComplete(string wzPackageId, string wzCompatiblePackageId, int hrStatus, bool requestedRemove) { PlanCompatibleMsiPackageCompleteEventArgs args = new PlanCompatibleMsiPackageCompleteEventArgs(wzPackageId, wzCompatiblePackageId, hrStatus, requestedRemove); this.OnPlanCompatibleMsiPackageComplete(args); return args.HResult; } int IBootstrapperApplication.OnPlanPatchTarget(string wzPackageId, string wzProductCode, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) { PlanPatchTargetEventArgs args = new PlanPatchTargetEventArgs(wzPackageId, wzProductCode, recommendedState, pRequestedState, fCancel); this.OnPlanPatchTarget(args); pRequestedState = args.State; fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnPlanMsiFeature(string wzPackageId, string wzFeatureId, FeatureState recommendedState, ref FeatureState pRequestedState, ref bool fCancel) { PlanMsiFeatureEventArgs args = new PlanMsiFeatureEventArgs(wzPackageId, wzFeatureId, recommendedState, pRequestedState, fCancel); this.OnPlanMsiFeature(args); pRequestedState = args.State; fCancel = args.Cancel; return args.HResult; } 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) { PlanMsiPackageEventArgs args = new PlanMsiPackageEventArgs(wzPackageId, fExecute, action, recommendedFileVersioning, fCancel, actionMsiProperty, uiLevel, fDisableExternalUiHandler, fileVersioning); this.OnPlanMsiPackage(args); fCancel = args.Cancel; actionMsiProperty = args.ActionMsiProperty; uiLevel = args.UiLevel; fDisableExternalUiHandler = args.DisableExternalUiHandler; fileVersioning = args.FileVersioning; return args.HResult; } int IBootstrapperApplication.OnPlanPackageComplete(string wzPackageId, int hrStatus, RequestState requested) { var args = new PlanPackageCompleteEventArgs(wzPackageId, hrStatus, requested); this.OnPlanPackageComplete(args); return args.HResult; } int IBootstrapperApplication.OnPlannedCompatiblePackage(string wzPackageId, string wzCompatiblePackageId, bool remove) { var args = new PlannedCompatiblePackageEventArgs(wzPackageId, wzCompatiblePackageId, remove); this.OnPlannedCompatiblePackage(args); return args.HResult; } int IBootstrapperApplication.OnPlannedPackage(string wzPackageId, ActionState execute, ActionState rollback, bool fPlannedCache, bool fPlannedUncache) { var args = new PlannedPackageEventArgs(wzPackageId, execute, rollback, fPlannedCache, fPlannedUncache); this.OnPlannedPackage(args); return args.HResult; } int IBootstrapperApplication.OnPlanComplete(int hrStatus) { PlanCompleteEventArgs args = new PlanCompleteEventArgs(hrStatus); this.OnPlanComplete(args); return args.HResult; } int IBootstrapperApplication.OnApplyBegin(int dwPhaseCount, ref bool fCancel) { this.applying = true; ApplyBeginEventArgs args = new ApplyBeginEventArgs(dwPhaseCount, fCancel); this.OnApplyBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnElevateBegin(ref bool fCancel) { ElevateBeginEventArgs args = new ElevateBeginEventArgs(fCancel); this.OnElevateBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnElevateComplete(int hrStatus) { ElevateCompleteEventArgs args = new ElevateCompleteEventArgs(hrStatus); this.OnElevateComplete(args); return args.HResult; } int IBootstrapperApplication.OnProgress(int dwProgressPercentage, int dwOverallPercentage, ref bool fCancel) { ProgressEventArgs args = new ProgressEventArgs(dwProgressPercentage, dwOverallPercentage, fCancel); this.OnProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnError(ErrorType errorType, string wzPackageId, int dwCode, string wzError, int dwUIHint, int cData, string[] rgwzData, Result nRecommendation, ref Result pResult) { ErrorEventArgs args = new ErrorEventArgs(errorType, wzPackageId, dwCode, wzError, dwUIHint, rgwzData, nRecommendation, pResult); this.OnError(args); pResult = args.Result; return args.HResult; } int IBootstrapperApplication.OnRegisterBegin(RegistrationType recommendedRegistrationType, ref bool fCancel, ref RegistrationType registrationType) { RegisterBeginEventArgs args = new RegisterBeginEventArgs(recommendedRegistrationType, fCancel, registrationType); this.OnRegisterBegin(args); fCancel = args.Cancel; registrationType = args.RegistrationType; return args.HResult; } int IBootstrapperApplication.OnRegisterComplete(int hrStatus) { RegisterCompleteEventArgs args = new RegisterCompleteEventArgs(hrStatus); this.OnRegisterComplete(args); return args.HResult; } int IBootstrapperApplication.OnCacheBegin(ref bool fCancel) { CacheBeginEventArgs args = new CacheBeginEventArgs(fCancel); this.OnCacheBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCachePackageBegin(string wzPackageId, int cCachePayloads, long dw64PackageCacheSize, ref bool fCancel) { CachePackageBeginEventArgs args = new CachePackageBeginEventArgs(wzPackageId, cCachePayloads, dw64PackageCacheSize, fCancel); this.OnCachePackageBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheAcquireBegin(string wzPackageOrContainerId, string wzPayloadId, string wzSource, string wzDownloadUrl, string wzPayloadContainerId, CacheOperation recommendation, ref CacheOperation action, ref bool fCancel) { CacheAcquireBeginEventArgs args = new CacheAcquireBeginEventArgs(wzPackageOrContainerId, wzPayloadId, wzSource, wzDownloadUrl, wzPayloadContainerId, recommendation, action, fCancel); this.OnCacheAcquireBegin(args); action = args.Action; fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheAcquireProgress(string wzPackageOrContainerId, string wzPayloadId, long dw64Progress, long dw64Total, int dwOverallPercentage, ref bool fCancel) { CacheAcquireProgressEventArgs args = new CacheAcquireProgressEventArgs(wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage, fCancel); this.OnCacheAcquireProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheAcquireResolving(string wzPackageOrContainerId, string wzPayloadId, string[] searchPaths, int cSearchPaths, bool fFoundLocal, int dwRecommendedSearchPath, string wzDownloadUrl, string wzPayloadContainerId, CacheResolveOperation recommendation, ref int dwChosenSearchPath, ref CacheResolveOperation action, ref bool fCancel) { CacheAcquireResolvingEventArgs args = new CacheAcquireResolvingEventArgs(wzPackageOrContainerId, wzPayloadId, searchPaths, fFoundLocal, dwRecommendedSearchPath, wzDownloadUrl, wzPayloadContainerId, recommendation, dwChosenSearchPath, action, fCancel); this.OnCacheAcquireResolving(args); dwChosenSearchPath = args.ChosenSearchPath; action = args.Action; fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheAcquireComplete(string wzPackageOrContainerId, string wzPayloadId, int hrStatus, BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION action) { CacheAcquireCompleteEventArgs args = new CacheAcquireCompleteEventArgs(wzPackageOrContainerId, wzPayloadId, hrStatus, recommendation, action); this.OnCacheAcquireComplete(args); action = args.Action; return args.HResult; } int IBootstrapperApplication.OnCacheVerifyBegin(string wzPackageOrContainerId, string wzPayloadId, ref bool fCancel) { CacheVerifyBeginEventArgs args = new CacheVerifyBeginEventArgs(wzPackageOrContainerId, wzPayloadId, fCancel); this.OnCacheVerifyBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheVerifyProgress(string wzPackageOrContainerId, string wzPayloadId, long dw64Progress, long dw64Total, int dwOverallPercentage, CacheVerifyStep verifyStep, ref bool fCancel) { CacheVerifyProgressEventArgs args = new CacheVerifyProgressEventArgs(wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage, verifyStep, fCancel); this.OnCacheVerifyProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheVerifyComplete(string wzPackageOrContainerId, string wzPayloadId, int hrStatus, BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION action) { CacheVerifyCompleteEventArgs args = new CacheVerifyCompleteEventArgs(wzPackageOrContainerId, wzPayloadId, hrStatus, recommendation, action); this.OnCacheVerifyComplete(args); action = args.Action; return args.HResult; } int IBootstrapperApplication.OnCachePackageComplete(string wzPackageId, int hrStatus, BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION action) { CachePackageCompleteEventArgs args = new CachePackageCompleteEventArgs(wzPackageId, hrStatus, recommendation, action); this.OnCachePackageComplete(args); action = args.Action; return args.HResult; } int IBootstrapperApplication.OnCacheComplete(int hrStatus) { CacheCompleteEventArgs args = new CacheCompleteEventArgs(hrStatus); this.OnCacheComplete(args); return args.HResult; } int IBootstrapperApplication.OnExecuteBegin(int cExecutingPackages, ref bool fCancel) { ExecuteBeginEventArgs args = new ExecuteBeginEventArgs(cExecutingPackages, fCancel); this.OnExecuteBegin(args); args.Cancel = fCancel; return args.HResult; } int IBootstrapperApplication.OnExecutePackageBegin(string wzPackageId, bool fExecute, ActionState action, INSTALLUILEVEL uiLevel, bool fDisableExternalUiHandler, ref bool fCancel) { ExecutePackageBeginEventArgs args = new ExecutePackageBeginEventArgs(wzPackageId, fExecute, action, uiLevel, fDisableExternalUiHandler, fCancel); this.OnExecutePackageBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnExecutePatchTarget(string wzPackageId, string wzTargetProductCode, ref bool fCancel) { ExecutePatchTargetEventArgs args = new ExecutePatchTargetEventArgs(wzPackageId, wzTargetProductCode, fCancel); this.OnExecutePatchTarget(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnExecuteProgress(string wzPackageId, int dwProgressPercentage, int dwOverallPercentage, ref bool fCancel) { ExecuteProgressEventArgs args = new ExecuteProgressEventArgs(wzPackageId, dwProgressPercentage, dwOverallPercentage, fCancel); this.OnExecuteProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnExecuteMsiMessage(string wzPackageId, InstallMessage messageType, int dwUIHint, string wzMessage, int cData, string[] rgwzData, Result nRecommendation, ref Result pResult) { ExecuteMsiMessageEventArgs args = new ExecuteMsiMessageEventArgs(wzPackageId, messageType, dwUIHint, wzMessage, rgwzData, nRecommendation, pResult); this.OnExecuteMsiMessage(args); pResult = args.Result; return args.HResult; } int IBootstrapperApplication.OnExecuteFilesInUse(string wzPackageId, int cFiles, string[] rgwzFiles, Result nRecommendation, FilesInUseType source, ref Result pResult) { ExecuteFilesInUseEventArgs args = new ExecuteFilesInUseEventArgs(wzPackageId, rgwzFiles, nRecommendation, source, pResult); this.OnExecuteFilesInUse(args); pResult = args.Result; return args.HResult; } int IBootstrapperApplication.OnExecutePackageComplete(string wzPackageId, int hrStatus, ApplyRestart restart, BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION pAction) { ExecutePackageCompleteEventArgs args = new ExecutePackageCompleteEventArgs(wzPackageId, hrStatus, restart, recommendation, pAction); this.OnExecutePackageComplete(args); pAction = args.Action; return args.HResult; } int IBootstrapperApplication.OnExecuteComplete(int hrStatus) { ExecuteCompleteEventArgs args = new ExecuteCompleteEventArgs(hrStatus); this.OnExecuteComplete(args); return args.HResult; } int IBootstrapperApplication.OnUnregisterBegin(RegistrationType recommendedRegistrationType, ref RegistrationType registrationType) { UnregisterBeginEventArgs args = new UnregisterBeginEventArgs(recommendedRegistrationType, registrationType); this.OnUnregisterBegin(args); registrationType = args.RegistrationType; return args.HResult; } int IBootstrapperApplication.OnUnregisterComplete(int hrStatus) { UnregisterCompleteEventArgs args = new UnregisterCompleteEventArgs(hrStatus); this.OnUnregisterComplete(args); return args.HResult; } int IBootstrapperApplication.OnApplyComplete(int hrStatus, ApplyRestart restart, BOOTSTRAPPER_APPLYCOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_APPLYCOMPLETE_ACTION pAction) { ApplyCompleteEventArgs args = new ApplyCompleteEventArgs(hrStatus, restart, recommendation, pAction); this.OnApplyComplete(args); this.applying = false; pAction = args.Action; return args.HResult; } int IBootstrapperApplication.OnLaunchApprovedExeBegin(ref bool fCancel) { LaunchApprovedExeBeginEventArgs args = new LaunchApprovedExeBeginEventArgs(fCancel); this.OnLaunchApprovedExeBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnLaunchApprovedExeComplete(int hrStatus, int processId) { LaunchApprovedExeCompleteEventArgs args = new LaunchApprovedExeCompleteEventArgs(hrStatus, processId); this.OnLaunchApprovedExeComplete(args); return args.HResult; } int IBootstrapperApplication.OnBeginMsiTransactionBegin(string transactionId, ref bool fCancel) { BeginMsiTransactionBeginEventArgs args = new BeginMsiTransactionBeginEventArgs(transactionId, fCancel); this.OnBeginMsiTransactionBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnBeginMsiTransactionComplete(string transactionId, int hrStatus) { BeginMsiTransactionCompleteEventArgs args = new BeginMsiTransactionCompleteEventArgs(transactionId, hrStatus); this.OnBeginMsiTransactionComplete(args); return args.HResult; } int IBootstrapperApplication.OnCommitMsiTransactionBegin(string transactionId, ref bool fCancel) { CommitMsiTransactionBeginEventArgs args = new CommitMsiTransactionBeginEventArgs(transactionId, fCancel); this.OnCommitMsiTransactionBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCommitMsiTransactionComplete(string transactionId, int hrStatus) { CommitMsiTransactionCompleteEventArgs args = new CommitMsiTransactionCompleteEventArgs(transactionId, hrStatus); this.OnCommitMsiTransactionComplete(args); return args.HResult; } int IBootstrapperApplication.OnRollbackMsiTransactionBegin(string transactionId) { RollbackMsiTransactionBeginEventArgs args = new RollbackMsiTransactionBeginEventArgs(transactionId); this.OnRollbackMsiTransactionBegin(args); return args.HResult; } int IBootstrapperApplication.OnRollbackMsiTransactionComplete(string transactionId, int hrStatus) { RollbackMsiTransactionCompleteEventArgs args = new RollbackMsiTransactionCompleteEventArgs(transactionId, hrStatus); this.OnRollbackMsiTransactionComplete(args); return args.HResult; } int IBootstrapperApplication.OnPauseAutomaticUpdatesBegin() { PauseAutomaticUpdatesBeginEventArgs args = new PauseAutomaticUpdatesBeginEventArgs(); this.OnPauseAutomaticUpdatesBegin(args); return args.HResult; } int IBootstrapperApplication.OnPauseAutomaticUpdatesComplete(int hrStatus) { PauseAutomaticUpdatesCompleteEventArgs args = new PauseAutomaticUpdatesCompleteEventArgs(hrStatus); this.OnPauseAutomaticUpdatesComplete(args); return args.HResult; } int IBootstrapperApplication.OnSystemRestorePointBegin() { SystemRestorePointBeginEventArgs args = new SystemRestorePointBeginEventArgs(); this.OnSystemRestorePointBegin(args); return args.HResult; } int IBootstrapperApplication.OnSystemRestorePointComplete(int hrStatus) { SystemRestorePointCompleteEventArgs args = new SystemRestorePointCompleteEventArgs(hrStatus); this.OnSystemRestorePointComplete(args); return args.HResult; } int IBootstrapperApplication.OnPlanForwardCompatibleBundle(string wzBundleId, RelationType relationType, string wzBundleTag, bool fPerMachine, string wzVersion, bool fRecommendedIgnoreBundle, ref bool fCancel, ref bool fIgnoreBundle) { PlanForwardCompatibleBundleEventArgs args = new PlanForwardCompatibleBundleEventArgs(wzBundleId, relationType, wzBundleTag, fPerMachine, wzVersion, fRecommendedIgnoreBundle, fCancel, fIgnoreBundle); this.OnPlanForwardCompatibleBundle(args); fCancel = args.Cancel; fIgnoreBundle = args.IgnoreBundle; return args.HResult; } int IBootstrapperApplication.OnCacheContainerOrPayloadVerifyBegin(string wzPackageOrContainerId, string wzPayloadId, ref bool fCancel) { CacheContainerOrPayloadVerifyBeginEventArgs args = new CacheContainerOrPayloadVerifyBeginEventArgs(wzPackageOrContainerId, wzPayloadId, fCancel); this.OnCacheContainerOrPayloadVerifyBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheContainerOrPayloadVerifyProgress(string wzPackageOrContainerId, string wzPayloadId, long dw64Progress, long dw64Total, int dwOverallPercentage, ref bool fCancel) { CacheContainerOrPayloadVerifyProgressEventArgs args = new CacheContainerOrPayloadVerifyProgressEventArgs(wzPackageOrContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage, fCancel); this.OnCacheContainerOrPayloadVerifyProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCacheContainerOrPayloadVerifyComplete(string wzPackageOrContainerId, string wzPayloadId, int hrStatus) { CacheContainerOrPayloadVerifyCompleteEventArgs args = new CacheContainerOrPayloadVerifyCompleteEventArgs(wzPackageOrContainerId, wzPayloadId, hrStatus); this.OnCacheContainerOrPayloadVerifyComplete(args); return args.HResult; } int IBootstrapperApplication.OnCachePayloadExtractBegin(string wzContainerId, string wzPayloadId, ref bool fCancel) { CachePayloadExtractBeginEventArgs args = new CachePayloadExtractBeginEventArgs(wzContainerId, wzPayloadId, fCancel); this.OnCachePayloadExtractBegin(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCachePayloadExtractProgress(string wzContainerId, string wzPayloadId, long dw64Progress, long dw64Total, int dwOverallPercentage, ref bool fCancel) { CachePayloadExtractProgressEventArgs args = new CachePayloadExtractProgressEventArgs(wzContainerId, wzPayloadId, dw64Progress, dw64Total, dwOverallPercentage, fCancel); this.OnCachePayloadExtractProgress(args); fCancel = args.Cancel; return args.HResult; } int IBootstrapperApplication.OnCachePayloadExtractComplete(string wzContainerId, string wzPayloadId, int hrStatus) { CachePayloadExtractCompleteEventArgs args = new CachePayloadExtractCompleteEventArgs(wzContainerId, wzPayloadId, hrStatus); this.OnCachePayloadExtractComplete(args); return args.HResult; } int IBootstrapperApplication.OnSetUpdateBegin() { SetUpdateBeginEventArgs args = new SetUpdateBeginEventArgs(); this.OnSetUpdateBegin(args); return args.HResult; } int IBootstrapperApplication.OnSetUpdateComplete(int hrStatus, string wzPreviousPackageId, string wzNewPackageId) { SetUpdateCompleteEventArgs args = new SetUpdateCompleteEventArgs(hrStatus, wzPreviousPackageId, wzNewPackageId); this.OnSetUpdateComplete(args); return args.HResult; } int IBootstrapperApplication.OnPlanRestoreRelatedBundle(string wzBundleId, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) { PlanRestoreRelatedBundleEventArgs args = new PlanRestoreRelatedBundleEventArgs(wzBundleId, recommendedState, pRequestedState, fCancel); this.OnPlanRestoreRelatedBundle(args); pRequestedState = args.State; fCancel = args.Cancel; return args.HResult; } #endregion } }