// 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; /// /// Allows customization of the bootstrapper application. /// [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("53C31D56-49C0-426B-AB06-099D717C67FE")] public interface IBootstrapperApplication { /// /// Low level method that is called directly from the engine. /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int BAProc( int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext ); /// /// Low level method that is called directly from the engine. /// void BAProcFallback( int message, IntPtr pvArgs, IntPtr pvResults, ref int phr, IntPtr pvContext ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnStartup(); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnShutdown(ref BOOTSTRAPPER_SHUTDOWN_ACTION action); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnSystemShutdown( [MarshalAs(UnmanagedType.U4)] EndSessionReasons dwEndSession, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectBegin( [MarshalAs(UnmanagedType.Bool)] bool fCached, [MarshalAs(UnmanagedType.U4)] RegistrationType registrationType, [MarshalAs(UnmanagedType.U4)] int cPackages, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectForwardCompatibleBundle( [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, [MarshalAs(UnmanagedType.U4)] RelationType relationType, [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag, [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, [MarshalAs(UnmanagedType.Bool)] bool fMissingFromCache, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectUpdateBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzUpdateLocation, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, [MarshalAs(UnmanagedType.Bool)] ref bool fSkip ); /// /// See . /// /// /// /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectUpdate( [MarshalAs(UnmanagedType.LPWStr)] string wzUpdateLocation, [MarshalAs(UnmanagedType.U8)] long dw64Size, [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, [MarshalAs(UnmanagedType.LPWStr)] string wzTitle, [MarshalAs(UnmanagedType.LPWStr)] string wzSummary, [MarshalAs(UnmanagedType.LPWStr)] string wzContentType, [MarshalAs(UnmanagedType.LPWStr)] string wzContent, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, [MarshalAs(UnmanagedType.Bool)] ref bool fStopProcessingUpdates ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectUpdateComplete( int hrStatus, [MarshalAs(UnmanagedType.Bool)] ref bool fIgnoreError ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectRelatedBundle( [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, [MarshalAs(UnmanagedType.U4)] RelationType relationType, [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag, [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, [MarshalAs(UnmanagedType.Bool)] bool fMissingFromCache, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectPackageBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectCompatibleMsiPackage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageVersion, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectRelatedMsiPackage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzUpgradeCode, [MarshalAs(UnmanagedType.LPWStr)] string wzProductCode, [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, [MarshalAs(UnmanagedType.U4)] RelatedOperation operation, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectPatchTarget( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzProductCode, [MarshalAs(UnmanagedType.U4)] PackageState patchState, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectMsiFeature( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzFeatureId, [MarshalAs(UnmanagedType.U4)] FeatureState state, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectPackageComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, int hrStatus, [MarshalAs(UnmanagedType.U4)] PackageState state, [MarshalAs(UnmanagedType.Bool)] bool fCached ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnDetectComplete( int hrStatus, [MarshalAs(UnmanagedType.Bool)] bool fEligibleForCleanup ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanBegin( [MarshalAs(UnmanagedType.U4)] int cPackages, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanRelatedBundle( [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, [MarshalAs(UnmanagedType.U4)] RequestState recommendedState, [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [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 ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanPackageBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] PackageState state, [MarshalAs(UnmanagedType.Bool)] bool fCached, [MarshalAs(UnmanagedType.U4)] BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition, [MarshalAs(UnmanagedType.U4)] RequestState recommendedState, [MarshalAs(UnmanagedType.U4)] BOOTSTRAPPER_CACHE_TYPE recommendedCacheType, [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState, [MarshalAs(UnmanagedType.U4)] ref BOOTSTRAPPER_CACHE_TYPE pRequestedCacheType, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanCompatibleMsiPackageBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageVersion, [MarshalAs(UnmanagedType.Bool)] bool fRecommendedRemove, [MarshalAs(UnmanagedType.Bool)] ref bool fRequestRemove, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanCompatibleMsiPackageComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, int hrStatus, [MarshalAs(UnmanagedType.Bool)] bool fRequestedRemove ); /// /// See . /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanPatchTarget( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzProductCode, [MarshalAs(UnmanagedType.U4)] RequestState recommendedState, [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanMsiFeature( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzFeatureId, [MarshalAs(UnmanagedType.U4)] FeatureState recommendedState, [MarshalAs(UnmanagedType.U4)] ref FeatureState pRequestedState, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanMsiPackage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.Bool)] bool fExecute, [MarshalAs(UnmanagedType.U4)] ActionState action, [MarshalAs(UnmanagedType.U4)] BOOTSTRAPPER_MSI_FILE_VERSIONING recommendedFileVersioning, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, [MarshalAs(UnmanagedType.U4)] ref BURN_MSI_PROPERTY actionMsiProperty, [MarshalAs(UnmanagedType.U4)] ref INSTALLUILEVEL uiLevel, [MarshalAs(UnmanagedType.Bool)] ref bool fDisableExternalUiHandler, [MarshalAs(UnmanagedType.U4)] ref BOOTSTRAPPER_MSI_FILE_VERSIONING fileVersioning ); /// /// See . /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanPackageComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, int hrStatus, [MarshalAs(UnmanagedType.U4)] RequestState requested ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlannedCompatiblePackage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, [MarshalAs(UnmanagedType.Bool)] bool fRemove ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlannedPackage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] ActionState execute, [MarshalAs(UnmanagedType.U4)] ActionState rollback, [MarshalAs(UnmanagedType.Bool)] bool fPlannedCache, [MarshalAs(UnmanagedType.Bool)] bool fPlannedUncache ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanComplete( int hrStatus ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnApplyBegin( [MarshalAs(UnmanagedType.U4)] int dwPhaseCount, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnElevateBegin( [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnElevateComplete( int hrStatus ); /// /// See . /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnProgress( [MarshalAs(UnmanagedType.U4)] int dwProgressPercentage, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnError( [MarshalAs(UnmanagedType.U4)] ErrorType errorType, [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] int dwCode, [MarshalAs(UnmanagedType.LPWStr)] string wzError, [MarshalAs(UnmanagedType.I4)] int dwUIHint, [MarshalAs(UnmanagedType.U4)] int cData, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5, ArraySubType = UnmanagedType.LPWStr), In] string[] rgwzData, [MarshalAs(UnmanagedType.I4)] Result nRecommendation, [MarshalAs(UnmanagedType.I4)] ref Result pResult ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnRegisterBegin( [MarshalAs(UnmanagedType.I4)] RegistrationType recommendedRegistrationType, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, [MarshalAs(UnmanagedType.I4)] ref RegistrationType pRegistrationType ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnRegisterComplete( int hrStatus ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheBegin( [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCachePackageBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] int cCachePayloads, [MarshalAs(UnmanagedType.U8)] long dw64PackageCacheSize, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheAcquireBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.LPWStr)] string wzSource, [MarshalAs(UnmanagedType.LPWStr)] string wzDownloadUrl, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadContainerId, [MarshalAs(UnmanagedType.U4)] CacheOperation recommendation, [MarshalAs(UnmanagedType.I4)] ref CacheOperation action, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheAcquireProgress( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.U8)] long dw64Progress, [MarshalAs(UnmanagedType.U8)] long dw64Total, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheAcquireResolving( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3, ArraySubType = UnmanagedType.LPWStr), In] string[] searchPaths, [MarshalAs(UnmanagedType.U4)] int cSearchPaths, [MarshalAs(UnmanagedType.Bool)] bool fFoundLocal, [MarshalAs(UnmanagedType.U4)] int dwRecommendedSearchPath, [MarshalAs(UnmanagedType.LPWStr)] string wzDownloadUrl, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadContainerId, [MarshalAs(UnmanagedType.I4)] CacheResolveOperation recommendation, [MarshalAs(UnmanagedType.U4)] ref int dwChosenSearchPath, [MarshalAs(UnmanagedType.I4)] ref CacheResolveOperation action, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheAcquireComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, int hrStatus, BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION pAction ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheVerifyBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheVerifyProgress( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.U8)] long dw64Progress, [MarshalAs(UnmanagedType.U8)] long dw64Total, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.I4)] CacheVerifyStep verifyStep, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheVerifyComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, int hrStatus, BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION action ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCachePackageComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, int hrStatus, BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION recommendation, ref BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION action ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheComplete( int hrStatus ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecuteBegin( [MarshalAs(UnmanagedType.U4)] int cExecutingPackages, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecutePackageBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.Bool)] bool fExecute, [MarshalAs(UnmanagedType.U4)] ActionState action, [MarshalAs(UnmanagedType.U4)] INSTALLUILEVEL uiLevel, [MarshalAs(UnmanagedType.Bool)] bool fDisableExternalUiHandler, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecutePatchTarget( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzTargetProductCode, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecuteProgress( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] int dwProgressPercentage, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecuteMsiMessage( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] InstallMessage messageType, [MarshalAs(UnmanagedType.I4)] int dwUIHint, [MarshalAs(UnmanagedType.LPWStr)] string wzMessage, [MarshalAs(UnmanagedType.U4)] int cData, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4, ArraySubType = UnmanagedType.LPWStr), In] string[] rgwzData, [MarshalAs(UnmanagedType.I4)] Result nRecommendation, [MarshalAs(UnmanagedType.I4)] ref Result pResult ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecuteFilesInUse( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.U4)] int cFiles, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1, ArraySubType = UnmanagedType.LPWStr), In] string[] rgwzFiles, [MarshalAs(UnmanagedType.I4)] Result nRecommendation, [MarshalAs(UnmanagedType.I4)] FilesInUseType source, [MarshalAs(UnmanagedType.I4)] ref Result pResult ); /// /// See . /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecutePackageComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, int hrStatus, [MarshalAs(UnmanagedType.U4)] ApplyRestart restart, [MarshalAs(UnmanagedType.I4)] BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION recommendation, [MarshalAs(UnmanagedType.I4)] ref BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION pAction ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnExecuteComplete( int hrStatus ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnUnregisterBegin( [MarshalAs(UnmanagedType.I4)] RegistrationType recommendedRegistrationType, [MarshalAs(UnmanagedType.I4)] ref RegistrationType pRegistrationType ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnUnregisterComplete( int hrStatus ); /// /// See . /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnApplyComplete( int hrStatus, [MarshalAs(UnmanagedType.U4)] ApplyRestart restart, [MarshalAs(UnmanagedType.I4)] BOOTSTRAPPER_APPLYCOMPLETE_ACTION recommendation, [MarshalAs(UnmanagedType.I4)] ref BOOTSTRAPPER_APPLYCOMPLETE_ACTION pAction ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnLaunchApprovedExeBegin( [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnLaunchApprovedExeComplete( int hrStatus, int processId ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnBeginMsiTransactionBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnBeginMsiTransactionComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, int hrStatus ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCommitMsiTransactionBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCommitMsiTransactionComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, int hrStatus ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnRollbackMsiTransactionBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId ); /// /// See . /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnRollbackMsiTransactionComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzTransactionId, int hrStatus ); /// /// See . /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPauseAutomaticUpdatesBegin( ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPauseAutomaticUpdatesComplete( int hrStatus ); /// /// See . /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnSystemRestorePointBegin( ); /// /// See . /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnSystemRestorePointComplete( int hrStatus ); /// /// See . /// /// /// /// /// /// /// /// /// /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanForwardCompatibleBundle( [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, [MarshalAs(UnmanagedType.U4)] RelationType relationType, [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag, [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, [MarshalAs(UnmanagedType.Bool)] bool fRecommendedIgnoreBundle, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, [MarshalAs(UnmanagedType.Bool)] ref bool fIgnoreBundle ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheContainerOrPayloadVerifyBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheContainerOrPayloadVerifyProgress( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.U8)] long dw64Progress, [MarshalAs(UnmanagedType.U8)] long dw64Total, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCacheContainerOrPayloadVerifyComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, int hrStatus ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCachePayloadExtractBegin( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCachePayloadExtractProgress( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, [MarshalAs(UnmanagedType.U8)] long dw64Progress, [MarshalAs(UnmanagedType.U8)] long dw64Total, [MarshalAs(UnmanagedType.U4)] int dwOverallPercentage, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnCachePayloadExtractComplete( [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId, int hrStatus ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnSetUpdateBegin(); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnSetUpdateComplete( int hrStatus, [MarshalAs(UnmanagedType.LPWStr)] string wzPreviousPackageId, [MarshalAs(UnmanagedType.LPWStr)] string wzNewPackageId ); /// /// See . /// [PreserveSig] [return: MarshalAs(UnmanagedType.I4)] int OnPlanRestoreRelatedBundle( [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, [MarshalAs(UnmanagedType.U4)] RequestState recommendedState, [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState, [MarshalAs(UnmanagedType.Bool)] ref bool fCancel ); } /// /// The display level for the BA. /// public enum Display { /// /// /// Unknown, /// /// /// Embedded, /// /// /// None, /// /// /// Passive, /// /// /// Full, } /// /// Messages from Windows Installer (msi.h). /// public enum InstallMessage { /// /// premature termination, possibly fatal OOM /// FatalExit, /// /// formatted error message /// Error = 0x01000000, /// /// formatted warning message /// Warning = 0x02000000, /// /// user request message /// User = 0x03000000, /// /// informative message for log /// Info = 0x04000000, /// /// list of files in use that need to be replaced /// FilesInUse = 0x05000000, /// /// request to determine a valid source location /// ResolveSource = 0x06000000, /// /// insufficient disk space message /// OutOfDiskSpace = 0x07000000, /// /// start of action: action name & description /// ActionStart = 0x08000000, /// /// formatted data associated with individual action item /// ActionData = 0x09000000, /// /// progress gauge info: units so far, total /// Progress = 0x0a000000, /// /// product info for dialog: language Id, dialog caption /// CommonData = 0x0b000000, /// /// sent prior to UI initialization, no string data /// Initialize = 0x0c000000, /// /// sent after UI termination, no string data /// Terminate = 0x0d000000, /// /// sent prior to display or authored dialog or wizard /// ShowDialog = 0x0e000000, /// /// log only, to log performance number like action time /// Performance = 0x0f000000, /// /// the list of apps that the user can request Restart Manager to shut down and restart /// RMFilesInUse = 0x19000000, /// /// sent prior to server-side install of a product /// InstallStart = 0x1a000000, /// /// sent after server-side install /// InstallEnd = 0x1B000000, } /// /// The action to perform when a reboot is necessary. /// public enum Restart { /// /// /// Unknown, /// /// /// Never, /// /// /// Prompt, /// /// /// Automatic, /// /// /// Always, } /// /// The display name to use when registering in Add/Remove Programs. /// public enum RegistrationType { /// /// No registration. /// The engine will ignore None if it recommended InProgress or Full. /// None, /// /// The in-progress display name. /// InProgress, /// /// The default display name. /// Full, } /// /// Result codes (based on Dialog Box Command IDs from WinUser.h). /// public enum Result { /// /// /// Error = -1, /// /// /// None, /// /// /// Ok, /// /// /// Cancel, /// /// /// Abort, /// /// /// Retry, /// /// /// Ignore, /// /// /// Yes, /// /// /// No, /// /// / /// Close, /// /// /// Help, /// /// /// TryAgain, /// /// /// Continue, } /// /// Describes why a bundle or packaged is being resumed. /// public enum ResumeType { /// /// /// None, /// /// Resume information exists but is invalid. /// Invalid, /// /// The bundle was re-launched after an unexpected interruption. /// Interrupted, /// /// The bundle was re-launched after a reboot. /// Reboot, /// /// The bundle was re-launched after being suspended. /// Suspend, /// /// The bundle was launched from Add/Remove Programs. /// Arp, } /// /// Indicates what caused the error. /// public enum ErrorType { /// /// The error occurred trying to elevate. /// Elevate, /// /// The error came from the Windows Installer. /// WindowsInstaller, /// /// The error came from an EXE Package. /// ExePackage, /// /// The error came while trying to authenticate with an HTTP server. /// HttpServerAuthentication, /// /// The error came while trying to authenticate with an HTTP proxy. /// HttpProxyAuthentication, /// /// The error occurred during apply. /// Apply, }; /// /// Indicates the source of the FilesInUse message. /// public enum FilesInUseType { /// /// Generated from INSTALLMESSAGE_FILESINUSE. /// Msi, /// /// Generated from INSTALLMESSAGE_RMFILESINUSE. /// MsiRm, /// /// Generated from MMIO_CLOSE_APPS. /// Netfx, } /// /// The calculated operation for the related bundle. /// public enum RelatedOperation { /// /// /// None, /// /// The related bundle or package will be downgraded. /// Downgrade, /// /// The related package will be upgraded as a minor revision. /// MinorUpdate, /// /// The related bundle or package will be upgraded as a major revision. /// MajorUpgrade, /// /// The related bundle will be removed. /// Remove, /// /// The related bundle will be installed. /// Install, /// /// The related bundle will be repaired. /// Repair, }; /// /// The cache operation used to acquire a container or payload. /// public enum CacheOperation { /// /// There is no source available. /// None, /// /// Copy the payload or container from the chosen local source. /// Copy, /// /// Download the payload or container using the download URL. /// Download, /// /// Extract the payload from the container. /// Extract, } /// /// The source to be used to acquire a container or payload. /// public enum CacheResolveOperation { /// /// There is no source available. /// None, /// /// Copy the payload or container from the chosen local source. /// Local, /// /// Download the payload or container from the download URL. /// Download, /// /// Extract the payload from the container. /// Container, /// /// Look again for the payload or container locally. /// Retry, } /// /// The current step when verifying a container or payload. /// public enum CacheVerifyStep { /// /// Copying or moving the file from the working path to the unverified path. /// Not used during Layout. /// Stage, /// /// Hashing the file. /// Hash, /// /// Copying or moving the file to the final location. /// Finalize, } /// /// The restart state after a package or all packages were applied. /// public enum ApplyRestart { /// /// Package or chain does not require a restart. /// None, /// /// Package or chain requires a restart but it has not been initiated yet. /// RestartRequired, /// /// Package or chain has already initiated the restart. /// RestartInitiated } /// /// The relation type for related bundles. /// public enum RelationType { /// /// /// None, /// /// /// Detect, /// /// /// Upgrade, /// /// /// Addon, /// /// /// Patch, /// /// /// Dependent, /// /// /// Update, } /// /// One or more reasons why the application is requested to be closed or is being closed. /// [Flags] public enum EndSessionReasons { /// /// The system is shutting down or restarting (it is not possible to determine which event is occurring). /// Unknown, /// /// The application is using a file that must be replaced, the system is being serviced, or system resources are exhausted. /// CloseApplication, /// /// The application is forced to shut down. /// Critical = 0x40000000, /// /// The user is logging off. /// Logoff = unchecked((int)0x80000000) } /// /// The available actions for . /// public enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION { /// /// /// None, /// /// Instructs the engine to restart. /// The engine will not launch again after the machine is rebooted. /// Ignored if reboot was already initiated by . /// Restart, } /// /// The cache strategy to be used for the package. /// public enum BOOTSTRAPPER_CACHE_TYPE { /// /// The package will be cached in order to securely run the package, but will always be cleaned from the cache at the end. /// Remove, /// /// The package will be cached in order to run the package, and then kept in the cache until the package is uninstalled. /// Keep, /// /// The package will always be cached and stay in the cache, unless the package and bundle are both being uninstalled. /// Force, } /// /// The available actions for . /// public enum BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION { /// /// /// None, /// /// Instructs the engine to try the acquisition of the payload again. /// Ignored if hrStatus is a success. /// Retry, } /// /// The available actions for . /// public enum BOOTSTRAPPER_CACHEPACKAGECOMPLETE_ACTION { /// /// /// None, /// /// Instructs the engine to ignore non-vital package failures and continue with the caching. /// Ignored if hrStatus is a success or the package is vital. /// Ignore, /// /// Instructs the engine to try the acquisition and verification of the package again. /// Ignored if hrStatus is a success. /// Retry, } /// /// The available actions for . /// public enum BOOTSTRAPPER_CACHEVERIFYCOMPLETE_ACTION { /// /// /// None, /// /// Ignored if hrStatus is a success. /// RetryVerification, /// /// Ignored if hrStatus is a success. /// RetryAcquisition, } /// /// The available actions for . /// public enum BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION { /// /// /// None, /// /// Instructs the engine to ignore non-vital package failures and continue with the install. /// Ignored if hrStatus is a success or the package is vital. /// Ignore, /// /// Instructs the engine to try the execution of the package again. /// Ignored if hrStatus is a success. /// Retry, /// /// Instructs the engine to stop processing the chain and restart. /// The engine will launch again after the machine is restarted. /// Restart, /// /// Instructs the engine to stop processing the chain and suspend the current state. /// Suspend, } /// /// The result of evaluating a condition from a package. /// public enum BOOTSTRAPPER_PACKAGE_CONDITION_RESULT { /// /// No condition was authored. /// Default, /// /// Evaluated to false. /// False, /// /// Evaluated to true. /// True, } /// /// The available actions for . /// public enum BOOTSTRAPPER_RESOLVESOURCE_ACTION { /// /// Instructs the engine that the source can't be found. /// None, /// /// Instructs the engine to try the local source again. /// Retry, /// /// Instructs the engine to try the download source. /// Download, } /// /// The available actions for . /// public enum BOOTSTRAPPER_SHUTDOWN_ACTION { /// /// /// None, /// /// Instructs the engine to restart. /// The engine will not launch again after the machine is rebooted. /// Ignored if reboot was already initiated by . /// Restart, /// /// Instructs the engine to unload the bootstrapper application and /// restart the engine which will load the bootstrapper application again. /// Typically used to switch from a native bootstrapper application to a managed one. /// ReloadBootstrapper, /// /// Opts out of the engine behavior of trying to uninstall itself when no non-permanent packages are installed. /// SkipCleanup, } /// /// The file versioning options for REINSTALLMODE, see https://docs.microsoft.com/en-us/windows/win32/msi/reinstallmode. /// public enum BOOTSTRAPPER_MSI_FILE_VERSIONING { /// /// o /// Older, /// /// e /// Equal, /// /// a /// All, } /// /// The property Burn will add so the MSI can know the planned action for the package. /// public enum BURN_MSI_PROPERTY { /// /// No property will be added. /// None, /// /// Add BURNMSIINSTALL=1 /// Install, /// /// Add BURNMSIMODFIY=1 /// Modify, /// /// Add BURNMSIREPAIR=1 /// Repair, /// /// Add BURNMSIUNINSTALL=1 /// Uninstall, } /// /// From msi.h /// https://docs.microsoft.com/en-us/windows/win32/api/msi/nf-msi-msisetinternalui /// [Flags] public enum INSTALLUILEVEL { /// /// UI level is unchanged /// NoChange = 0, /// /// default UI is used /// Default = 1, /// /// completely silent installation /// None = 2, /// /// simple progress and error handling /// Basic = 3, /// /// authored UI, wizard dialogs suppressed /// Reduced = 4, /// /// authored UI with wizards, progress, errors /// Full = 5, /// /// display success/failure dialog at end of install /// EndDialog = 0x80, /// /// display only progress dialog /// ProgressOnly = 0x40, /// /// do not display the cancel button in basic UI /// HideCancel = 0x20, /// /// force display of source resolution even if quiet /// SourceResOnly = 0x100, /// /// show UAC prompt even if quiet /// Can only be used if on Windows Installer 5.0 or later /// UacOnly = 0x200, } }