From 39b9a6112c2ff97f31f195749e2142538e47a2eb Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 1 Apr 2022 15:44:34 -0500 Subject: Detect related bundles for BundlePackages. --- .../inc/BootstrapperApplication.h | 17 +++ .../WixToolset.Mba.Core/BootstrapperApplication.cs | 25 ++++ src/api/burn/WixToolset.Mba.Core/EventArgs.cs | 152 +++++++++------------ .../IBootstrapperApplication.cs | 14 ++ .../IDefaultBootstrapperApplication.cs | 13 +- src/api/burn/WixToolset.Mba.Core/PackageInfo.cs | 17 ++- src/api/burn/balutil/balinfo.cpp | 6 +- src/api/burn/balutil/inc/BAFunctions.h | 1 + src/api/burn/balutil/inc/BalBaseBAFunctions.h | 12 ++ src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | 1 + .../balutil/inc/BalBaseBootstrapperApplication.h | 13 ++ .../inc/BalBaseBootstrapperApplicationProc.h | 12 ++ .../burn/balutil/inc/IBootstrapperApplication.h | 10 ++ src/api/burn/balutil/inc/balinfo.h | 1 + .../WixToolset.Data/Symbols/SymbolDefinitions.cs | 4 + .../Symbols/WixBundleBundlePackageSymbol.cs | 8 ++ .../Symbols/WixBundlePackageRelatedBundleSymbol.cs | 60 ++++++++ 17 files changed, 270 insertions(+), 96 deletions(-) create mode 100644 src/api/wix/WixToolset.Data/Symbols/WixBundlePackageRelatedBundleSymbol.cs (limited to 'src/api') diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h index 943f5ead..fbbd10ee 100644 --- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h +++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h @@ -226,6 +226,7 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE, BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPROCESSCANCEL, + BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLEPACKAGE, }; enum BOOTSTRAPPER_APPLYCOMPLETE_ACTION @@ -793,6 +794,22 @@ struct BA_ONDETECTRELATEDBUNDLE_RESULTS BOOL fCancel; }; +struct BA_ONDETECTRELATEDBUNDLEPACKAGE_ARGS +{ + DWORD cbSize; + LPCWSTR wzPackageId; + LPCWSTR wzBundleId; + BOOTSTRAPPER_RELATION_TYPE relationType; + BOOL fPerMachine; + LPCWSTR wzVersion; +}; + +struct BA_ONDETECTRELATEDBUNDLEPACKAGE_RESULTS +{ + DWORD cbSize; + BOOL fCancel; +}; + struct BA_ONDETECTRELATEDMSIPACKAGE_ARGS { DWORD cbSize; diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs index 5ed064fa..41738bf6 100644 --- a/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperApplication.cs @@ -283,6 +283,9 @@ namespace WixToolset.Mba.Core /// public event EventHandler ExecuteProcessCancel; + /// + public event EventHandler DetectRelatedBundlePackage; + /// /// Entry point that is called when the bootstrapper application is ready to run. /// @@ -1385,6 +1388,19 @@ namespace WixToolset.Mba.Core } } + /// + /// Called by the engine, raises the event. + /// + /// Additional arguments for this event. + protected virtual void OnDetectRelatedBundlePackage(DetectRelatedBundlePackageEventArgs args) + { + EventHandler handler = this.DetectRelatedBundlePackage; + if (null != handler) + { + handler(this, args); + } + } + #region IBootstrapperApplication Members int IBootstrapperApplication.BAProc(int message, IntPtr pvArgs, IntPtr pvResults, IntPtr pvContext) @@ -2144,6 +2160,15 @@ namespace WixToolset.Mba.Core return args.HResult; } + int IBootstrapperApplication.OnDetectRelatedBundlePackage(string wzPackageId, string wzProductCode, RelationType relationType, bool fPerMachine, string wzVersion, ref bool fCancel) + { + DetectRelatedBundlePackageEventArgs args = new DetectRelatedBundlePackageEventArgs(wzPackageId, wzProductCode, relationType, fPerMachine, wzVersion, fCancel); + this.OnDetectRelatedBundlePackage(args); + + fCancel = args.Cancel; + return args.HResult; + } + #endregion } } diff --git a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs index c2c73067..07b14b3d 100644 --- a/src/api/burn/WixToolset.Mba.Core/EventArgs.cs +++ b/src/api/burn/WixToolset.Mba.Core/EventArgs.cs @@ -2030,10 +2030,7 @@ namespace WixToolset.Mba.Core [Serializable] public class LaunchApprovedExeBeginEventArgs : CancellableHResultEventArgs { - /// - /// - /// - /// + /// public LaunchApprovedExeBeginEventArgs(bool cancelRecommendation) : base(cancelRecommendation) { @@ -2046,27 +2043,18 @@ namespace WixToolset.Mba.Core [Serializable] public class LaunchApprovedExeCompleteEventArgs : StatusEventArgs { - private int processId; - - /// - /// - /// - /// - /// + /// public LaunchApprovedExeCompleteEventArgs(int hrStatus, int processId) : base(hrStatus) { - this.processId = processId; + this.ProcessId = processId; } /// /// Gets the ProcessId of the process that was launched. /// This is only valid if the status reports success. /// - public int ProcessId - { - get { return this.processId; } - } + public int ProcessId { get; private set; } } /// @@ -2075,26 +2063,17 @@ namespace WixToolset.Mba.Core [Serializable] public class BeginMsiTransactionBeginEventArgs : CancellableHResultEventArgs { - private string transactionId; - - /// - /// - /// - /// - /// + /// public BeginMsiTransactionBeginEventArgs(string transactionId, bool cancelRecommendation) : base(cancelRecommendation) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2103,26 +2082,17 @@ namespace WixToolset.Mba.Core [Serializable] public class BeginMsiTransactionCompleteEventArgs : StatusEventArgs { - private string transactionId; - - /// - /// - /// - /// - /// + /// public BeginMsiTransactionCompleteEventArgs(string transactionId, int hrStatus) : base(hrStatus) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2131,26 +2101,17 @@ namespace WixToolset.Mba.Core [Serializable] public class CommitMsiTransactionBeginEventArgs : CancellableHResultEventArgs { - private string transactionId; - - /// - /// - /// - /// - /// + /// public CommitMsiTransactionBeginEventArgs(string transactionId, bool cancelRecommendation) : base(cancelRecommendation) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2159,26 +2120,17 @@ namespace WixToolset.Mba.Core [Serializable] public class CommitMsiTransactionCompleteEventArgs : StatusEventArgs { - private string transactionId; - - /// - /// - /// - /// - /// + /// public CommitMsiTransactionCompleteEventArgs(string transactionId, int hrStatus) : base(hrStatus) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2187,24 +2139,16 @@ namespace WixToolset.Mba.Core [Serializable] public class RollbackMsiTransactionBeginEventArgs : HResultEventArgs { - private string transactionId; - - /// - /// - /// - /// + /// public RollbackMsiTransactionBeginEventArgs(string transactionId) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2213,26 +2157,17 @@ namespace WixToolset.Mba.Core [Serializable] public class RollbackMsiTransactionCompleteEventArgs : StatusEventArgs { - private string transactionId; - - /// - /// - /// - /// - /// + /// public RollbackMsiTransactionCompleteEventArgs(string transactionId, int hrStatus) : base(hrStatus) { - this.transactionId = transactionId; + this.TransactionId = transactionId; } /// /// Gets the MSI transaction Id. /// - public string TransactionId - { - get { return this.transactionId; } - } + public string TransactionId { get; private set; } } /// @@ -2524,4 +2459,47 @@ namespace WixToolset.Mba.Core /// public BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION Action { get; set; } } + + /// + /// Event arguments for + /// + [Serializable] + public class DetectRelatedBundlePackageEventArgs : CancellableHResultEventArgs + { + /// + public DetectRelatedBundlePackageEventArgs(string packageId, string productCode, RelationType relationType, bool perMachine, string version, bool cancelRecommendation) + : base(cancelRecommendation) + { + this.PackageId = packageId; + this.ProductCode = productCode; + this.RelationType = relationType; + this.PerMachine = perMachine; + this.Version = version; + } + + /// + /// Gets the identity of the product's package detected. + /// + public string PackageId { get; private set; } + + /// + /// Gets the identity of the related bundle detected. + /// + public string ProductCode { get; private set; } + + /// + /// Gets the relationship type of the related bundle. + /// + public RelationType RelationType { get; private set; } + + /// + /// Gets whether the detected bundle is per machine. + /// + public bool PerMachine { get; private set; } + + /// + /// Gets the version of the related bundle detected. + /// + public string Version { get; private set; } + } } diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs index 7cf0957a..ae642474 100644 --- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplication.cs @@ -1182,6 +1182,20 @@ namespace WixToolset.Mba.Core [MarshalAs(UnmanagedType.I4)] BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION recommendation, [MarshalAs(UnmanagedType.I4)] ref BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION pAction ); + + /// + /// See . + /// + [PreserveSig] + [return: MarshalAs(UnmanagedType.I4)] + int OnDetectRelatedBundlePackage( + [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, + [MarshalAs(UnmanagedType.LPWStr)] string wzBundleId, + [MarshalAs(UnmanagedType.U4)] RelationType relationType, + [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, + [MarshalAs(UnmanagedType.LPWStr)] string wzVersion, + [MarshalAs(UnmanagedType.Bool)] ref bool fCancel + ); } /// diff --git a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs index 21d99b32..77089e83 100644 --- a/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs +++ b/src/api/burn/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs @@ -36,15 +36,15 @@ namespace WixToolset.Mba.Core /// /// Fired when the engine has begun acquiring the payload or container. - /// The BA can change the source using - /// or . + /// The BA can change the source using + /// or . /// event EventHandler CacheAcquireBegin; /// /// Fired when the engine has completed the acquisition of the payload or container. - /// The BA can change the source using - /// or . + /// The BA can change the source using + /// or . /// event EventHandler CacheAcquireComplete; @@ -178,6 +178,11 @@ namespace WixToolset.Mba.Core /// event EventHandler DetectRelatedBundle; + /// + /// Fired when a related bundle has been detected for a bundle package. + /// + event EventHandler DetectRelatedBundlePackage; + /// /// Fired when a related MSI package has been detected for a package. /// diff --git a/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs b/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs index 3681a497..39fe4d73 100644 --- a/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs +++ b/src/api/burn/WixToolset.Mba.Core/PackageInfo.cs @@ -56,6 +56,11 @@ namespace WixToolset.Mba.Core /// /// UpdateBundle, + + /// + /// + /// + ChainBundle, } /// @@ -220,7 +225,11 @@ namespace WixToolset.Mba.Core return null; } - if (attributeValue.Equals("Exe", StringComparison.InvariantCulture)) + if (attributeValue.Equals("Bundle", StringComparison.InvariantCulture)) + { + return PackageType.ChainBundle; + } + else if (attributeValue.Equals("Exe", StringComparison.InvariantCulture)) { return PackageType.Exe; } @@ -268,7 +277,7 @@ namespace WixToolset.Mba.Core package.Type = PackageType.UpgradeBundle; break; default: - throw new Exception(string.Format("Unknown related bundle type: {0}", relationType)); + throw new Exception(String.Format("Unknown related bundle type: {0}", relationType)); } return package; @@ -302,7 +311,7 @@ namespace WixToolset.Mba.Core if (!packagesById.TryGetValue(id, out var ipackage)) { - throw new Exception(string.Format("Failed to find package specified in WixBalPackageInfo: {0}", id)); + throw new Exception(String.Format("Failed to find package specified in WixBalPackageInfo: {0}", id)); } var package = (PackageInfo)ipackage; @@ -322,7 +331,7 @@ namespace WixToolset.Mba.Core if (!packagesById.TryGetValue(id, out var ipackage)) { - throw new Exception(string.Format("Failed to find package specified in WixMbaPrereqInformation: {0}", id)); + throw new Exception(String.Format("Failed to find package specified in WixMbaPrereqInformation: {0}", id)); } var package = (PackageInfo)ipackage; diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index d9cc9b76..f0eb9904 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp @@ -433,7 +433,11 @@ static HRESULT ParsePackagesFromXml( hr = XmlGetAttributeEx(pNode, L"PackageType", &scz); ExitOnFailure(hr, "Failed to get package type for package."); - if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, L"Exe", -1, scz, -1)) + if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, L"Bundle", -1, scz, -1)) + { + prgPackages[iPackage].type = BAL_INFO_PACKAGE_TYPE_BUNDLE_CHAIN; + } + else if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, L"Exe", -1, scz, -1)) { prgPackages[iPackage].type = BAL_INFO_PACKAGE_TYPE_EXE; } diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h index 158e65b5..9be3f62f 100644 --- a/src/api/burn/balutil/inc/BAFunctions.h +++ b/src/api/burn/balutil/inc/BAFunctions.h @@ -92,6 +92,7 @@ enum BA_FUNCTIONS_MESSAGE BA_FUNCTIONS_MESSAGE_ONPLANRELATEDBUNDLETYPE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE, BA_FUNCTIONS_MESSAGE_ONAPPLYDOWNGRADE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE, BA_FUNCTIONS_MESSAGE_ONEXECUTEPROCESSCANCEL = BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPROCESSCANCEL, + BA_FUNCTIONS_MESSAGE_ONDETECTRELATEDBUNDLEPACKAGE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLEPACKAGE, BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, BA_FUNCTIONS_MESSAGE_WNDPROC, diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h index 614d4bcf..6bde05d2 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h @@ -887,6 +887,18 @@ public: // IBootstrapperApplication return S_OK; } + virtual STDMETHODIMP OnDetectRelatedBundlePackage( + __in_z LPCWSTR /*wzPackageId*/, + __in_z LPCWSTR /*wzBundleId*/, + __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, + __in BOOL /*fPerMachine*/, + __in LPCWSTR /*wzVersion*/, + __inout BOOL* /*pfCancel*/ + ) + { + return S_OK; + } + public: // IBAFunctions virtual STDMETHODIMP OnPlan( ) diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h index b96a180c..4564ad0c 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h @@ -163,6 +163,7 @@ static HRESULT WINAPI BalBaseBAFunctionsProc( case BA_FUNCTIONS_MESSAGE_ONPLANRELATEDBUNDLETYPE: case BA_FUNCTIONS_MESSAGE_ONAPPLYDOWNGRADE: case BA_FUNCTIONS_MESSAGE_ONEXECUTEPROCESSCANCEL: + case BA_FUNCTIONS_MESSAGE_ONDETECTRELATEDBUNDLEPACKAGE: hr = BalBaseBootstrapperApplicationProc((BOOTSTRAPPER_APPLICATION_MESSAGE)message, pvArgs, pvResults, pvContext); break; case BA_FUNCTIONS_MESSAGE_ONTHEMELOADED: diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h index 25570ffd..b661c7c9 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h @@ -1087,6 +1087,19 @@ public: // IBootstrapperApplication return S_OK; } + virtual STDMETHODIMP OnDetectRelatedBundlePackage( + __in_z LPCWSTR /*wzPackageId*/, + __in_z LPCWSTR /*wzBundleId*/, + __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, + __in BOOL /*fPerMachine*/, + __in LPCWSTR /*wzVersion*/, + __inout BOOL* pfCancel + ) + { + *pfCancel |= CheckCanceled(); + return S_OK; + } + public: //CBalBaseBootstrapperApplication virtual STDMETHODIMP Initialize( __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h index b196d183..4ef7bac5 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplicationProc.h @@ -756,6 +756,15 @@ static HRESULT BalBaseBAProcOnApplyDowngrade( return pBA->OnApplyDowngrade(pArgs->hrRecommended, &pResults->hrStatus); } +static HRESULT BalBaseBAProcOnDetectRelatedBundlePackage( + __in IBootstrapperApplication* pBA, + __in BA_ONDETECTRELATEDBUNDLEPACKAGE_ARGS* pArgs, + __inout BA_ONDETECTRELATEDBUNDLEPACKAGE_RESULTS* pResults + ) +{ + return pBA->OnDetectRelatedBundlePackage(pArgs->wzPackageId, pArgs->wzBundleId, pArgs->relationType, pArgs->fPerMachine, pArgs->wzVersion, &pResults->fCancel); +} + /******************************************************************* BalBaseBootstrapperApplicationProc - requires pvContext to be of type IBootstrapperApplication. Provides a default mapping between the new message based BA interface and @@ -1024,6 +1033,9 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc( case BOOTSTRAPPER_APPLICATION_MESSAGE_ONEXECUTEPROCESSCANCEL: hr = BalBaseBAProcOnExecuteProcessCancel(pBA, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); break; + case BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLEPACKAGE: + hr = BalBaseBAProcOnDetectRelatedBundlePackage(pBA, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); + break; } } diff --git a/src/api/burn/balutil/inc/IBootstrapperApplication.h b/src/api/burn/balutil/inc/IBootstrapperApplication.h index 6174c290..a4840228 100644 --- a/src/api/burn/balutil/inc/IBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/IBootstrapperApplication.h @@ -723,4 +723,14 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A __in BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION recommendation, __inout BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION* pAction ) = 0; + + // OnDetectRelatedBundlePackage - called when the engine detects a related bundle for a BundlePackage. + STDMETHOD(OnDetectRelatedBundlePackage)( + __in_z LPCWSTR wzPackageId, + __in_z LPCWSTR wzBundleId, + __in BOOTSTRAPPER_RELATION_TYPE relationType, + __in BOOL fPerMachine, + __in_z LPCWSTR wzVersion, + __inout BOOL* pfCancel + ) = 0; }; diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h index 8f61685f..0c7a5b93 100644 --- a/src/api/burn/balutil/inc/balinfo.h +++ b/src/api/burn/balutil/inc/balinfo.h @@ -17,6 +17,7 @@ typedef enum BAL_INFO_PACKAGE_TYPE BAL_INFO_PACKAGE_TYPE_BUNDLE_ADDON, BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, BAL_INFO_PACKAGE_TYPE_BUNDLE_UPDATE, + BAL_INFO_PACKAGE_TYPE_BUNDLE_CHAIN, } BAL_INFO_PACKAGE_TYPE; typedef enum _BAL_INFO_RESTART diff --git a/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs b/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs index d4a91343..1fd8ded1 100644 --- a/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs +++ b/src/api/wix/WixToolset.Data/Symbols/SymbolDefinitions.cs @@ -142,6 +142,7 @@ namespace WixToolset.Data WixBundlePackageCommandLine, WixBundlePackageExitCode, WixBundlePackageGroup, + WixBundlePackageRelatedBundle, WixBundlePatchTargetCode, WixBundlePayload, WixBundlePayloadGroup, @@ -618,6 +619,9 @@ namespace WixToolset.Data case SymbolDefinitionType.WixBundlePackageGroup: return SymbolDefinitions.WixBundlePackageGroup; + case SymbolDefinitionType.WixBundlePackageRelatedBundle: + return SymbolDefinitions.WixBundlePackageRelatedBundle; + case SymbolDefinitionType.WixBundlePatchTargetCode: return SymbolDefinitions.WixBundlePatchTargetCode; diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs index 36b9eb67..dcf59e28 100644 --- a/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs +++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs @@ -12,6 +12,7 @@ namespace WixToolset.Data { new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.BundleId), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Version), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.InstallCommand), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.RepairCommand), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.UninstallCommand), IntermediateFieldType.String), @@ -28,6 +29,7 @@ namespace WixToolset.Data.Symbols { Attributes, BundleId, + Version, InstallCommand, RepairCommand, UninstallCommand, @@ -65,6 +67,12 @@ namespace WixToolset.Data.Symbols set => this.Set((int)WixBundleBundlePackageSymbolFields.BundleId, value); } + public string Version + { + get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.Version]; + set => this.Set((int)WixBundleBundlePackageSymbolFields.Version, value); + } + public string InstallCommand { get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.InstallCommand]; diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageRelatedBundleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageRelatedBundleSymbol.cs new file mode 100644 index 00000000..dfb48714 --- /dev/null +++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageRelatedBundleSymbol.cs @@ -0,0 +1,60 @@ +// 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.Data +{ + using WixToolset.Data.Symbols; + + public static partial class SymbolDefinitions + { + public static readonly IntermediateSymbolDefinition WixBundlePackageRelatedBundle = new IntermediateSymbolDefinition( + SymbolDefinitionType.WixBundlePackageRelatedBundle, + new[] + { + new IntermediateFieldDefinition(nameof(WixBundlePackageRelatedBundleSymbolFields.PackageRef), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixBundlePackageRelatedBundleSymbolFields.BundleId), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixBundlePackageRelatedBundleSymbolFields.Action), IntermediateFieldType.Number), + }, + typeof(WixBundlePackageRelatedBundleSymbol)); + } +} + +namespace WixToolset.Data.Symbols +{ + public enum WixBundlePackageRelatedBundleSymbolFields + { + PackageRef, + BundleId, + Action, + } + + public class WixBundlePackageRelatedBundleSymbol : IntermediateSymbol + { + public WixBundlePackageRelatedBundleSymbol() : base(SymbolDefinitions.WixBundlePackageRelatedBundle, null, null) + { + } + + public WixBundlePackageRelatedBundleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(SymbolDefinitions.WixBundlePackageRelatedBundle, sourceLineNumber, id) + { + } + + public IntermediateField this[WixBundlePackageRelatedBundleSymbolFields index] => this.Fields[(int)index]; + + public string PackageRef + { + get => (string)this.Fields[(int)WixBundlePackageRelatedBundleSymbolFields.PackageRef]; + set => this.Set((int)WixBundlePackageRelatedBundleSymbolFields.PackageRef, value); + } + + public string BundleId + { + get => (string)this.Fields[(int)WixBundlePackageRelatedBundleSymbolFields.BundleId]; + set => this.Set((int)WixBundlePackageRelatedBundleSymbolFields.BundleId, value); + } + + public RelatedBundleActionType Action + { + get => (RelatedBundleActionType)this.Fields[(int)WixBundlePackageRelatedBundleSymbolFields.Action].AsNumber(); + set => this.Set((int)WixBundlePackageRelatedBundleSymbolFields.Action, (int)value); + } + } +} -- cgit v1.2.3-55-g6feb