From 4c3640ad5ef05b5be44df2aee2a23baa40471422 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 13 Apr 2022 10:14:45 -0500 Subject: Write EngineVersion, ProtocolVersion, and Win64 to the Burn manifest. --- .../Symbols/WixBundleBundlePackageSymbol.cs | 8 ++ .../WixBundleHarvestedBundlePackageSymbol.cs | 8 ++ src/burn/Directory.Build.props | 4 + src/burn/engine/engine.vcxproj | 32 ++++-- src/burn/engine/manifest.cpp | 50 +++++++++ src/burn/engine/precomp.h | 1 + src/burn/test/BurnUnitTest/BurnTestFixture.h | 2 +- src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj | 4 +- src/burn/test/BurnUnitTest/ManifestTest.cpp | 10 +- src/burn/test/BurnUnitTest/precomp.h | 2 + src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs | 2 + .../Bundles/CreateBurnManifestCommand.cs | 5 + .../Bundles/ProcessBundlePackageCommand.cs | 113 +++++++++++++-------- .../WixToolset.Core.Burn.csproj | 2 + .../BundleFixture.cs | 44 ++++++++ 15 files changed, 230 insertions(+), 57 deletions(-) (limited to 'src') diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs index 24e63881..8d930580 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.EngineVersion), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Version), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.InstallCommand), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.RepairCommand), IntermediateFieldType.String), @@ -29,6 +30,7 @@ namespace WixToolset.Data.Symbols { Attributes, BundleId, + EngineVersion, Version, InstallCommand, RepairCommand, @@ -66,6 +68,12 @@ namespace WixToolset.Data.Symbols set => this.Set((int)WixBundleBundlePackageSymbolFields.BundleId, value); } + public string EngineVersion + { + get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.EngineVersion]; + set => this.Set((int)WixBundleBundlePackageSymbolFields.EngineVersion, value); + } + public string Version { get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.Version]; diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs index 01e18728..9f205ce6 100644 --- a/src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs +++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs @@ -12,6 +12,7 @@ namespace WixToolset.Data { new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number), new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.BundleId), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.EngineVersion), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ProtocolVersion), IntermediateFieldType.Number), new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Version), IntermediateFieldType.String), @@ -30,6 +31,7 @@ namespace WixToolset.Data.Symbols { Attributes, BundleId, + EngineVersion, ManifestNamespace, ProtocolVersion, Version, @@ -69,6 +71,12 @@ namespace WixToolset.Data.Symbols set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.BundleId, value); } + public string EngineVersion + { + get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion].AsString(); + set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion, value); + } + public string ManifestNamespace { get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace].AsString(); diff --git a/src/burn/Directory.Build.props b/src/burn/Directory.Build.props index f929fa2b..6050781d 100644 --- a/src/burn/Directory.Build.props +++ b/src/burn/Directory.Build.props @@ -7,4 +7,8 @@ + + + $(BaseIntermediateOutputPath)..\ + diff --git a/src/burn/engine/engine.vcxproj b/src/burn/engine/engine.vcxproj index 5c4860f1..b5cfcb45 100644 --- a/src/burn/engine/engine.vcxproj +++ b/src/burn/engine/engine.vcxproj @@ -35,13 +35,14 @@ engine Unicode Native component of WixToolset.Burn + ClCompile - ..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(ProjectAdditionalIncludeDirectories) + ..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(BurnGeneratedHeaderDirectory);$(ProjectAdditionalIncludeDirectories) @@ -144,14 +145,15 @@ - - + + Compiling message file... mc.exe -h "$(IntDir)." -r "$(IntDir)." -A -c -z engine.messages "$(InputDir)engine.mc" rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc" + $(InputDir)engine.mc $(IntDir)engine.messages.h;$(IntDir)engine.messages.rc - - + + @@ -160,14 +162,26 @@ rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc" $(GitBaseVersionPatch) $(GitCommits) $(rmj).$(rmm).$(rup).$(rpr) - rmj=$(rmj);rmm=$(rmm);rup=$(rup);rpr=$(rpr);szVerMajorMinorBuild="$(szVerMajorMinorBuild)" - - $(wixver);%(PreprocessorDefinitions) - + + + diff --git a/src/burn/engine/manifest.cpp b/src/burn/engine/manifest.cpp index 7e16de13..0cd10dbb 100644 --- a/src/burn/engine/manifest.cpp +++ b/src/burn/engine/manifest.cpp @@ -7,6 +7,11 @@ static HRESULT ParseFromXml( __in IXMLDOMDocument* pixdDocument, __in BURN_ENGINE_STATE* pEngineState ); +#if DEBUG +static void ValidateHarvestingAttributes( + __in IXMLDOMDocument* pixdDocument + ); +#endif // function definitions @@ -43,6 +48,10 @@ extern "C" HRESULT ManifestLoadXmlFromBuffer( hr = XmlLoadDocumentFromBuffer(pbBuffer, cbBuffer, &pixdDocument); ExitOnFailure(hr, "Failed to load manifest as XML document."); +#if DEBUG + ValidateHarvestingAttributes(pixdDocument); +#endif + hr = ParseFromXml(pixdDocument, pEngineState); LExit: @@ -162,3 +171,44 @@ LExit: ReleaseObject(pixeBundle); return hr; } + +#if DEBUG +static void ValidateHarvestingAttributes( + __in IXMLDOMDocument* pixdDocument + ) +{ + HRESULT hr = S_OK; + IXMLDOMElement* pixeBundle = NULL; + LPWSTR sczEngineVersion = NULL; + DWORD dwProtocolVersion = 0; + BOOL fWin64 = FALSE; + + hr = pixdDocument->get_documentElement(&pixeBundle); + ExitOnFailure(hr, "Failed to get document element."); + + hr = XmlGetAttributeEx(pixeBundle, L"EngineVersion", &sczEngineVersion); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@EngineVersion attribute."); + + hr = XmlGetAttributeUInt32(pixeBundle, L"ProtocolVersion", &dwProtocolVersion); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@ProtocolVersion attribute."); + + hr = XmlGetYesNoAttribute(pixeBundle, L"Win64", &fWin64); + ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@Win64 attribute."); + + Assert(CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczEngineVersion, -1, wzVerMajorMinorBuild, -1)); + + Assert(BURN_PROTOCOL_VERSION == dwProtocolVersion); + +#if !defined(_WIN64) + Assert(!fWin64); +#else + Assert(fWin64); +#endif + +LExit: + AssertSz(SUCCEEDED(hr), "Failed to get harvesting attributes."); + + ReleaseStr(sczEngineVersion); + ReleaseObject(pixeBundle); +} +#endif diff --git a/src/burn/engine/precomp.h b/src/burn/engine/precomp.h index c83c1e74..19a6d48b 100644 --- a/src/burn/engine/precomp.h +++ b/src/burn/engine/precomp.h @@ -103,4 +103,5 @@ #include "EngineForApplication.h" #include "EngineForExtension.h" #include "engine.messages.h" +#include "engine.version.h" #include "engine.h" diff --git a/src/burn/test/BurnUnitTest/BurnTestFixture.h b/src/burn/test/BurnUnitTest/BurnTestFixture.h index 103972ef..470c81c1 100644 --- a/src/burn/test/BurnUnitTest/BurnTestFixture.h +++ b/src/burn/test/BurnUnitTest/BurnTestFixture.h @@ -33,7 +33,7 @@ namespace Bootstrapper this->testDirectory = WixBuildTools::TestSupport::TestData::Get(); - LogInitialize(::GetModuleHandleW(NULL)); + LogInitialize(::GetModuleHandleW(L"BurnUnitTest.dll")); LogSetLevel(REPORT_DEBUG, FALSE); diff --git a/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj b/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj index b0159840..b05666b2 100644 --- a/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj +++ b/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj @@ -39,8 +39,8 @@ - $(ProjectAdditionalIncludeDirectories);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc - cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib + $(ProjectAdditionalIncludeDirectories);$(BurnGeneratedHeaderDirectory);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc + cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib;engine.res diff --git a/src/burn/test/BurnUnitTest/ManifestTest.cpp b/src/burn/test/BurnUnitTest/ManifestTest.cpp index 6973c772..d899e3f9 100644 --- a/src/burn/test/BurnUnitTest/ManifestTest.cpp +++ b/src/burn/test/BurnUnitTest/ManifestTest.cpp @@ -30,7 +30,13 @@ namespace Bootstrapper try { LPCSTR szDocument = - "" + "" " " " " " " @@ -38,7 +44,7 @@ namespace Bootstrapper " "; + ""; hr = CacheInitialize(&engineState.cache, &engineState.internalCommand); TestThrowOnFailure(hr, L"Failed initialize cache."); diff --git a/src/burn/test/BurnUnitTest/precomp.h b/src/burn/test/BurnUnitTest/precomp.h index ded9fc2d..11e54284 100644 --- a/src/burn/test/BurnUnitTest/precomp.h +++ b/src/burn/test/BurnUnitTest/precomp.h @@ -71,6 +71,8 @@ #include "splashscreen.h" #include "detect.h" +#include "engine.version.h" + #pragma managed #include diff --git a/src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs b/src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs index 4f1c7d84..25ad88cf 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs @@ -111,8 +111,10 @@ namespace WixToolset.Core.Burn.Bundles protected const uint BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0 = 52; protected const uint BURN_SECTION_MIN_SIZE = BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0; + // Keep in sync with burn\engine\inc\engine.h protected const uint BURN_SECTION_MAGIC = 0x00f14300; protected const uint BURN_SECTION_VERSION = 0x00000002; + public const uint BURN_PROTOCOL_VERSION = 0x00000001; protected string fileExe; protected uint peOffset = UInt32.MaxValue; diff --git a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs index 508395f5..68f5002f 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs @@ -70,6 +70,11 @@ namespace WixToolset.Core.Burn.Bundles writer.WriteStartElement("BurnManifest", BurnCommon.BurnNamespace); + // Write attributes to support harvesting bundles. + writer.WriteAttributeString("EngineVersion", $"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}"); + writer.WriteAttributeString("ProtocolVersion", BurnCommon.BURN_PROTOCOL_VERSION.ToString()); + writer.WriteAttributeString("Win64", this.BundleSymbol.Platform == Platform.X86 ? "no" : "yes"); + // Write the condition, if there is one if (null != this.BundleSymbol.Condition) { diff --git a/src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs index 47231ccb..c5a1aee0 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs @@ -72,7 +72,8 @@ namespace WixToolset.Core.Burn.Bundles this.ChainPackage.Win64 = harvestedBundlePackage.Win64; this.BundlePackage.BundleId = Guid.Parse(harvestedBundlePackage.BundleId).ToString("B").ToUpperInvariant(); - this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == 1; // Keep in sync with burn\engine\inc\engine.h + this.BundlePackage.EngineVersion = harvestedBundlePackage.EngineVersion; + this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == BurnCommon.BURN_PROTOCOL_VERSION; var supportsArpSystemComponent = BurnCommon.BurnV3Namespace != harvestedBundlePackage.ManifestNamespace; if (!supportsArpSystemComponent && !this.ChainPackage.Visible) @@ -104,6 +105,7 @@ namespace WixToolset.Core.Burn.Bundles { bool win64; string bundleId; + string engineVersion; int protocolVersion; string manifestNamespace; bool perMachine; @@ -133,50 +135,8 @@ namespace WixToolset.Core.Burn.Bundles this.TrackedFiles.Add(this.BackendHelper.TrackFile(filePath, TrackedFileType.Temporary, sourceLineNumbers)); } - switch (burnReader.MachineType) - { - case BurnCommon.IMAGE_FILE_MACHINE_AM33: - case BurnCommon.IMAGE_FILE_MACHINE_ARM: - case BurnCommon.IMAGE_FILE_MACHINE_ARMNT: - case BurnCommon.IMAGE_FILE_MACHINE_I386: - case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32: - case BurnCommon.IMAGE_FILE_MACHINE_M32R: - win64 = false; - break; - case BurnCommon.IMAGE_FILE_MACHINE_AMD64: - case BurnCommon.IMAGE_FILE_MACHINE_ARM64: - case BurnCommon.IMAGE_FILE_MACHINE_IA64: - case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64: - win64 = true; - break; - case BurnCommon.IMAGE_FILE_MACHINE_EBC: - case BurnCommon.IMAGE_FILE_MACHINE_MIPS16: - case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU: - case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16: - case BurnCommon.IMAGE_FILE_MACHINE_POWERPC: - case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP: - case BurnCommon.IMAGE_FILE_MACHINE_R4000: - case BurnCommon.IMAGE_FILE_MACHINE_RISCV32: - case BurnCommon.IMAGE_FILE_MACHINE_RISCV64: - case BurnCommon.IMAGE_FILE_MACHINE_RISCV128: - case BurnCommon.IMAGE_FILE_MACHINE_SH3: - case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP: - case BurnCommon.IMAGE_FILE_MACHINE_SH4: - case BurnCommon.IMAGE_FILE_MACHINE_SH5: - case BurnCommon.IMAGE_FILE_MACHINE_THUMB: - case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2: - default: - win64 = false; - this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType)); - break; - } - bundleId = burnReader.BundleId.ToString("B").ToUpperInvariant(); - // Assume that the .wixburn section version will change when the Burn protocol changes. - // This should be a safe assumption since we will need to add the protocol version to the section to support this harvesting. - protocolVersion = burnReader.Version == 2 ? 1 : 0; - try { var document = new XmlDocument(); @@ -189,6 +149,10 @@ namespace WixToolset.Core.Burn.Bundles return null; } + engineVersion = document.DocumentElement.GetAttribute("EngineVersion"); + protocolVersion = this.ProcessProtocolVersion(burnReader, document); + win64 = this.ProcessWin64(burnReader, document, sourceLineNumbers, sourcePath); + manifestNamespace = document.DocumentElement.NamespaceURI; namespaceManager.AddNamespace("burn", document.DocumentElement.NamespaceURI); @@ -227,6 +191,7 @@ namespace WixToolset.Core.Burn.Bundles { Win64 = win64, BundleId = bundleId, + EngineVersion = engineVersion, ManifestNamespace = manifestNamespace, ProtocolVersion = protocolVersion, PerMachine = perMachine, @@ -236,6 +201,68 @@ namespace WixToolset.Core.Burn.Bundles }); } + private int ProcessProtocolVersion(BurnReader burnReader, XmlDocument document) + { + var protocolVersionValue = document.DocumentElement.GetAttribute("ProtocolVersion"); + + if (Int32.TryParse(protocolVersionValue, out var protocolVersion)) + { + return protocolVersion; + } + + // Assume that the .wixburn section version will change when the Burn protocol changes. + // This should be a safe assumption since only old bundles should be missing the ProtocolVersion from the manifest. + return burnReader.Version == 2 ? 1 : 0; + } + + private bool ProcessWin64(BurnReader burnReader, XmlDocument document, SourceLineNumber sourceLineNumbers, string sourcePath) + { + var win64Value = document.DocumentElement.GetAttribute("Win64"); + + switch (win64Value) + { + case "yes": + return true; + case "no": + return false; + } + + switch (burnReader.MachineType) + { + case BurnCommon.IMAGE_FILE_MACHINE_ARM: + case BurnCommon.IMAGE_FILE_MACHINE_ARMNT: + case BurnCommon.IMAGE_FILE_MACHINE_I386: + case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32: + return false; + case BurnCommon.IMAGE_FILE_MACHINE_AMD64: + case BurnCommon.IMAGE_FILE_MACHINE_ARM64: + case BurnCommon.IMAGE_FILE_MACHINE_IA64: + case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64: + return true; + case BurnCommon.IMAGE_FILE_MACHINE_AM33: + case BurnCommon.IMAGE_FILE_MACHINE_EBC: + case BurnCommon.IMAGE_FILE_MACHINE_M32R: + case BurnCommon.IMAGE_FILE_MACHINE_MIPS16: + case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU: + case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16: + case BurnCommon.IMAGE_FILE_MACHINE_POWERPC: + case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP: + case BurnCommon.IMAGE_FILE_MACHINE_R4000: + case BurnCommon.IMAGE_FILE_MACHINE_RISCV32: + case BurnCommon.IMAGE_FILE_MACHINE_RISCV64: + case BurnCommon.IMAGE_FILE_MACHINE_RISCV128: + case BurnCommon.IMAGE_FILE_MACHINE_SH3: + case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP: + case BurnCommon.IMAGE_FILE_MACHINE_SH4: + case BurnCommon.IMAGE_FILE_MACHINE_SH5: + case BurnCommon.IMAGE_FILE_MACHINE_THUMB: + case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2: + default: + this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType)); + return false; + } + } + private long ProcessPackages(XmlDocument document, XmlNamespaceManager namespaceManager) { long packageInstallSize = 0; diff --git a/src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj b/src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj index 46f2583d..4d1c91f9 100644 --- a/src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj +++ b/src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj @@ -10,6 +10,8 @@ embedded true true + + true diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 45bc284c..0dd29e38 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs @@ -109,6 +109,28 @@ namespace WixToolsetTest.CoreIntegration var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8); Assert.Equal(extractedBextManifestData, bextManifestData); + foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes) + { + switch (attribute.LocalName) + { + case "EngineVersion": + Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value); + break; + case "ProtocolVersion": + Assert.Equal("1", attribute.Value); + break; + case "Win64": + Assert.Equal("no", attribute.Value); + break; + case "xmlns": + Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value); + break; + default: + Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'"); + break; + } + } + var commandLineElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:CommandLine"); var commandLineElement = (XmlNode)Assert.Single(commandLineElements); Assert.Equal("", commandLineElement.GetTestXml()); @@ -190,6 +212,28 @@ namespace WixToolsetTest.CoreIntegration var extractResult = BundleExtractor.ExtractAllContainers(null, exePath, baFolderPath, attachedFolderPath, extractFolderPath); extractResult.AssertSuccess(); + + foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes) + { + switch (attribute.LocalName) + { + case "EngineVersion": + Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value); + break; + case "ProtocolVersion": + Assert.Equal("1", attribute.Value); + break; + case "Win64": + Assert.Equal("yes", attribute.Value); + break; + case "xmlns": + Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value); + break; + default: + Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'"); + break; + } + } } } -- cgit v1.2.3-55-g6feb