Write EngineVersion, ProtocolVersion, and Win64 to the Burn manifest.
Sean Hall committed
Apr 13, 2022 at 10:14 UTC
4c3640ad5ef05b5be44df2aee2a23baa40471422
15 files changed
+230
-57
src/api/wix/WixToolset.Data/Symbols/WixBundleBundlePackageSymbol.cs
+8
@@ -12,6 +12,7 @@ namespace WixToolset.Data
12
{
13
new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number),
14
new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.BundleId), IntermediateFieldType.String),
15
+ new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.EngineVersion), IntermediateFieldType.String),
16
new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.Version), IntermediateFieldType.String),
17
new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.InstallCommand), IntermediateFieldType.String),
18
new IntermediateFieldDefinition(nameof(WixBundleBundlePackageSymbolFields.RepairCommand), IntermediateFieldType.String),
@@ -29,6 +30,7 @@ namespace WixToolset.Data.Symbols
30
{
31
Attributes,
32
BundleId,
33
+ EngineVersion,
34
Version,
35
InstallCommand,
36
RepairCommand,
@@ -66,6 +68,12 @@ namespace WixToolset.Data.Symbols
68
set => this.Set((int)WixBundleBundlePackageSymbolFields.BundleId, value);
69
}
70
71
+ public string EngineVersion
72
+ {
73
+ get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.EngineVersion];
74
+ set => this.Set((int)WixBundleBundlePackageSymbolFields.EngineVersion, value);
75
+ }
76
+
77
public string Version
78
{
79
get => (string)this.Fields[(int)WixBundleBundlePackageSymbolFields.Version];
src/api/wix/WixToolset.Data/Symbols/WixBundleHarvestedBundlePackageSymbol.cs
+8
@@ -12,6 +12,7 @@ namespace WixToolset.Data
12
{
13
new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Attributes), IntermediateFieldType.Number),
14
new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.BundleId), IntermediateFieldType.String),
15
+ new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.EngineVersion), IntermediateFieldType.String),
16
new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace), IntermediateFieldType.String),
17
new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.ProtocolVersion), IntermediateFieldType.Number),
18
new IntermediateFieldDefinition(nameof(WixBundleHarvestedBundlePackageSymbolFields.Version), IntermediateFieldType.String),
@@ -30,6 +31,7 @@ namespace WixToolset.Data.Symbols
31
{
32
Attributes,
33
BundleId,
34
+ EngineVersion,
35
ManifestNamespace,
36
ProtocolVersion,
37
Version,
@@ -69,6 +71,12 @@ namespace WixToolset.Data.Symbols
71
set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.BundleId, value);
72
}
73
74
+ public string EngineVersion
75
+ {
76
+ get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion].AsString();
77
+ set => this.Set((int)WixBundleHarvestedBundlePackageSymbolFields.EngineVersion, value);
78
+ }
79
+
80
public string ManifestNamespace
81
{
82
get => this.Fields[(int)WixBundleHarvestedBundlePackageSymbolFields.ManifestNamespace].AsString();
src/burn/Directory.Build.props
+4
@@ -7,4 +7,8 @@
7
</PropertyGroup>
8
9
<Import Project="..\Directory.Build.props" />
10
+
11
+ <PropertyGroup>
12
+ <BurnGeneratedHeaderDirectory>$(BaseIntermediateOutputPath)..\</BurnGeneratedHeaderDirectory>
13
+ </PropertyGroup>
14
</Project>
src/burn/engine/engine.vcxproj
+23
-9
@@ -35,13 +35,14 @@
35
<TargetName>engine</TargetName>
36
<CharacterSet>Unicode</CharacterSet>
37
<Description>Native component of WixToolset.Burn</Description>
38
+ <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
39
</PropertyGroup>
40
41
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
42
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
43
44
<PropertyGroup>
44
- <ProjectAdditionalIncludeDirectories>..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(ProjectAdditionalIncludeDirectories)</ProjectAdditionalIncludeDirectories>
45
+ <ProjectAdditionalIncludeDirectories>..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;$(BurnGeneratedHeaderDirectory);$(ProjectAdditionalIncludeDirectories)</ProjectAdditionalIncludeDirectories>
46
</PropertyGroup>
47
48
<ImportGroup Label="ExtensionSettings">
@@ -144,14 +145,15 @@
145
<ClInclude Include="variant.h" />
146
</ItemGroup>
147
147
- <ItemGroup>
148
- <CustomBuild Include="engine.mc">
148
+ <ItemDefinitionGroup>
149
+ <CustomBuildStep>
150
<Message>Compiling message file...</Message>
151
<Command>mc.exe -h "$(IntDir)." -r "$(IntDir)." -A -c -z engine.messages "$(InputDir)engine.mc"
152
rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc"</Command>
153
+ <Inputs>$(InputDir)engine.mc</Inputs>
154
<Outputs>$(IntDir)engine.messages.h;$(IntDir)engine.messages.rc</Outputs>
153
- </CustomBuild>
154
- </ItemGroup>
155
+ </CustomBuildStep>
156
+ </ItemDefinitionGroup>
157
158
<Target Name="SetWixVersion" DependsOnTargets="__SetPropertiesFromGit" BeforeTargets="ClCompile">
159
<PropertyGroup>
@@ -160,14 +162,26 @@ rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc"</Command>
162
<rup>$(GitBaseVersionPatch)</rup>
163
<rpr>$(GitCommits)</rpr>
164
<szVerMajorMinorBuild>$(rmj).$(rmm).$(rup).$(rpr)</szVerMajorMinorBuild>
163
- <wixver>rmj=$(rmj);rmm=$(rmm);rup=$(rup);rpr=$(rpr);szVerMajorMinorBuild="$(szVerMajorMinorBuild)"</wixver>
165
</PropertyGroup>
166
167
<ItemGroup>
167
- <ClCompile>
168
- <PreprocessorDefinitions>$(wixver);%(PreprocessorDefinitions)</PreprocessorDefinitions>
169
- </ClCompile>
168
+ <BurnVersionLines Include="
169
+// <auto-generated/>
170
+#ifndef _VERSION_FILE_H_
171
+#define _VERSION_FILE_H_
172
+
173
+#define szVerMajorMinorBuild "$(szVerMajorMinorBuild)"
174
+#define wzVerMajorMinorBuild L"$(szVerMajorMinorBuild)"
175
+#define rmj $(rmj)
176
+#define rmm $(rmm)
177
+#define rup $(rup)
178
+#define rpr $(rpr)
179
+
180
+#endif
181
+"/>
182
</ItemGroup>
183
+
184
+ <WriteLinesToFile Overwrite="true" File="$(BurnGeneratedHeaderDirectory)engine.version.h" Lines="@(BurnVersionLines)" />
185
</Target>
186
187
<ItemGroup>
src/burn/engine/manifest.cpp
+50
@@ -7,6 +7,11 @@ static HRESULT ParseFromXml(
7
__in IXMLDOMDocument* pixdDocument,
8
__in BURN_ENGINE_STATE* pEngineState
9
);
10
+#if DEBUG
11
+static void ValidateHarvestingAttributes(
12
+ __in IXMLDOMDocument* pixdDocument
13
+ );
14
+#endif
15
16
// function definitions
17
@@ -43,6 +48,10 @@ extern "C" HRESULT ManifestLoadXmlFromBuffer(
48
hr = XmlLoadDocumentFromBuffer(pbBuffer, cbBuffer, &pixdDocument);
49
ExitOnFailure(hr, "Failed to load manifest as XML document.");
50
51
+#if DEBUG
52
+ ValidateHarvestingAttributes(pixdDocument);
53
+#endif
54
+
55
hr = ParseFromXml(pixdDocument, pEngineState);
56
57
LExit:
@@ -162,3 +171,44 @@ LExit:
171
ReleaseObject(pixeBundle);
172
return hr;
173
}
174
+
175
+#if DEBUG
176
+static void ValidateHarvestingAttributes(
177
+ __in IXMLDOMDocument* pixdDocument
178
+ )
179
+{
180
+ HRESULT hr = S_OK;
181
+ IXMLDOMElement* pixeBundle = NULL;
182
+ LPWSTR sczEngineVersion = NULL;
183
+ DWORD dwProtocolVersion = 0;
184
+ BOOL fWin64 = FALSE;
185
+
186
+ hr = pixdDocument->get_documentElement(&pixeBundle);
187
+ ExitOnFailure(hr, "Failed to get document element.");
188
+
189
+ hr = XmlGetAttributeEx(pixeBundle, L"EngineVersion", &sczEngineVersion);
190
+ ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@EngineVersion attribute.");
191
+
192
+ hr = XmlGetAttributeUInt32(pixeBundle, L"ProtocolVersion", &dwProtocolVersion);
193
+ ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@ProtocolVersion attribute.");
194
+
195
+ hr = XmlGetYesNoAttribute(pixeBundle, L"Win64", &fWin64);
196
+ ExitOnRequiredXmlQueryFailure(hr, "Failed to get BurnManifest/@Win64 attribute.");
197
+
198
+ Assert(CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, sczEngineVersion, -1, wzVerMajorMinorBuild, -1));
199
+
200
+ Assert(BURN_PROTOCOL_VERSION == dwProtocolVersion);
201
+
202
+#if !defined(_WIN64)
203
+ Assert(!fWin64);
204
+#else
205
+ Assert(fWin64);
206
+#endif
207
+
208
+LExit:
209
+ AssertSz(SUCCEEDED(hr), "Failed to get harvesting attributes.");
210
+
211
+ ReleaseStr(sczEngineVersion);
212
+ ReleaseObject(pixeBundle);
213
+}
214
+#endif
src/burn/engine/precomp.h
+1
@@ -103,4 +103,5 @@
103
#include "EngineForApplication.h"
104
#include "EngineForExtension.h"
105
#include "engine.messages.h"
106
+#include "engine.version.h"
107
#include "engine.h"
src/burn/test/BurnUnitTest/BurnTestFixture.h
+1
-1
@@ -33,7 +33,7 @@ namespace Bootstrapper
33
34
this->testDirectory = WixBuildTools::TestSupport::TestData::Get();
35
36
- LogInitialize(::GetModuleHandleW(NULL));
36
+ LogInitialize(::GetModuleHandleW(L"BurnUnitTest.dll"));
37
38
LogSetLevel(REPORT_DEBUG, FALSE);
39
src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj
+2
-2
@@ -39,8 +39,8 @@
39
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
40
41
<PropertyGroup>
42
- <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories>
43
- <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib</ProjectAdditionalLinkLibraries>
42
+ <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);$(BurnGeneratedHeaderDirectory);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories>
43
+ <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib;engine.res</ProjectAdditionalLinkLibraries>
44
</PropertyGroup>
45
46
<ItemGroup>
src/burn/test/BurnUnitTest/ManifestTest.cpp
+8
-2
@@ -30,7 +30,13 @@ namespace Bootstrapper
30
try
31
{
32
LPCSTR szDocument =
33
- "<Bundle>"
33
+ "<BurnManifest EngineVersion='" szVerMajorMinorBuild "' ProtocolVersion='1' Win64='"
34
+#if !defined(_WIN64)
35
+ "no"
36
+#else
37
+ "yes"
38
+#endif
39
+ "'>"
40
" <UX UxDllPayloadId='ux.dll'>"
41
" <Payload Id='ux.dll' FilePath='ux.dll' Packaging='embedded' SourcePath='ux.dll' Hash='000000000000' />"
42
" </UX>"
@@ -38,7 +44,7 @@ namespace Bootstrapper
44
" <Variable Id='Variable1' Type='numeric' Value='1' Hidden='no' Persisted='no' />"
45
" <RegistrySearch Id='Search1' Type='exists' Root='HKLM' Key='SOFTWARE\\Microsoft' Variable='Variable1' Condition='0' />"
46
" <CommandLine Variables='upperCase' />"
41
- "</Bundle>";
47
+ "</BurnManifest>";
48
49
hr = CacheInitialize(&engineState.cache, &engineState.internalCommand);
50
TestThrowOnFailure(hr, L"Failed initialize cache.");
src/burn/test/BurnUnitTest/precomp.h
+2
@@ -71,6 +71,8 @@
71
#include "splashscreen.h"
72
#include "detect.h"
73
74
+#include "engine.version.h"
75
+
76
#pragma managed
77
#include <vcclr.h>
78
src/wix/WixToolset.Core.Burn/Bundles/BurnCommon.cs
+2
@@ -111,8 +111,10 @@ namespace WixToolset.Core.Burn.Bundles
111
protected const uint BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0 = 52;
112
protected const uint BURN_SECTION_MIN_SIZE = BURN_SECTION_OFFSET_ATTACHEDCONTAINERSIZE0;
113
114
+ // Keep in sync with burn\engine\inc\engine.h
115
protected const uint BURN_SECTION_MAGIC = 0x00f14300;
116
protected const uint BURN_SECTION_VERSION = 0x00000002;
117
+ public const uint BURN_PROTOCOL_VERSION = 0x00000001;
118
119
protected string fileExe;
120
protected uint peOffset = UInt32.MaxValue;
src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
+5
@@ -70,6 +70,11 @@ namespace WixToolset.Core.Burn.Bundles
70
71
writer.WriteStartElement("BurnManifest", BurnCommon.BurnNamespace);
72
73
+ // Write attributes to support harvesting bundles.
74
+ writer.WriteAttributeString("EngineVersion", $"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}");
75
+ writer.WriteAttributeString("ProtocolVersion", BurnCommon.BURN_PROTOCOL_VERSION.ToString());
76
+ writer.WriteAttributeString("Win64", this.BundleSymbol.Platform == Platform.X86 ? "no" : "yes");
77
+
78
// Write the condition, if there is one
79
if (null != this.BundleSymbol.Condition)
80
{
src/wix/WixToolset.Core.Burn/Bundles/ProcessBundlePackageCommand.cs
+70
-43
@@ -72,7 +72,8 @@ namespace WixToolset.Core.Burn.Bundles
72
73
this.ChainPackage.Win64 = harvestedBundlePackage.Win64;
74
this.BundlePackage.BundleId = Guid.Parse(harvestedBundlePackage.BundleId).ToString("B").ToUpperInvariant();
75
- this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == 1; // Keep in sync with burn\engine\inc\engine.h
75
+ this.BundlePackage.EngineVersion = harvestedBundlePackage.EngineVersion;
76
+ this.BundlePackage.SupportsBurnProtocol = harvestedBundlePackage.ProtocolVersion == BurnCommon.BURN_PROTOCOL_VERSION;
77
78
var supportsArpSystemComponent = BurnCommon.BurnV3Namespace != harvestedBundlePackage.ManifestNamespace;
79
if (!supportsArpSystemComponent && !this.ChainPackage.Visible)
@@ -104,6 +105,7 @@ namespace WixToolset.Core.Burn.Bundles
105
{
106
bool win64;
107
string bundleId;
108
+ string engineVersion;
109
int protocolVersion;
110
string manifestNamespace;
111
bool perMachine;
@@ -133,50 +135,8 @@ namespace WixToolset.Core.Burn.Bundles
135
this.TrackedFiles.Add(this.BackendHelper.TrackFile(filePath, TrackedFileType.Temporary, sourceLineNumbers));
136
}
137
136
- switch (burnReader.MachineType)
137
- {
138
- case BurnCommon.IMAGE_FILE_MACHINE_AM33:
139
- case BurnCommon.IMAGE_FILE_MACHINE_ARM:
140
- case BurnCommon.IMAGE_FILE_MACHINE_ARMNT:
141
- case BurnCommon.IMAGE_FILE_MACHINE_I386:
142
- case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32:
143
- case BurnCommon.IMAGE_FILE_MACHINE_M32R:
144
- win64 = false;
145
- break;
146
- case BurnCommon.IMAGE_FILE_MACHINE_AMD64:
147
- case BurnCommon.IMAGE_FILE_MACHINE_ARM64:
148
- case BurnCommon.IMAGE_FILE_MACHINE_IA64:
149
- case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64:
150
- win64 = true;
151
- break;
152
- case BurnCommon.IMAGE_FILE_MACHINE_EBC:
153
- case BurnCommon.IMAGE_FILE_MACHINE_MIPS16:
154
- case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU:
155
- case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16:
156
- case BurnCommon.IMAGE_FILE_MACHINE_POWERPC:
157
- case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP:
158
- case BurnCommon.IMAGE_FILE_MACHINE_R4000:
159
- case BurnCommon.IMAGE_FILE_MACHINE_RISCV32:
160
- case BurnCommon.IMAGE_FILE_MACHINE_RISCV64:
161
- case BurnCommon.IMAGE_FILE_MACHINE_RISCV128:
162
- case BurnCommon.IMAGE_FILE_MACHINE_SH3:
163
- case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP:
164
- case BurnCommon.IMAGE_FILE_MACHINE_SH4:
165
- case BurnCommon.IMAGE_FILE_MACHINE_SH5:
166
- case BurnCommon.IMAGE_FILE_MACHINE_THUMB:
167
- case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2:
168
- default:
169
- win64 = false;
170
- this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType));
171
- break;
172
- }
173
-
138
bundleId = burnReader.BundleId.ToString("B").ToUpperInvariant();
139
176
- // Assume that the .wixburn section version will change when the Burn protocol changes.
177
- // This should be a safe assumption since we will need to add the protocol version to the section to support this harvesting.
178
- protocolVersion = burnReader.Version == 2 ? 1 : 0;
179
-
140
try
141
{
142
var document = new XmlDocument();
@@ -189,6 +149,10 @@ namespace WixToolset.Core.Burn.Bundles
149
return null;
150
}
151
152
+ engineVersion = document.DocumentElement.GetAttribute("EngineVersion");
153
+ protocolVersion = this.ProcessProtocolVersion(burnReader, document);
154
+ win64 = this.ProcessWin64(burnReader, document, sourceLineNumbers, sourcePath);
155
+
156
manifestNamespace = document.DocumentElement.NamespaceURI;
157
158
namespaceManager.AddNamespace("burn", document.DocumentElement.NamespaceURI);
@@ -227,6 +191,7 @@ namespace WixToolset.Core.Burn.Bundles
191
{
192
Win64 = win64,
193
BundleId = bundleId,
194
+ EngineVersion = engineVersion,
195
ManifestNamespace = manifestNamespace,
196
ProtocolVersion = protocolVersion,
197
PerMachine = perMachine,
@@ -236,6 +201,68 @@ namespace WixToolset.Core.Burn.Bundles
201
});
202
}
203
204
+ private int ProcessProtocolVersion(BurnReader burnReader, XmlDocument document)
205
+ {
206
+ var protocolVersionValue = document.DocumentElement.GetAttribute("ProtocolVersion");
207
+
208
+ if (Int32.TryParse(protocolVersionValue, out var protocolVersion))
209
+ {
210
+ return protocolVersion;
211
+ }
212
+
213
+ // Assume that the .wixburn section version will change when the Burn protocol changes.
214
+ // This should be a safe assumption since only old bundles should be missing the ProtocolVersion from the manifest.
215
+ return burnReader.Version == 2 ? 1 : 0;
216
+ }
217
+
218
+ private bool ProcessWin64(BurnReader burnReader, XmlDocument document, SourceLineNumber sourceLineNumbers, string sourcePath)
219
+ {
220
+ var win64Value = document.DocumentElement.GetAttribute("Win64");
221
+
222
+ switch (win64Value)
223
+ {
224
+ case "yes":
225
+ return true;
226
+ case "no":
227
+ return false;
228
+ }
229
+
230
+ switch (burnReader.MachineType)
231
+ {
232
+ case BurnCommon.IMAGE_FILE_MACHINE_ARM:
233
+ case BurnCommon.IMAGE_FILE_MACHINE_ARMNT:
234
+ case BurnCommon.IMAGE_FILE_MACHINE_I386:
235
+ case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH32:
236
+ return false;
237
+ case BurnCommon.IMAGE_FILE_MACHINE_AMD64:
238
+ case BurnCommon.IMAGE_FILE_MACHINE_ARM64:
239
+ case BurnCommon.IMAGE_FILE_MACHINE_IA64:
240
+ case BurnCommon.IMAGE_FILE_MACHINE_LOONGARCH64:
241
+ return true;
242
+ case BurnCommon.IMAGE_FILE_MACHINE_AM33:
243
+ case BurnCommon.IMAGE_FILE_MACHINE_EBC:
244
+ case BurnCommon.IMAGE_FILE_MACHINE_M32R:
245
+ case BurnCommon.IMAGE_FILE_MACHINE_MIPS16:
246
+ case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU:
247
+ case BurnCommon.IMAGE_FILE_MACHINE_MIPSFPU16:
248
+ case BurnCommon.IMAGE_FILE_MACHINE_POWERPC:
249
+ case BurnCommon.IMAGE_FILE_MACHINE_POWERPCFP:
250
+ case BurnCommon.IMAGE_FILE_MACHINE_R4000:
251
+ case BurnCommon.IMAGE_FILE_MACHINE_RISCV32:
252
+ case BurnCommon.IMAGE_FILE_MACHINE_RISCV64:
253
+ case BurnCommon.IMAGE_FILE_MACHINE_RISCV128:
254
+ case BurnCommon.IMAGE_FILE_MACHINE_SH3:
255
+ case BurnCommon.IMAGE_FILE_MACHINE_SH3DSP:
256
+ case BurnCommon.IMAGE_FILE_MACHINE_SH4:
257
+ case BurnCommon.IMAGE_FILE_MACHINE_SH5:
258
+ case BurnCommon.IMAGE_FILE_MACHINE_THUMB:
259
+ case BurnCommon.IMAGE_FILE_MACHINE_WCEMIPSV2:
260
+ default:
261
+ this.Messaging.Write(BurnBackendWarnings.UnknownCoffMachineType(sourceLineNumbers, sourcePath, burnReader.MachineType));
262
+ return false;
263
+ }
264
+ }
265
+
266
private long ProcessPackages(XmlDocument document, XmlNamespaceManager namespaceManager)
267
{
268
long packageInstallSize = 0;
src/wix/WixToolset.Core.Burn/WixToolset.Core.Burn.csproj
+2
@@ -10,6 +10,8 @@
10
<DebugType>embedded</DebugType>
11
<PublishRepositoryUrl>true</PublishRepositoryUrl>
12
<CreateDocumentationFile>true</CreateDocumentationFile>
13
+
14
+ <GitThisAssembly>true</GitThisAssembly>
15
</PropertyGroup>
16
17
<ItemGroup>
src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
+44
@@ -109,6 +109,28 @@ namespace WixToolsetTest.CoreIntegration
109
var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8);
110
Assert.Equal(extractedBextManifestData, bextManifestData);
111
112
+ foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes)
113
+ {
114
+ switch (attribute.LocalName)
115
+ {
116
+ case "EngineVersion":
117
+ Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value);
118
+ break;
119
+ case "ProtocolVersion":
120
+ Assert.Equal("1", attribute.Value);
121
+ break;
122
+ case "Win64":
123
+ Assert.Equal("no", attribute.Value);
124
+ break;
125
+ case "xmlns":
126
+ Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value);
127
+ break;
128
+ default:
129
+ Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'");
130
+ break;
131
+ }
132
+ }
133
+
134
var commandLineElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:CommandLine");
135
var commandLineElement = (XmlNode)Assert.Single(commandLineElements);
136
Assert.Equal("<CommandLine Variables='upperCase' />", commandLineElement.GetTestXml());
@@ -190,6 +212,28 @@ namespace WixToolsetTest.CoreIntegration
212
213
var extractResult = BundleExtractor.ExtractAllContainers(null, exePath, baFolderPath, attachedFolderPath, extractFolderPath);
214
extractResult.AssertSuccess();
215
+
216
+ foreach (XmlAttribute attribute in extractResult.ManifestDocument.DocumentElement.Attributes)
217
+ {
218
+ switch (attribute.LocalName)
219
+ {
220
+ case "EngineVersion":
221
+ Assert.Equal($"{ThisAssembly.Git.BaseVersion.Major}.{ThisAssembly.Git.BaseVersion.Minor}.{ThisAssembly.Git.BaseVersion.Patch}.{ThisAssembly.Git.Commits}", attribute.Value);
222
+ break;
223
+ case "ProtocolVersion":
224
+ Assert.Equal("1", attribute.Value);
225
+ break;
226
+ case "Win64":
227
+ Assert.Equal("yes", attribute.Value);
228
+ break;
229
+ case "xmlns":
230
+ Assert.Equal("http://wixtoolset.org/schemas/v4/2008/Burn", attribute.Value);
231
+ break;
232
+ default:
233
+ Assert.False(true, $"Attribute: '{attribute.LocalName}', Value: '{attribute.Value}'");
234
+ break;
235
+ }
236
+ }
237
}
238
}
239