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. --- 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 + 8 files changed, 91 insertions(+), 14 deletions(-) (limited to 'src/burn') 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 -- cgit v1.2.3-55-g6feb