@joebigelow / wix-1 / commits / 39105709

Add test for creating a Managed BA through mbahost.

Sean Hall committed Feb 13, 2019 at 20:13 UTC 391057093e45db2d4b2450bd236b9e1fc4cfd53c
12 files changed +371 -6
Bal.wixext.sln
+10
@@ -13,6 +13,8 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "bal", "src\wixlib\bal.wixpr
13 EndProject
14 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Bal.wixext", "src\wixext\WixToolset.Bal.wixext.csproj", "{BF720A63-9D7B-456E-B60C-8122852D9FED}"
15 EndProject
16 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WixToolsetTest.MbaHost", "src\test\WixToolsetTest.MbaHost\WixToolsetTest.MbaHost.vcxproj", "{8C131CB9-7B1C-4B06-A328-E69CE9EDC763}"
17 +EndProject
18 Global
19 GlobalSection(SolutionConfigurationPlatforms) = preSolution
20 Debug|Any CPU = Debug|Any CPU
@@ -61,6 +63,14 @@ Global
63 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|Any CPU.Build.0 = Release|Any CPU
64 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.ActiveCfg = Release|Any CPU
65 {BF720A63-9D7B-456E-B60C-8122852D9FED}.Release|x86.Build.0 = Release|Any CPU
66 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Debug|Any CPU.ActiveCfg = Debug|Win32
67 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Debug|Any CPU.Build.0 = Debug|Win32
68 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Debug|x86.ActiveCfg = Debug|Win32
69 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Debug|x86.Build.0 = Debug|Win32
70 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Release|Any CPU.ActiveCfg = Release|Win32
71 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Release|Any CPU.Build.0 = Release|Win32
72 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Release|x86.ActiveCfg = Release|Win32
73 + {8C131CB9-7B1C-4B06-A328-E69CE9EDC763}.Release|x86.Build.0 = Release|Win32
74 EndGlobalSection
75 GlobalSection(SolutionProperties) = preSolution
76 HideSolutionNode = FALSE
src/Cpp.Build.props
+4 -6
@@ -11,6 +11,10 @@
11 <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' AND '$(VisualStudioVersion)'=='15.0'">
12 <WindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
13 </PropertyGroup>
14 +
15 + <PropertyGroup Condition=" '$(CLRSupport)'=='true' ">
16 + <DisableSpecificCompilerWarnings>4564;4691</DisableSpecificCompilerWarnings>
17 + </PropertyGroup>
18
19 <ItemDefinitionGroup>
20 <ClCompile>
@@ -95,10 +99,4 @@
99 <RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
100 </ClCompile>
101 </ItemDefinitionGroup>
98 - <ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
99 - <Link>
100 - <KeyFile>$(LinkKeyFile)</KeyFile>
101 - <DelaySign>$(LinkDelaySign)</DelaySign>
102 - </Link>
103 - </ItemDefinitionGroup>
102 </Project>
src/test/WixToolsetTest.MbaHost/BootstrapperApplicationData.xml
Binary files /dev/null and b/src/test/WixToolsetTest.MbaHost/BootstrapperApplicationData.xml differ
src/test/WixToolsetTest.MbaHost/EngineForTest.cpp new
+45
@@ -0,0 +1,45 @@
1 +// 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.
2 +
3 +#include "precomp.h"
4 +
5 +static HRESULT BAEngineLog(
6 + __in BOOTSTRAPPER_ENGINE_CONTEXT* pContext,
7 + __in BAENGINE_LOG_ARGS* pArgs,
8 + __in BAENGINE_LOG_RESULTS* /*pResults*/
9 +)
10 +{
11 + HRESULT hr = S_OK;
12 +
13 + pContext->pfnLog(pArgs->wzMessage);
14 +
15 + return hr;
16 +}
17 +
18 +HRESULT WINAPI EngineForTestProc(
19 + __in BOOTSTRAPPER_ENGINE_MESSAGE message,
20 + __in const LPVOID pvArgs,
21 + __inout LPVOID pvResults,
22 + __in_opt LPVOID pvContext
23 +)
24 +{
25 + HRESULT hr = S_OK;
26 + BOOTSTRAPPER_ENGINE_CONTEXT* pContext = reinterpret_cast<BOOTSTRAPPER_ENGINE_CONTEXT*>(pvContext);
27 +
28 + if (!pContext || !pvArgs || !pvResults)
29 + {
30 + ExitFunction1(hr = E_INVALIDARG);
31 + }
32 +
33 + switch (message)
34 + {
35 + case BOOTSTRAPPER_ENGINE_MESSAGE_LOG:
36 + hr = BAEngineLog(pContext, reinterpret_cast<BAENGINE_LOG_ARGS*>(pvArgs), reinterpret_cast<BAENGINE_LOG_RESULTS*>(pvResults));
37 + break;
38 + default:
39 + hr = E_NOTIMPL;
40 + break;
41 + }
42 +
43 +LExit:
44 + return hr;
45 +}
\ No newline at end of file
src/test/WixToolsetTest.MbaHost/EngineForTest.h new
+63
@@ -0,0 +1,63 @@
1 +#pragma once
2 +// 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.
3 +
4 +HRESULT WINAPI EngineForTestProc(
5 + __in BOOTSTRAPPER_ENGINE_MESSAGE message,
6 + __in const LPVOID pvArgs,
7 + __inout LPVOID pvResults,
8 + __in_opt LPVOID pvContext
9 +);
10 +
11 +typedef void(WINAPI *PFN_TEST_LOG_PROC)(
12 + __in LPCWSTR sczMessage
13 + );
14 +
15 +struct BOOTSTRAPPER_ENGINE_CONTEXT
16 +{
17 + PFN_TEST_LOG_PROC pfnLog;
18 +};
19 +
20 +namespace WixToolsetTest
21 +{
22 +namespace MbaHost
23 +{
24 +namespace Native
25 +{
26 + using namespace System;
27 + using namespace System::Collections::Generic;
28 + using namespace System::Runtime::InteropServices;
29 +
30 + public ref class EngineForTest
31 + {
32 + private:
33 + delegate void LogDelegate(LPCWSTR);
34 + LogDelegate^ _logDelegate;
35 + List<String^>^ _messages;
36 +
37 + void Log(LPCWSTR sczMessage)
38 + {
39 + String^ message = gcnew String(sczMessage);
40 + System::Diagnostics::Debug::WriteLine(message);
41 + _messages->Add(message);
42 + }
43 + public:
44 + EngineForTest()
45 + {
46 + _logDelegate = gcnew LogDelegate(this, &EngineForTest::Log);
47 + _messages = gcnew List<String^>();
48 + }
49 +
50 + List<String^>^ GetLogMessages()
51 + {
52 + return _messages;
53 + }
54 +
55 + PFN_TEST_LOG_PROC GetTestLogProc()
56 + {
57 + IntPtr functionPointer = Marshal::GetFunctionPointerForDelegate(_logDelegate);
58 + return static_cast<PFN_TEST_LOG_PROC>(functionPointer.ToPointer());
59 + }
60 + };
61 +}
62 +}
63 +}
\ No newline at end of file
src/test/WixToolsetTest.MbaHost/MbaHostFixture.cpp new
+70
@@ -0,0 +1,70 @@
1 +// 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.
2 +
3 +#include "precomp.h"
4 +
5 +namespace WixToolsetTest
6 +{
7 +namespace MbaHost
8 +{
9 +namespace Native
10 +{
11 + using namespace System;
12 + using namespace Xunit;
13 +
14 + public ref class MbaHostFixture
15 + {
16 + public:
17 + [Fact]
18 + void CanLoadManagedBootstrapperApplication()
19 + {
20 + HMODULE hBAModule = NULL;
21 + PFN_BOOTSTRAPPER_APPLICATION_CREATE pfnCreate = NULL;
22 + HRESULT hr = S_OK;
23 +
24 + EngineForTest^ engine = gcnew EngineForTest();
25 + BOOTSTRAPPER_ENGINE_CONTEXT engineContext = { };
26 + engineContext.pfnLog = engine->GetTestLogProc();
27 +
28 + LogInitialize(::GetModuleHandleW(NULL));
29 +
30 + hr = LogOpen(NULL, L"MbaHostUnitTest", NULL, L"txt", FALSE, FALSE, NULL);
31 + Assert::Equal(S_OK, hr);
32 +
33 + BOOTSTRAPPER_COMMAND command = { };
34 + BOOTSTRAPPER_CREATE_ARGS args = { };
35 + BOOTSTRAPPER_CREATE_RESULTS results = { };
36 +
37 + args.cbSize = sizeof(BOOTSTRAPPER_CREATE_ARGS);
38 + args.pCommand = &command;
39 + args.pfnBootstrapperEngineProc = EngineForTestProc;
40 + args.pvBootstrapperEngineProcContext = &engineContext;
41 + args.qwEngineAPIVersion = MAKEQWORDVERSION(0, 0, 0, 1);
42 +
43 + results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS);
44 +
45 + hBAModule = ::LoadLibraryExW(L"mbahost.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
46 + Assert::NotEqual(NULL, (int)hBAModule);
47 +
48 + pfnCreate = (PFN_BOOTSTRAPPER_APPLICATION_CREATE)::GetProcAddress(hBAModule, "BootstrapperApplicationCreate");
49 + Assert::NotEqual(NULL, (int)pfnCreate);
50 +
51 + hr = pfnCreate(&args, &results);
52 + Assert::Equal(S_OK, hr);
53 +
54 + BA_ONSHUTDOWN_ARGS shutdownArgs = { };
55 + BA_ONSHUTDOWN_RESULTS shutdownResults = { };
56 + shutdownArgs.cbSize = sizeof(BA_ONSHUTDOWN_ARGS);
57 + shutdownResults.action = BOOTSTRAPPER_SHUTDOWN_ACTION_RELOAD_BOOTSTRAPPER;
58 + shutdownResults.cbSize = sizeof(BA_ONSHUTDOWN_RESULTS);
59 + hr = results.pfnBootstrapperApplicationProc(BOOTSTRAPPER_APPLICATION_MESSAGE_ONSHUTDOWN, &shutdownArgs, &shutdownResults, results.pvBootstrapperApplicationProcContext);
60 + Assert::Equal(S_OK, hr);
61 +
62 + List<String^>^ logMessages = engine->GetLogMessages();
63 + Assert::Equal(2, logMessages->Count);
64 + Assert::Equal("Loading managed bootstrapper application.", logMessages[0]);
65 + Assert::Equal("Shutdown,ReloadBootstrapper,0", logMessages[1]);
66 + }
67 + };
68 +}
69 +}
70 +}
src/test/WixToolsetTest.MbaHost/TestManagedBootstrapperApplication.h new
+30
@@ -0,0 +1,30 @@
1 +#pragma once
2 +// 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.
3 +
4 +namespace WixToolsetTest
5 +{
6 +namespace MbaHost
7 +{
8 +namespace Native
9 +{
10 + using namespace System;
11 + using namespace WixToolset::BootstrapperCore;
12 +
13 + public ref class TestManagedBootstrapperApplication : BootstrapperApplication
14 + {
15 + public:
16 + virtual void Run() override
17 + {
18 + }
19 +
20 + virtual void OnShutdown(ShutdownEventArgs^ e) override
21 + {
22 + String^ message = "Shutdown," + e->Action.ToString() + "," + e->HResult.ToString();
23 + this->Engine->Log(LogLevel::Standard, message);
24 + }
25 + };
26 +
27 + [assembly:BootstrapperApplication(TestManagedBootstrapperApplication::typeid)];
28 +}
29 +}
30 +}
\ No newline at end of file
src/test/WixToolsetTest.MbaHost/WixToolset.BootstrapperCore.config new
+26
@@ -0,0 +1,26 @@
1 +<?xml version="1.0" encoding="utf-8" ?>
2 +<!-- 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. -->
3 +
4 +
5 +<configuration>
6 + <configSections>
7 + <sectionGroup name="wix.bootstrapper" type="WixToolset.BootstrapperCore.BootstrapperSectionGroup, WixToolset.BootstrapperCore">
8 + <section name="host" type="WixToolset.BootstrapperCore.HostSection, WixToolset.BootstrapperCore" />
9 + </sectionGroup>
10 + </configSections>
11 + <startup useLegacyV2RuntimeActivationPolicy="true">
12 + <supportedRuntime version="v4.0" />
13 + <supportedRuntime version="v2.0.50727" />
14 + </startup>
15 + <wix.bootstrapper>
16 + <!-- Example only. Use only if the startup/supportedRuntime above cannot discern supported frameworks. -->
17 + <!--
18 + <supportedFramework version="v4\Client" />
19 + <supportedFramework version="v3.5" />
20 + <supportedFramework version="v3.0" />
21 + -->
22 +
23 + <!-- Example only. Replace the host/@assemblyName attribute with assembly that implements BootstrapperApplication. -->
24 + <host assemblyName="WixToolsetTest.MbaHost" />
25 + </wix.bootstrapper>
26 +</configuration>
src/test/WixToolsetTest.MbaHost/WixToolsetTest.MbaHost.vcxproj new
+91
@@ -0,0 +1,91 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<!-- 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. -->
3 +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
4 + <Import Project="..\..\..\packages\WixToolset.BalUtil.4.0.4\build\WixToolset.BalUtil.props" Condition="Exists('..\..\..\packages\WixToolset.BalUtil.4.0.4\build\WixToolset.BalUtil.props')" />
5 + <Import Project="..\..\..\packages\WixToolset.BootstrapperCore.4.0.3\build\WixToolset.BootstrapperCore.props" Condition="Exists('..\..\..\packages\WixToolset.BootstrapperCore.4.0.3\build\WixToolset.BootstrapperCore.props')" />
6 + <Import Project="..\..\..\packages\xunit.core.2.4.0\build\xunit.core.props" Condition="Exists('..\..\..\packages\xunit.core.2.4.0\build\xunit.core.props')" />
7 + <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props')" />
8 + <ItemGroup Label="ProjectConfigurations">
9 + <ProjectConfiguration Include="Debug|Win32">
10 + <Configuration>Debug</Configuration>
11 + <Platform>Win32</Platform>
12 + </ProjectConfiguration>
13 + <ProjectConfiguration Include="Release|Win32">
14 + <Configuration>Release</Configuration>
15 + <Platform>Win32</Platform>
16 + </ProjectConfiguration>
17 + </ItemGroup>
18 + <PropertyGroup Label="Globals">
19 + <ProjectTypes>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}</ProjectTypes>
20 + <ProjectGuid>{8C131CB9-7B1C-4B06-A328-E69CE9EDC763}</ProjectGuid>
21 + <RootNamespace>WixToolsetTest.MbaHost</RootNamespace>
22 + <Keyword>ManagedCProj</Keyword>
23 + <ConfigurationType>DynamicLibrary</ConfigurationType>
24 + <PlatformToolset>v141</PlatformToolset>
25 + <CharacterSet>Unicode</CharacterSet>
26 + <CLRSupport>true</CLRSupport>
27 + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
28 + </PropertyGroup>
29 + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
30 + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31 + <PropertyGroup>
32 + <ProjectAdditionalLinkLibraries></ProjectAdditionalLinkLibraries>
33 + </PropertyGroup>
34 + <ItemGroup>
35 + <ClCompile Include="EngineForTest.cpp" />
36 + <ClCompile Include="MbaHostFixture.cpp" />
37 + <ClCompile Include="precomp.cpp">
38 + <PrecompiledHeader>Create</PrecompiledHeader>
39 + </ClCompile>
40 + </ItemGroup>
41 + <ItemGroup>
42 + <ClInclude Include="EngineForTest.h" />
43 + <ClInclude Include="precomp.h" />
44 + <ClInclude Include="TestManagedBootstrapperApplication.h" />
45 + </ItemGroup>
46 +
47 + <ItemGroup>
48 + <None Include="packages.config" />
49 + <Content Include="BootstrapperApplicationData.xml" CopyToOutputDirectory="PreserveNewest" />
50 + <Content Include="WixToolset.BootstrapperCore.config" CopyToOutputDirectory="PreserveNewest" />
51 + </ItemGroup>
52 + <ItemGroup>
53 + <Reference Include="System" />
54 + <Reference Include="System.Core" />
55 + <Reference Include="xunit.abstractions">
56 + <HintPath>..\..\..\packages\xunit.abstractions.2.0.2\lib\net35\xunit.abstractions.dll</HintPath>
57 + </Reference>
58 + <Reference Include="xunit.assert">
59 + <HintPath>..\..\..\packages\xunit.assert.2.4.0\lib\netstandard2.0\xunit.assert.dll</HintPath>
60 + </Reference>
61 + <Reference Include="xunit.core">
62 + <HintPath>..\..\..\packages\xunit.extensibility.core.2.4.0\lib\net452\xunit.core.dll</HintPath>
63 + </Reference>
64 + <Reference Include="xunit.execution.desktop">
65 + <HintPath>..\..\..\packages\xunit.extensibility.execution.2.4.0\lib\net452\xunit.execution.desktop.dll</HintPath>
66 + </Reference>
67 + <Reference Include="WixToolset.BootstrapperCore">
68 + <HintPath>..\..\..\packages\WixToolset.BootstrapperCore.4.0.3\lib\net20\WixToolset.BootstrapperCore.dll</HintPath>
69 + </Reference>
70 + </ItemGroup>
71 + <ItemGroup>
72 + <ProjectReference Include="..\..\mbahost\mbahost.vcxproj">
73 + <Project>{12c87c77-3547-44f8-8134-29bc915cb19d}</Project>
74 + </ProjectReference>
75 + </ItemGroup>
76 + <ItemGroup>
77 + <Analyzer Include="..\packages\xunit.analyzers.0.10.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
78 + </ItemGroup>
79 + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
80 + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
81 + <PropertyGroup>
82 + <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
83 + </PropertyGroup>
84 + <Error Condition="!Exists('..\..\..\packages\WixToolset.BalUtil.4.0.4\build\WixToolset.BalUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BalUtil.4.0.4\build\WixToolset.BalUtil.props'))" />
85 + <Error Condition="!Exists('..\..\..\packages\WixToolset.BootstrapperCore.4.0.3\build\WixToolset.BootstrapperCore.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BootstrapperCore.4.0.3\build\WixToolset.BootstrapperCore.props'))" />
86 + <Error Condition="!Exists('..\..\..\packages\xunit.core.2.4.0\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.core.2.4.0\build\xunit.core.props'))" />
87 + <Error Condition="!Exists('..\..\..\packages\xunit.core.2.4.0\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.core.2.4.0\build\xunit.core.targets'))" />
88 + <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props'))" />
89 + </Target>
90 + <Import Project="..\..\..\packages\xunit.core.2.4.0\build\xunit.core.targets" Condition="Exists('..\..\..\packages\xunit.core.2.4.0\build\xunit.core.targets')" />
91 +</Project>
\ No newline at end of file
src/test/WixToolsetTest.MbaHost/packages.config new
+14
@@ -0,0 +1,14 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<packages>
3 + <package id="xunit" version="2.4.0" targetFramework="net461" />
4 + <package id="xunit.abstractions" version="2.0.2" targetFramework="net461" />
5 + <package id="xunit.analyzers" version="0.10.0" targetFramework="net461" />
6 + <package id="xunit.assert" version="2.4.0" targetFramework="net461" />
7 + <package id="xunit.core" version="2.4.0" targetFramework="net461" />
8 + <package id="xunit.extensibility.core" version="2.4.0" targetFramework="net461" />
9 + <package id="xunit.extensibility.execution" version="2.4.0" targetFramework="net461" />
10 + <package id="xunit.runner.visualstudio" version="2.4.0" targetFramework="net461" />
11 + <package id="WixToolset.BalUtil" version="4.0.4" targetFramework="native" />
12 + <package id="WixToolset.BootstrapperCore" version="4.0.3" targetFramework="net461" />
13 + <package id="WixToolset.DUtil" version="4.0.16" targetFramework="native" />
14 +</packages>
\ No newline at end of file
src/test/WixToolsetTest.MbaHost/precomp.cpp new
+3
@@ -0,0 +1,3 @@
1 +// 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.
2 +
3 +#include "precomp.h"
src/test/WixToolsetTest.MbaHost/precomp.h new
+15
@@ -0,0 +1,15 @@
1 +#pragma once
2 +// 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.
3 +
4 +
5 +#include <windows.h>
6 +#include <msiquery.h>
7 +
8 +#include "dutil.h"
9 +#include "logutil.h"
10 +
11 +#include "BootstrapperEngine.h"
12 +#include "BootstrapperApplication.h"
13 +
14 +#include "EngineForTest.h"
15 +#include "TestManagedBootstrapperApplication.h"