aboutsummaryrefslogtreecommitdiff
path: root/src/ext/NetFx
diff options
context:
space:
mode:
Diffstat (limited to 'src/ext/NetFx')
-rw-r--r--src/ext/NetFx/CustomizedNativeRecommendedRules.ruleset8
-rw-r--r--src/ext/NetFx/Directory.Build.props27
-rw-r--r--src/ext/NetFx/Directory.Build.targets51
-rw-r--r--src/ext/NetFx/Directory.csproj.props13
-rw-r--r--src/ext/NetFx/Directory.csproj.targets26
-rw-r--r--src/ext/NetFx/Directory.vcxproj.props115
-rw-r--r--src/ext/NetFx/NetFx.wixext.sln75
-rw-r--r--src/ext/NetFx/README.md2
-rw-r--r--src/ext/NetFx/appveyor.cmd19
-rw-r--r--src/ext/NetFx/appveyor.yml42
-rw-r--r--src/ext/NetFx/ca/caDecor.h13
-rw-r--r--src/ext/NetFx/ca/cost.h7
-rw-r--r--src/ext/NetFx/ca/dllmain.cpp26
-rw-r--r--src/ext/NetFx/ca/netfxca.cpp823
-rw-r--r--src/ext/NetFx/ca/netfxca.def8
-rw-r--r--src/ext/NetFx/ca/netfxca.vcxproj73
-rw-r--r--src/ext/NetFx/ca/precomp.h14
-rw-r--r--src/ext/NetFx/nuget.config19
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/NetfxExtensionFixture.cs147
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs12
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs12
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.en-us.wxl9
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.wxs15
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/PackageComponents.wxs11
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/example.txt1
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.csproj40
-rw-r--r--src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.v3.ncrunchproject5
-rw-r--r--src/ext/NetFx/wix.snkbin0 -> 596 bytes
-rw-r--r--src/ext/NetFx/wixext/NetFxCompiler.cs163
-rw-r--r--src/ext/NetFx/wixext/NetFxDecompiler.cs139
-rw-r--r--src/ext/NetFx/wixext/NetFxExtensionData.cs25
-rw-r--r--src/ext/NetFx/wixext/NetfxExtensionFactory.cs18
-rw-r--r--src/ext/NetFx/wixext/NetfxTableDefinitions.cs30
-rw-r--r--src/ext/NetFx/wixext/NetfxWindowsInstallerBackendExtension.cs13
-rw-r--r--src/ext/NetFx/wixext/Symbols/NetFxNativeImageSymbol.cs58
-rw-r--r--src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs26
-rw-r--r--src/ext/NetFx/wixext/WixToolset.Netfx.wixext.csproj31
-rw-r--r--src/ext/NetFx/wixext/WixToolset.Netfx.wixext.nuspec25
-rw-r--r--src/ext/NetFx/wixext/WixToolset.Netfx.wixext.targets11
-rw-r--r--src/ext/NetFx/wixext/WixToolset.Netfx.wixext.v3.ncrunchproject7
-rw-r--r--src/ext/NetFx/wixlib/NetCore3.1.12_x64.wxs58
-rw-r--r--src/ext/NetFx/wixlib/NetCore3.1.12_x86.wxs58
-rw-r--r--src/ext/NetFx/wixlib/NetCore3.1_x64.wxs22
-rw-r--r--src/ext/NetFx/wixlib/NetCore3.1_x86.wxs22
-rw-r--r--src/ext/NetFx/wixlib/NetCore3_Platform.wxi65
-rw-r--r--src/ext/NetFx/wixlib/NetCoreShared.wxs11
-rw-r--r--src/ext/NetFx/wixlib/NetFx1.1.wxs191
-rw-r--r--src/ext/NetFx/wixlib/NetFx1.wxs30
-rw-r--r--src/ext/NetFx/wixlib/NetFx2.wxs200
-rw-r--r--src/ext/NetFx/wixlib/NetFx3.5.wxs234
-rw-r--r--src/ext/NetFx/wixlib/NetFx3.wxs194
-rw-r--r--src/ext/NetFx/wixlib/NetFx4.5.wxs198
-rw-r--r--src/ext/NetFx/wixlib/NetFx4.wxs416
-rw-r--r--src/ext/NetFx/wixlib/NetFx451.wxs26
-rw-r--r--src/ext/NetFx/wixlib/NetFx452.wxs69
-rw-r--r--src/ext/NetFx/wixlib/NetFx46.wxs70
-rw-r--r--src/ext/NetFx/wixlib/NetFx461.wxs69
-rw-r--r--src/ext/NetFx/wixlib/NetFx462.wxs69
-rw-r--r--src/ext/NetFx/wixlib/NetFx47.wxs20
-rw-r--r--src/ext/NetFx/wixlib/NetFx471.wxs20
-rw-r--r--src/ext/NetFx/wixlib/NetFx472.wxs67
-rw-r--r--src/ext/NetFx/wixlib/NetFx48.wxs67
-rw-r--r--src/ext/NetFx/wixlib/NetFxExtension.wxs38
-rw-r--r--src/ext/NetFx/wixlib/NetFxExtension_Platform.wxi28
-rw-r--r--src/ext/NetFx/wixlib/NetFxExtension_arm64.wxs7
-rw-r--r--src/ext/NetFx/wixlib/NetFxExtension_x64.wxs7
-rw-r--r--src/ext/NetFx/wixlib/NetFxExtension_x86.wxs7
-rw-r--r--src/ext/NetFx/wixlib/caDecor.wxi39
-rw-r--r--src/ext/NetFx/wixlib/netfx.v3.ncrunchproject5
-rw-r--r--src/ext/NetFx/wixlib/netfx.wixproj32
70 files changed, 4498 insertions, 0 deletions
diff --git a/src/ext/NetFx/CustomizedNativeRecommendedRules.ruleset b/src/ext/NetFx/CustomizedNativeRecommendedRules.ruleset
new file mode 100644
index 00000000..142b141c
--- /dev/null
+++ b/src/ext/NetFx/CustomizedNativeRecommendedRules.ruleset
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="utf-8"?>
2<RuleSet Name="Customized Microsoft Native Recommended Rules" Description="Microsoft Native Recommended Rules, -C26812" ToolsVersion="16.0">
3 <Include Path="nativerecommendedrules.ruleset" Action="Default" />
4 <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
5 <!-- We need C style enums since we support BAs written in C -->
6 <Rule Id="C26812" Action="None" />
7 </Rules>
8</RuleSet> \ No newline at end of file
diff --git a/src/ext/NetFx/Directory.Build.props b/src/ext/NetFx/Directory.Build.props
new file mode 100644
index 00000000..b3c6287c
--- /dev/null
+++ b/src/ext/NetFx/Directory.Build.props
@@ -0,0 +1,27 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.props
5 then update all of the repos.
6-->
7<Project>
8 <PropertyGroup>
9 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
10 <EnableSourceLink Condition=" '$(NCrunch)' == '1' ">false</EnableSourceLink>
11 <MSBuildWarningsAsMessages>MSB3246</MSBuildWarningsAsMessages>
12
13 <ProjectName Condition=" '$(ProjectName)' == '' ">$(MSBuildProjectName)</ProjectName>
14 <BaseOutputPath>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\build\))</BaseOutputPath>
15 <BaseIntermediateOutputPath>$(BaseOutputPath)obj\$(ProjectName)\</BaseIntermediateOutputPath>
16 <OutputPath>$(BaseOutputPath)$(Configuration)\</OutputPath>
17
18 <Authors>WiX Toolset Team</Authors>
19 <Company>WiX Toolset</Company>
20 <Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright>
21 <PackageLicenseExpression>MS-RL</PackageLicenseExpression>
22 <Product>WiX Toolset</Product>
23 </PropertyGroup>
24
25 <Import Project="Directory$(MSBuildProjectExtension).props" Condition=" Exists('Directory$(MSBuildProjectExtension).props') " />
26 <Import Project="Custom.Build.props" Condition=" Exists('Custom.Build.props') " />
27</Project>
diff --git a/src/ext/NetFx/Directory.Build.targets b/src/ext/NetFx/Directory.Build.targets
new file mode 100644
index 00000000..2fcc765a
--- /dev/null
+++ b/src/ext/NetFx/Directory.Build.targets
@@ -0,0 +1,51 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.targets
5 then update all of the repos.
6-->
7<!--
8 Replace PackageReferences with ProjectReferences when the projects can be found in .sln.
9 See the original here: https://github.com/dotnet/sdk/issues/1151#issuecomment-385133284
10-->
11<Project>
12 <PropertyGroup>
13 <ReplacePackageReferences>true</ReplacePackageReferences>
14 <TheSolutionPath Condition=" '$(NCrunch)'=='' ">$(SolutionPath)</TheSolutionPath>
15 <TheSolutionPath Condition=" '$(NCrunch)'=='1' ">$(NCrunchOriginalSolutionPath)</TheSolutionPath>
16 </PropertyGroup>
17
18 <Choose>
19 <When Condition="$(ReplacePackageReferences) AND '$(TheSolutionPath)' != '' AND '$(TheSolutionPath)' != '*undefined*' AND Exists('$(TheSolutionPath)')">
20
21 <PropertyGroup>
22 <SolutionFileContent>$([System.IO.File]::ReadAllText($(TheSolutionPath)))</SolutionFileContent>
23 <SmartSolutionDir>$([System.IO.Path]::GetDirectoryName( $(TheSolutionPath) ))</SmartSolutionDir>
24 <RegexPattern>(?&lt;="[PackageName]", ")(.*)(?=", ")</RegexPattern>
25 </PropertyGroup>
26
27 <ItemGroup>
28 <!-- Keep the identity of the PackageReference -->
29 <SmartPackageReference Include="@(PackageReference)">
30 <PackageName>%(Identity)</PackageName>
31 <InSolution>$(SolutionFileContent.Contains('\%(Identity).csproj'))</InSolution>
32 </SmartPackageReference>
33
34 <!-- Filter them by mapping them to another ItemGroup using the WithMetadataValue item function -->
35 <PackageInSolution Include="@(SmartPackageReference->WithMetadataValue('InSolution', True))">
36 <Pattern>$(RegexPattern.Replace('[PackageName]','%(PackageName)') )</Pattern>
37 <SmartPath>$([System.Text.RegularExpressions.Regex]::Match('$(SolutionFileContent)', '%(Pattern)'))</SmartPath>
38 </PackageInSolution>
39
40 <ProjectReference Include="@(PackageInSolution->'$(SmartSolutionDir)\%(SmartPath)' )"/>
41
42 <!-- Remove the package references that are now referenced as projects -->
43 <PackageReference Remove="@(PackageInSolution->'%(PackageName)')"/>
44 </ItemGroup>
45
46 </When>
47 </Choose>
48
49 <Import Project="Directory$(MSBuildProjectExtension).targets" Condition=" Exists('Directory$(MSBuildProjectExtension).targets') " />
50 <Import Project="Custom.Build.targets" Condition=" Exists('Custom.Build.targets') " />
51</Project>
diff --git a/src/ext/NetFx/Directory.csproj.props b/src/ext/NetFx/Directory.csproj.props
new file mode 100644
index 00000000..81d24ad1
--- /dev/null
+++ b/src/ext/NetFx/Directory.csproj.props
@@ -0,0 +1,13 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\CSharp.Build.props
4 then update all of the repos.
5-->
6<Project>
7 <PropertyGroup>
8 <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
9 <SignAssembly>true</SignAssembly>
10 <AssemblyOriginatorKeyFile>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)wix.snk))</AssemblyOriginatorKeyFile>
11 <NBGV_EmitThisAssemblyClass>false</NBGV_EmitThisAssemblyClass>
12 </PropertyGroup>
13</Project>
diff --git a/src/ext/NetFx/Directory.csproj.targets b/src/ext/NetFx/Directory.csproj.targets
new file mode 100644
index 00000000..c3270426
--- /dev/null
+++ b/src/ext/NetFx/Directory.csproj.targets
@@ -0,0 +1,26 @@
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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.csproj.targets
4 then update all of the repos.
5-->
6<Project>
7 <PropertyGroup>
8 <CreateDocumentation Condition=" '$(CreateDocumentationFile)'!='true' ">false</CreateDocumentation>
9 <DocumentationFile Condition=" '$(CreateDocumentationFile)'=='true' ">$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
10 </PropertyGroup>
11
12 <Target Name="SetNuspecProperties" DependsOnTargets="InitializeSourceControlInformation" AfterTargets="GetBuildVersion"
13 Condition=" Exists('$(MSBuildProjectName).nuspec') ">
14 <PropertyGroup>
15 <ProjectUrl Condition=" '$(ProjectUrl)'=='' and '$(PrivateRepositoryUrl)'!='' ">$(PrivateRepositoryUrl.Replace('.git',''))</ProjectUrl>
16
17 <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
18 <NuspecBasePath Condition=" '$(NuspecBasePath)'=='' ">$(OutputPath)..\</NuspecBasePath>
19 <NuspecProperties>$(NuspecProperties);Id=$(PackageId);Authors=$(Authors);Copyright=$(Copyright);Description=$(Description);Title=$(Title)</NuspecProperties>
20 <NuspecProperties>$(NuspecProperties);Version=$(PackageVersion);RepositoryCommit=$(SourceRevisionId);RepositoryType=$(RepositoryType);RepositoryUrl=$(PrivateRepositoryUrl);ProjectFolder=$(MSBuildProjectDirectory)\;ProjectUrl=$(ProjectUrl)</NuspecProperties>
21 <PublishRepositoryUrl>true</PublishRepositoryUrl>
22 <SymbolPackageFormat>snupkg</SymbolPackageFormat>
23 </PropertyGroup>
24 </Target>
25
26</Project>
diff --git a/src/ext/NetFx/Directory.vcxproj.props b/src/ext/NetFx/Directory.vcxproj.props
new file mode 100644
index 00000000..47c2c143
--- /dev/null
+++ b/src/ext/NetFx/Directory.vcxproj.props
@@ -0,0 +1,115 @@
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<Project>
5 <PropertyGroup>
6 <Platform Condition=" '$(Platform)' == '' OR '$(Platform)' == 'AnyCPU' ">Win32</Platform>
7 <IntDir>$(BaseIntermediateOutputPath)$(Configuration)\$(Platform)\</IntDir>
8 <OutDir>$(OutputPath)$(Platform)\</OutDir>
9
10 <!-- NBGV properties -->
11 <AssemblyCompany>$(Company)</AssemblyCompany>
12 <AssemblyCopyright>$(Copyright)</AssemblyCopyright>
13
14 <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
15 <NuGetTargetMoniker>native,Version=v0.0</NuGetTargetMoniker>
16 </PropertyGroup>
17
18 <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' AND '$(VisualStudioVersion)'>='15.0'">
19 <WindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
20 </PropertyGroup>
21
22 <PropertyGroup>
23 <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)CustomizedNativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
24 </PropertyGroup>
25
26 <ItemDefinitionGroup>
27 <ClCompile>
28 <DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
29 <WarningLevel>Level4</WarningLevel>
30 <AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
31 <PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
32 <PrecompiledHeader>Use</PrecompiledHeader>
33 <PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
34 <CallingConvention Condition="'$(Platform)'=='Win32'">StdCall</CallingConvention>
35 <TreatWarningAsError>true</TreatWarningAsError>
36 <ExceptionHandling>false</ExceptionHandling>
37 <AdditionalOptions>-YlprecompDefine</AdditionalOptions>
38 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
39 <MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) &gt; 4 ">true</MultiProcessorCompilation>
40 </ClCompile>
41 <ResourceCompile>
42 <PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
43 <AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
44 </ResourceCompile>
45 <Lib>
46 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
47 </Lib>
48 <Link>
49 <SubSystem>$(ProjectSubSystem)</SubSystem>
50 <ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
51 <NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
52 <GenerateDebugInformation>true</GenerateDebugInformation>
53 <AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
54 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
55 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
56 </Link>
57 </ItemDefinitionGroup>
58
59 <ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
60 <ClCompile>
61 <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
62 </ClCompile>
63 </ItemDefinitionGroup>
64 <ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
65 <ClCompile>
66 <CallingConvention>CDecl</CallingConvention>
67 </ClCompile>
68 </ItemDefinitionGroup>
69 <ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
70 <ClCompile>
71 <DebugInformationFormat>OldStyle</DebugInformationFormat>
72 <OmitDefaultLibName>true</OmitDefaultLibName>
73 <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
74 </ClCompile>
75 </ItemDefinitionGroup>
76 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
77 <ClCompile>
78 <Optimization>Disabled</Optimization>
79 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
80 <PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
81 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
82 </ClCompile>
83 </ItemDefinitionGroup>
84 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' and '$(CLRSupport)'=='true' ">
85 <ClCompile>
86 <BasicRuntimeChecks></BasicRuntimeChecks>
87 <RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
88 </ClCompile>
89 </ItemDefinitionGroup>
90 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
91 <ClCompile>
92 <Optimization>MinSpace</Optimization>
93 <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
94 <FunctionLevelLinking>true</FunctionLevelLinking>
95 <IntrinsicFunctions>true</IntrinsicFunctions>
96 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
97 </ClCompile>
98 <Link>
99 <EnableCOMDATFolding>true</EnableCOMDATFolding>
100 <OptimizeReferences>true</OptimizeReferences>
101 </Link>
102 </ItemDefinitionGroup>
103 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' and '$(CLRSupport)'=='true' ">
104 <ClCompile>
105 <BasicRuntimeChecks></BasicRuntimeChecks>
106 <RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
107 </ClCompile>
108 </ItemDefinitionGroup>
109 <ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
110 <Link>
111 <KeyFile>$(LinkKeyFile)</KeyFile>
112 <DelaySign>$(LinkDelaySign)</DelaySign>
113 </Link>
114 </ItemDefinitionGroup>
115</Project>
diff --git a/src/ext/NetFx/NetFx.wixext.sln b/src/ext/NetFx/NetFx.wixext.sln
new file mode 100644
index 00000000..e830aeea
--- /dev/null
+++ b/src/ext/NetFx/NetFx.wixext.sln
@@ -0,0 +1,75 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15
4VisualStudioVersion = 15.0.27130.2010
5MinimumVisualStudioVersion = 15.0.26124.0
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netfxca", "src\ca\netfxca.vcxproj", "{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}"
7EndProject
8Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "netfx", "src\wixlib\netfx.wixproj", "{45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}"
9EndProject
10Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Netfx.wixext", "src\wixext\WixToolset.Netfx.wixext.csproj", "{F774E291-0563-4DDD-B873-F5C31683CF4B}"
11EndProject
12Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Netfx", "src\test\WixToolsetTest.Netfx\WixToolsetTest.Netfx.csproj", "{AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}"
13EndProject
14Global
15 GlobalSection(SolutionConfigurationPlatforms) = preSolution
16 Debug|Any CPU = Debug|Any CPU
17 Debug|x64 = Debug|x64
18 Debug|x86 = Debug|x86
19 Release|Any CPU = Release|Any CPU
20 Release|x64 = Release|x64
21 Release|x86 = Release|x86
22 EndGlobalSection
23 GlobalSection(ProjectConfigurationPlatforms) = postSolution
24 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|Any CPU.ActiveCfg = Debug|Win32
25 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|Any CPU.Build.0 = Debug|Win32
26 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x64.ActiveCfg = Debug|Win32
27 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.ActiveCfg = Debug|Win32
28 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Debug|x86.Build.0 = Debug|Win32
29 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|Any CPU.ActiveCfg = Release|Win32
30 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|Any CPU.Build.0 = Release|Win32
31 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x64.ActiveCfg = Release|Win32
32 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.ActiveCfg = Release|Win32
33 {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.Release|x86.Build.0 = Release|Win32
34 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|Any CPU.ActiveCfg = Debug|x86
35 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|Any CPU.Build.0 = Debug|x86
36 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x64.ActiveCfg = Debug|x86
37 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x86.ActiveCfg = Debug|x86
38 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Debug|x86.Build.0 = Debug|x86
39 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|Any CPU.ActiveCfg = Release|x86
40 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|Any CPU.Build.0 = Release|x86
41 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x64.ActiveCfg = Release|x86
42 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x86.ActiveCfg = Release|x86
43 {45E4A6AC-3190-4E17-83F0-9935FFA5DC2B}.Release|x86.Build.0 = Release|x86
44 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
45 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
46 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x64.ActiveCfg = Debug|Any CPU
47 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x64.Build.0 = Debug|Any CPU
48 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x86.ActiveCfg = Debug|Any CPU
49 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Debug|x86.Build.0 = Debug|Any CPU
50 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
51 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|Any CPU.Build.0 = Release|Any CPU
52 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x64.ActiveCfg = Release|Any CPU
53 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x64.Build.0 = Release|Any CPU
54 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x86.ActiveCfg = Release|Any CPU
55 {F774E291-0563-4DDD-B873-F5C31683CF4B}.Release|x86.Build.0 = Release|Any CPU
56 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
57 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|Any CPU.Build.0 = Debug|Any CPU
58 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|x64.ActiveCfg = Debug|Any CPU
59 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|x64.Build.0 = Debug|Any CPU
60 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|x86.ActiveCfg = Debug|Any CPU
61 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Debug|x86.Build.0 = Debug|Any CPU
62 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|Any CPU.ActiveCfg = Release|Any CPU
63 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|Any CPU.Build.0 = Release|Any CPU
64 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|x64.ActiveCfg = Release|Any CPU
65 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|x64.Build.0 = Release|Any CPU
66 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|x86.ActiveCfg = Release|Any CPU
67 {AABEF178-D4A2-4EE1-8E00-3EBAB23A5548}.Release|x86.Build.0 = Release|Any CPU
68 EndGlobalSection
69 GlobalSection(SolutionProperties) = preSolution
70 HideSolutionNode = FALSE
71 EndGlobalSection
72 GlobalSection(ExtensibilityGlobals) = postSolution
73 SolutionGuid = {E4566A6B-47D0-4EA0-989A-D763AC39105D}
74 EndGlobalSection
75EndGlobal
diff --git a/src/ext/NetFx/README.md b/src/ext/NetFx/README.md
new file mode 100644
index 00000000..a31cfd1d
--- /dev/null
+++ b/src/ext/NetFx/README.md
@@ -0,0 +1,2 @@
1# NetFx.wixext
2WixToolset.NetFx.wixext - .NET Framework WiX Toolset Extension
diff --git a/src/ext/NetFx/appveyor.cmd b/src/ext/NetFx/appveyor.cmd
new file mode 100644
index 00000000..d7e705f0
--- /dev/null
+++ b/src/ext/NetFx/appveyor.cmd
@@ -0,0 +1,19 @@
1@setlocal
2@pushd %~dp0
3@set _C=Release
4@if /i "%1"=="debug" set _C=Debug
5
6:: Restore
7msbuild -p:Configuration=%_C% -t:Restore || exit /b
8
9:: Build
10msbuild -p:Configuration=%_C% src\test\WixToolsetTest.Netfx\WixToolsetTest.Netfx.csproj || exit /b
11
12:: Test
13dotnet test -c %_C% --no-build src\test\WixToolsetTest.Netfx || exit /b
14
15:: Pack
16msbuild -p:Configuration=%_C% -p:NoBuild=true -t:Pack src\wixext\WixToolset.Netfx.wixext.csproj || exit /b
17
18@popd
19@endlocal
diff --git a/src/ext/NetFx/appveyor.yml b/src/ext/NetFx/appveyor.yml
new file mode 100644
index 00000000..c53cc9cc
--- /dev/null
+++ b/src/ext/NetFx/appveyor.yml
@@ -0,0 +1,42 @@
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# Do NOT modify this file. Update the canonical version in Home\repo-template\src\appveyor.yml
4# then update all of the repos.
5
6branches:
7 only:
8 - master
9 - develop
10
11image: Visual Studio 2019
12
13version: 0.0.0.{build}
14configuration: Release
15
16environment:
17 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
18 DOTNET_CLI_TELEMETRY_OPTOUT: 1
19 NUGET_XMLDOC_MODE: skip
20
21build_script:
22 - appveyor.cmd
23
24pull_requests:
25 do_not_increment_build_number: true
26
27nuget:
28 disable_publish_on_pr: true
29
30skip_branch_with_pr: true
31skip_tags: true
32
33artifacts:
34- path: build\Release\**\*.nupkg
35 name: nuget
36- path: build\Release\**\*.snupkg
37 name: snupkg
38
39notifications:
40- provider: Slack
41 incoming_webhook:
42 secure: p5xuu+4x2JHfwGDMDe5KcG1k7gZxqYc4jWVwvyNZv5cvkubPD2waJs5yXMAXZNN7Z63/3PWHb7q4KoY/99AjauYa1nZ4c5qYqRPFRBKTHfA=
diff --git a/src/ext/NetFx/ca/caDecor.h b/src/ext/NetFx/ca/caDecor.h
new file mode 100644
index 00000000..da274650
--- /dev/null
+++ b/src/ext/NetFx/ca/caDecor.h
@@ -0,0 +1,13 @@
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#if defined(_M_ARM64)
6#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_A64"
7#elif defined(_M_AMD64)
8#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X64"
9#elif defined(_M_ARM)
10#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_ARM"
11#else
12#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X86"
13#endif
diff --git a/src/ext/NetFx/ca/cost.h b/src/ext/NetFx/ca/cost.h
new file mode 100644
index 00000000..95368eba
--- /dev/null
+++ b/src/ext/NetFx/ca/cost.h
@@ -0,0 +1,7 @@
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
5const UINT COST_NGEN_BLOCKING = 5000;
6const UINT COST_NGEN_NONBLOCKING = 500;
7
diff --git a/src/ext/NetFx/ca/dllmain.cpp b/src/ext/NetFx/ca/dllmain.cpp
new file mode 100644
index 00000000..df53f872
--- /dev/null
+++ b/src/ext/NetFx/ca/dllmain.cpp
@@ -0,0 +1,26 @@
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/********************************************************************
6DllMain - standard entry point for all WiX CustomActions
7
8********************************************************************/
9extern "C" BOOL WINAPI DllMain(
10 IN HINSTANCE hInst,
11 IN ULONG ulReason,
12 IN LPVOID)
13{
14 switch(ulReason)
15 {
16 case DLL_PROCESS_ATTACH:
17 WcaGlobalInitialize(hInst);
18 break;
19
20 case DLL_PROCESS_DETACH:
21 WcaGlobalFinalize();
22 break;
23 }
24
25 return TRUE;
26}
diff --git a/src/ext/NetFx/ca/netfxca.cpp b/src/ext/NetFx/ca/netfxca.cpp
new file mode 100644
index 00000000..3a71babf
--- /dev/null
+++ b/src/ext/NetFx/ca/netfxca.cpp
@@ -0,0 +1,823 @@
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#define NGEN_DEBUG 0x0001
6#define NGEN_NODEP 0x0002
7#define NGEN_PROFILE 0x0004
8#define NGEN_32BIT 0x0008
9#define NGEN_64BIT 0x0010
10
11#define NGEN_TIMEOUT 60000 // 60 seconds
12
13// If you change one of these strings, be sure to change the appropriate EmptyFormattedLength variable right below
14LPCWSTR vpwzUnformattedQuotedFile = L"\"[#%s]\"";
15LPCWSTR vpwzUnformattedQuotedDirectory = L"\"[%s]\\\"";
16
17// These represent the length of the above strings in the case that the property resolves to an empty string
18const DWORD EMPTY_FORMATTED_LENGTH_QUOTED_FILE = 2;
19const DWORD EMPTY_FORMATTED_LENGTH_QUOTED_DIRECTORY = 3;
20
21LPCWSTR vcsFileId =
22 L"SELECT `File` FROM `File` WHERE `File`=?";
23enum eFileId { fiFile = 1 };
24
25LPCWSTR vcsNgenQuery =
26 L"SELECT `Wix4NetFxNativeImage`.`File_`, `Wix4NetFxNativeImage`.`Wix4NetFxNativeImage`, `Wix4NetFxNativeImage`.`Priority`, `Wix4NetFxNativeImage`.`Attributes`, `Wix4NetFxNativeImage`.`File_Application`, `Wix4NetFxNativeImage`.`Directory_ApplicationBase`, `File`.`Component_` "
27 L"FROM `Wix4NetFxNativeImage`, `File` WHERE `File`.`File`=`Wix4NetFxNativeImage`.`File_`";
28enum eNgenQuery { ngqFile = 1, ngqId, ngqPriority, ngqAttributes, ngqFileApp, ngqDirAppBase, ngqComponent };
29
30LPCWSTR vcsNgenGac =
31 L"SELECT `MsiAssembly`.`File_Application` "
32 L"FROM `File`, `MsiAssembly` WHERE `File`.`Component_`=`MsiAssembly`.`Component_` AND `File`.`File`=?";
33enum eNgenGac { nggApplication = 1 };
34
35LPCWSTR vcsNgenStrongName =
36 L"SELECT `Name`,`Value` FROM `MsiAssemblyName` WHERE `Component_`=?";
37enum eNgenStrongName { ngsnName = 1, ngsnValue };
38
39// Searches subdirectories of the given path for the highest version of ngen.exe available
40static HRESULT GetNgenVersion(
41 __in LPWSTR pwzParentPath,
42 __out LPWSTR* ppwzVersion
43 )
44{
45 Assert(pwzParentPath);
46
47 HRESULT hr = S_OK;
48 DWORD dwError = 0;
49 DWORD dwNgenFileFlags = 0;
50
51 LPWSTR pwzVersionSearch = NULL;
52 LPWSTR pwzNgen = NULL;
53 LPWSTR pwzTemp = NULL;
54 LPWSTR pwzTempVersion = NULL;
55 DWORD dwMaxMajorVersion = 0; // This stores the highest major version we've seen so far
56 DWORD dwMaxMinorVersion = 0; // This stores the minor version of the highest major version we've seen so far
57 DWORD dwMajorVersion = 0; // This stores the major version of the directory we're currently considering
58 DWORD dwMinorVersion = 0; // This stores the minor version of the directory we're currently considering
59 BOOL fFound = TRUE;
60 WIN32_FIND_DATAW wfdVersionDirectories;
61 HANDLE hFind = INVALID_HANDLE_VALUE;
62
63 hr = StrAllocFormatted(&pwzVersionSearch, L"%s*", pwzParentPath);
64 ExitOnFailure(hr, "failed to create outer directory search string from string %ls", pwzParentPath);
65 hFind = FindFirstFileW(pwzVersionSearch, &wfdVersionDirectories);
66 if (hFind == INVALID_HANDLE_VALUE)
67 {
68 ExitWithLastError(hr, "failed to call FindFirstFileW with string %ls", pwzVersionSearch);
69 }
70
71 while (fFound)
72 {
73 pwzTempVersion = (LPWSTR)&(wfdVersionDirectories.cFileName);
74
75 // Explicitly exclude v1.1.4322, which isn't backwards compatible and is not supported
76 if (wfdVersionDirectories.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
77 {
78 if (0 != lstrcmpW(L"v1.1.4322", pwzTempVersion))
79 {
80 // A potential candidate directory was found to run ngen from - let's make sure ngen actually exists here
81 hr = StrAllocFormatted(&pwzNgen, L"%s%s\\ngen.exe", pwzParentPath, pwzTempVersion);
82 ExitOnFailure(hr, "failed to create inner ngen search string with strings %ls and %ls", pwzParentPath, pwzTempVersion);
83
84 // If Ngen.exe does exist as a file here, then let's check the file version
85 if (FileExistsEx(pwzNgen, &dwNgenFileFlags) && (0 == (dwNgenFileFlags & FILE_ATTRIBUTE_DIRECTORY)))
86 {
87 hr = FileVersion(pwzNgen, &dwMajorVersion, &dwMinorVersion);
88
89 if (FAILED(hr))
90 {
91 WcaLog(LOGMSG_VERBOSE, "Failed to get version of %ls - continuing", pwzNgen);
92 }
93 else if (dwMajorVersion > dwMaxMajorVersion || (dwMajorVersion == dwMaxMajorVersion && dwMinorVersion > dwMaxMinorVersion))
94 {
95 // If the version we found is the highest we've seen so far in this search, it will be our new best-so-far candidate
96 hr = StrAllocString(ppwzVersion, pwzTempVersion, 0);
97 ExitOnFailure(hr, "failed to copy temp version string %ls to version string", pwzTempVersion);
98 // Add one for the backslash after the directory name
99 WcaLog(LOGMSG_VERBOSE, "Found highest-so-far version of ngen.exe (in directory %ls, version %u.%u.%u.%u)", *ppwzVersion, (DWORD)HIWORD(dwMajorVersion), (DWORD)LOWORD(dwMajorVersion), (DWORD)HIWORD(dwMinorVersion), (DWORD)LOWORD(dwMinorVersion));
100
101 dwMaxMajorVersion = dwMajorVersion;
102 dwMaxMinorVersion = dwMinorVersion;
103 }
104 }
105 else
106 {
107 WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it doesn't contain the file ngen.exe", pwzTempVersion);
108 }
109 }
110 else
111 {
112 WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it is from .NET Framework v1.1, which is not backwards compatible with other versions of the Framework and thus is not supported by this custom action.", pwzTempVersion);
113 }
114 }
115 else
116 {
117 WcaLog(LOGMSG_VERBOSE, "Ignoring %ls because it isn't a directory", pwzTempVersion);
118 }
119
120 fFound = FindNextFileW(hFind, &wfdVersionDirectories);
121
122 if (!fFound)
123 {
124 dwError = ::GetLastError();
125 hr = (ERROR_NO_MORE_FILES == dwError) ? ERROR_SUCCESS : HRESULT_FROM_WIN32(dwError);
126 ExitOnFailure(hr, "Failed to call FindNextFileW() with query %ls", pwzVersionSearch);
127 }
128 }
129
130 if (NULL == *ppwzVersion)
131 {
132 hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
133 ExitOnRootFailure(hr, "Searched through all subdirectories of %ls, but failed to find any version of ngen.exe", pwzParentPath);
134 }
135 else
136 {
137 WcaLog(LOGMSG_VERBOSE, "Using highest version of ngen found, located in this subdirectory: %ls, version %u.%u.%u.%u", *ppwzVersion, (DWORD)HIWORD(dwMajorVersion), (DWORD)LOWORD(dwMajorVersion), (DWORD)HIWORD(dwMinorVersion), (DWORD)LOWORD(dwMinorVersion));
138 }
139
140LExit:
141 if (hFind != INVALID_HANDLE_VALUE)
142 {
143 if (0 == FindClose(hFind))
144 {
145 dwError = ::GetLastError();
146 hr = HRESULT_FROM_WIN32(dwError);
147 WcaLog(LOGMSG_STANDARD, "Failed to close handle created by outer FindFirstFile with error %x - continuing", hr);
148 }
149 hFind = INVALID_HANDLE_VALUE;
150 }
151
152 ReleaseStr(pwzVersionSearch);
153 ReleaseStr(pwzNgen);
154 ReleaseStr(pwzTemp);
155 // Purposely don't release pwzTempVersion, because it wasn't allocated in this function, it's just a pointer to a string inside wfdVersionDirectories
156
157 return hr;
158}
159
160// Gets the path to ngen.exe
161static HRESULT GetNgenPath(
162 __out LPWSTR* ppwzNgenPath,
163 __in BOOL f64BitFramework
164 )
165{
166 Assert(ppwzNgenPath);
167 HRESULT hr = S_OK;
168
169 LPWSTR pwzVersion = NULL;
170 LPWSTR pwzWindowsFolder = NULL;
171
172 hr = WcaGetProperty(L"WindowsFolder", &pwzWindowsFolder);
173 ExitOnFailure(hr, "failed to get WindowsFolder property");
174
175 hr = StrAllocString(ppwzNgenPath, pwzWindowsFolder, 0);
176 ExitOnFailure(hr, "failed to copy to NgenPath windows folder: %ls", pwzWindowsFolder);
177
178 if (f64BitFramework)
179 {
180 WcaLog(LOGMSG_VERBOSE, "Searching for ngen under 64-bit framework path");
181
182 hr = StrAllocConcat(ppwzNgenPath, L"Microsoft.NET\\Framework64\\", 0);
183 ExitOnFailure(hr, "failed to copy platform portion of ngen path");
184 }
185 else
186 {
187 WcaLog(LOGMSG_VERBOSE, "Searching for ngen under 32-bit framework path");
188
189 hr = StrAllocConcat(ppwzNgenPath, L"Microsoft.NET\\Framework\\", 0);
190 ExitOnFailure(hr, "failed to copy platform portion of ngen path");
191 }
192
193 // We want to run the highest version of ngen possible, because they should be backwards compatible - so let's find the most appropriate directory now
194 hr = GetNgenVersion(*ppwzNgenPath, &pwzVersion);
195 ExitOnFailure(hr, "failed to search for ngen under path %ls", *ppwzNgenPath);
196
197 hr = StrAllocConcat(ppwzNgenPath, pwzVersion, 0);
198 ExitOnFailure(hr, "failed to copy version portion of ngen path");
199
200 hr = StrAllocConcat(ppwzNgenPath, L"\\ngen.exe", 0);
201 ExitOnFailure(hr, "failed to copy \"\\ngen.exe\" portion of ngen path");
202
203LExit:
204 ReleaseStr(pwzVersion);
205 ReleaseStr(pwzWindowsFolder);
206
207 return hr;
208}
209
210
211static HRESULT GetStrongName(
212 __out LPWSTR* ppwzStrongName,
213 __in LPCWSTR pwzComponent
214 )
215{
216 Assert(ppwzStrongName);
217 HRESULT hr = S_OK;
218
219 PMSIHANDLE hView = NULL;
220 PMSIHANDLE hComponentRec = NULL;
221 PMSIHANDLE hRec = NULL;
222
223 LPWSTR pwzData = NULL;
224 LPWSTR pwzName = NULL;
225 LPWSTR pwzVersion = NULL;
226 LPWSTR pwzCulture = NULL;
227 LPWSTR pwzPublicKeyToken = NULL;
228
229 hComponentRec = ::MsiCreateRecord(1);
230 hr = WcaSetRecordString(hComponentRec, 1, pwzComponent);
231 ExitOnFailure(hr, "failed to set component value in record to: %ls", pwzComponent);
232
233 // get the name value records for this component
234 hr = WcaOpenView(vcsNgenStrongName, &hView);
235 ExitOnFailure(hr, "failed to open view on Wix4NetFxNativeImage table");
236
237 hr = WcaExecuteView(hView, hComponentRec);
238 ExitOnFailure(hr, "failed to execute strong name view");
239
240 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
241 {
242 hr = WcaGetRecordString(hRec, ngsnName, &pwzData);
243 ExitOnFailure(hr, "failed to get MsiAssemblyName.Name for component: %ls", pwzComponent);
244
245 if (0 == lstrcmpW(L"name", pwzData))
246 {
247 hr = WcaGetRecordString(hRec, ngsnValue, &pwzName);
248 ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
249 }
250 else if (0 == lstrcmpW(L"version", pwzData))
251 {
252 hr = WcaGetRecordString(hRec, ngsnValue, &pwzVersion);
253 ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
254 }
255 else if (0 == lstrcmpW(L"culture", pwzData))
256 {
257 hr = WcaGetRecordString(hRec, ngsnValue, &pwzCulture);
258 ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
259 }
260 else if (0 == lstrcmpW(L"publicKeyToken", pwzData))
261 {
262 hr = WcaGetRecordString(hRec, ngsnValue, &pwzPublicKeyToken);
263 ExitOnFailure(hr, "failed to get MsiAssemblyName.Value for component: %ls Name: %ls", pwzComponent, pwzData);
264 }
265 }
266 if (E_NOMOREITEMS == hr)
267 hr = S_OK;
268 ExitOnFailure(hr, "failed while looping through all names and values in MsiAssemblyName table for component: %ls", pwzComponent);
269
270 hr = StrAllocFormatted(ppwzStrongName, L"\"%s, Version=%s, Culture=%s, PublicKeyToken=%s\"", pwzName, pwzVersion, pwzCulture, pwzPublicKeyToken);
271 ExitOnFailure(hr, "failed to format strong name for component: %ls", pwzComponent);
272
273LExit:
274 ReleaseStr(pwzData);
275 ReleaseStr(pwzName);
276 ReleaseStr(pwzVersion);
277 ReleaseStr(pwzCulture);
278 ReleaseStr(pwzPublicKeyToken);
279
280 return hr;
281}
282
283static HRESULT CreateInstallCommand(
284 __out LPWSTR* ppwzCommandLine,
285 __in LPCWSTR pwzNgenPath,
286 __in LPCWSTR pwzFile,
287 __in int iPriority,
288 __in int iAttributes,
289 __in LPCWSTR pwzFileApp,
290 __in LPCWSTR pwzDirAppBase
291 )
292{
293 Assert(ppwzCommandLine && pwzNgenPath && *pwzNgenPath && pwzFile && *pwzFile&& pwzFileApp && pwzDirAppBase);
294 HRESULT hr = S_OK;
295
296 LPWSTR pwzQueueString = NULL;
297
298 hr = StrAllocFormatted(ppwzCommandLine, L"%s install %s", pwzNgenPath, pwzFile);
299 ExitOnFailure(hr, "failed to assemble install command line");
300
301 if (iPriority > 0)
302 {
303 hr = StrAllocFormatted(&pwzQueueString, L" /queue:%d", iPriority);
304 ExitOnFailure(hr, "failed to format queue string");
305
306 hr = StrAllocConcat(ppwzCommandLine, pwzQueueString, 0);
307 ExitOnFailure(hr, "failed to add queue string to NGEN command line");
308 }
309
310 if (NGEN_DEBUG & iAttributes)
311 {
312 hr = StrAllocConcat(ppwzCommandLine, L" /Debug", 0);
313 ExitOnFailure(hr, "failed to add debug to NGEN command line");
314 }
315
316 if (NGEN_PROFILE & iAttributes)
317 {
318 hr = StrAllocConcat(ppwzCommandLine, L" /Profile", 0);
319 ExitOnFailure(hr, "failed to add profile to NGEN command line");
320 }
321
322 if (NGEN_NODEP & iAttributes)
323 {
324 hr = StrAllocConcat(ppwzCommandLine, L" /NoDependencies", 0);
325 ExitOnFailure(hr, "failed to add no dependencies to NGEN command line");
326 }
327
328 // If it's more than just two quotes around an empty string
329 if (EMPTY_FORMATTED_LENGTH_QUOTED_FILE < lstrlenW(pwzFileApp))
330 {
331 hr = StrAllocConcat(ppwzCommandLine, L" /ExeConfig:", 0);
332 ExitOnFailure(hr, "failed to add exe config to NGEN command line");
333
334 hr = StrAllocConcat(ppwzCommandLine, pwzFileApp, 0);
335 ExitOnFailure(hr, "failed to add file app to NGEN command line");
336 }
337
338 // If it's more than just two quotes around a backslash
339 if (EMPTY_FORMATTED_LENGTH_QUOTED_DIRECTORY < lstrlenW(pwzDirAppBase))
340 {
341 hr = StrAllocConcat(ppwzCommandLine, L" /AppBase:", 0);
342 ExitOnFailure(hr, "failed to add app base to NGEN command line");
343
344 hr = StrAllocConcat(ppwzCommandLine, pwzDirAppBase, 0);
345 ExitOnFailure(hr, "failed to add dir app base to NGEN command line");
346 }
347
348LExit:
349 return hr;
350}
351
352/******************************************************************
353 FileIdExists - checks if the file ID is found in the File table
354
355 returns S_OK if the file exists; S_FALSE if not; otherwise, error
356********************************************************************/
357static HRESULT FileIdExists(
358 __in_opt LPCWSTR wzFile
359 )
360{
361 HRESULT hr = S_OK;
362 PMSIHANDLE hView = NULL;
363 PMSIHANDLE hRec = NULL;
364
365 if (!wzFile)
366 {
367 hr = S_FALSE;
368 ExitFunction();
369 }
370
371 hRec = ::MsiCreateRecord(1);
372 hr = WcaSetRecordString(hRec, fiFile, wzFile);
373 ExitOnFailure(hr, "failed to create a record with the file: %ls", wzFile);
374
375 hr = WcaTableExists(L"File");
376 if (S_OK == hr)
377 {
378 hr = WcaOpenView(vcsFileId, &hView);
379 ExitOnFailure(hr, "failed to open view on File table");
380
381 hr = WcaExecuteView(hView, hRec);
382 ExitOnFailure(hr, "failed to execute view on File table");
383
384 // Reuse the same record; the handle will be released.
385 hr = WcaFetchSingleRecord(hView, &hRec);
386 ExitOnFailure(hr, "failed to fetch File from File table");
387 }
388
389LExit:
390
391 return hr;
392}
393
394/******************************************************************
395 SchedNetFx - entry point for NetFx Custom Action
396
397********************************************************************/
398extern "C" UINT __stdcall SchedNetFx(
399 __in MSIHANDLE hInstall
400 )
401{
402 // AssertSz(FALSE, "debug SchedNetFx");
403
404 HRESULT hr = S_OK;
405 UINT er = ERROR_SUCCESS;
406
407 LPWSTR pwzInstallCustomActionData = NULL;
408 LPWSTR pwzUninstallCustomActionData = NULL;
409 UINT uiCost = 0;
410
411 PMSIHANDLE hView = NULL;
412 PMSIHANDLE hRec = NULL;
413 PMSIHANDLE hViewGac = NULL;
414 PMSIHANDLE hRecGac = NULL;
415
416 LPWSTR pwzId = NULL;
417 LPWSTR pwzData = NULL;
418 LPWSTR pwzTemp = NULL;
419 LPWSTR pwzFile = NULL;
420 int iPriority = 0;
421 int iAssemblyCost = 0;
422 int iAttributes = 0;
423 LPWSTR pwzFileApp = NULL;
424 LPWSTR pwzDirAppBase = NULL;
425 LPWSTR pwzComponent = NULL;
426
427 INSTALLSTATE isInstalled;
428 INSTALLSTATE isAction;
429
430 LPWSTR pwz32Ngen = NULL;
431 LPWSTR pwz64Ngen = NULL;
432
433 BOOL f32NgenExeExists = FALSE;
434 BOOL f64NgenExeExists = FALSE;
435
436 BOOL fNeedInstallUpdate32 = FALSE;
437 BOOL fNeedUninstallUpdate32 = FALSE;
438 BOOL fNeedInstallUpdate64 = FALSE;
439 BOOL fNeedUninstallUpdate64 = FALSE;
440
441 // initialize
442 hr = WcaInitialize(hInstall, "SchedNetFx");
443 ExitOnFailure(hr, "failed to initialize");
444
445 hr = GetNgenPath(&pwz32Ngen, FALSE);
446 f32NgenExeExists = SUCCEEDED(hr);
447 if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
448 {
449 hr = ERROR_SUCCESS;
450 WcaLog(LOGMSG_STANDARD, "Failed to find 32bit ngen. No actions will be scheduled to create native images for 32bit.");
451 }
452 ExitOnFailure(hr, "failed to get 32bit ngen.exe path");
453
454 hr = GetNgenPath(&pwz64Ngen, TRUE);
455 f64NgenExeExists = SUCCEEDED(hr);
456 if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr || HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
457 {
458 hr = ERROR_SUCCESS;
459 WcaLog(LOGMSG_STANDARD, "Failed to find 64bit ngen. No actions will be scheduled to create native images for 64bit.");
460 }
461 ExitOnFailure(hr, "failed to get 64bit ngen.exe path");
462
463 // loop through all the NetFx records
464 hr = WcaOpenExecuteView(vcsNgenQuery, &hView);
465 ExitOnFailure(hr, "failed to open view on Wix4NetFxNativeImage table");
466
467 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
468 {
469 // Get Id
470 hr = WcaGetRecordString(hRec, ngqId, &pwzId);
471 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.Wix4NetFxNativeImage");
472
473 // Get File
474 hr = WcaGetRecordString(hRec, ngqFile, &pwzData);
475 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.File_ for record: %ls", pwzId);
476 hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedFile, pwzData);
477 ExitOnFailure(hr, "failed to format file string for file: %ls", pwzData);
478 hr = WcaGetFormattedString(pwzTemp, &pwzFile);
479 ExitOnFailure(hr, "failed to get formatted string for file: %ls", pwzData);
480
481 // Get Priority
482 hr = WcaGetRecordInteger(hRec, ngqPriority, &iPriority);
483 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.Priority for record: %ls", pwzId);
484
485 if (0 == iPriority)
486 iAssemblyCost = COST_NGEN_BLOCKING;
487 else
488 iAssemblyCost = COST_NGEN_NONBLOCKING;
489
490 // Get Attributes
491 hr = WcaGetRecordInteger(hRec, ngqAttributes, &iAttributes);
492 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.Attributes for record: %ls", pwzId);
493
494 // Get File_Application or leave pwzFileApp NULL.
495 hr = WcaGetRecordFormattedString(hRec, ngqFileApp, &pwzData);
496 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.File_Application for record: %ls", pwzId);
497
498 // Check if the value resolves to a valid file ID.
499 if (S_OK == FileIdExists(pwzData))
500 {
501 // Resolve the file ID to a path.
502 hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedFile, pwzData);
503 ExitOnFailure(hr, "failed to format file application string for file: %ls", pwzData);
504
505 hr = WcaGetFormattedString(pwzTemp, &pwzFileApp);
506 ExitOnFailure(hr, "failed to get formatted string for file application: %ls", pwzData);
507 }
508 else
509 {
510 // Assume record formatted to a path already.
511 hr = StrAllocString(&pwzFileApp, pwzData, 0);
512 ExitOnFailure(hr, "failed to allocate string for file path: %ls", pwzData);
513
514 hr = PathEnsureQuoted(&pwzFileApp, FALSE);
515 ExitOnFailure(hr, "failed to quote file path: %ls", pwzData);
516 }
517
518 // Get Directory_ApplicationBase or leave pwzDirAppBase NULL.
519 hr = WcaGetRecordFormattedString(hRec, ngqDirAppBase, &pwzData);
520 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.Directory_ApplicationBase for record: %ls", pwzId);
521
522 if (WcaIsUnicodePropertySet(pwzData))
523 {
524 // Resolve the directory ID to a path.
525 hr = StrAllocFormatted(&pwzTemp, vpwzUnformattedQuotedDirectory, pwzData);
526 ExitOnFailure(hr, "failed to format directory application base string for property: %ls", pwzData);
527
528 hr = WcaGetFormattedString(pwzTemp, &pwzDirAppBase);
529 ExitOnFailure(hr, "failed to get formatted string for directory application base: %ls", pwzData);
530 }
531 else
532 {
533 // Assume record formatted to a path already.
534 hr = StrAllocString(&pwzDirAppBase, pwzData, 0);
535 ExitOnFailure(hr, "failed to allocate string for directory path: %ls", pwzData);
536
537 hr = PathEnsureQuoted(&pwzDirAppBase, TRUE);
538 ExitOnFailure(hr, "failed to quote and backslashify directory: %ls", pwzData);
539 }
540
541 // Get Component
542 hr = WcaGetRecordString(hRec, ngqComponent, &pwzComponent);
543 ExitOnFailure(hr, "failed to get Wix4NetFxNativeImage.Directory_ApplicationBase for record: %ls", pwzId);
544 er = ::MsiGetComponentStateW(hInstall, pwzComponent, &isInstalled, &isAction);
545 ExitOnWin32Error(er, hr, "failed to get install state for Component: %ls", pwzComponent);
546
547 //
548 // Figure out if it's going to be GAC'd. The possibility exists that no assemblies are going to be GAC'd
549 // so we have to check for the MsiAssembly table first.
550 //
551 if (S_OK == WcaTableExists(L"MsiAssembly"))
552 {
553 hr = WcaOpenView(vcsNgenGac, &hViewGac);
554 ExitOnFailure(hr, "failed to open view on File/MsiAssembly table");
555
556 hr = WcaExecuteView(hViewGac, hRec);
557 ExitOnFailure(hr, "failed to execute view on File/MsiAssembly table");
558
559 hr = WcaFetchSingleRecord(hViewGac, &hRecGac);
560 ExitOnFailure(hr, "failed to fetch File_Assembly from File/MsiAssembly table");
561
562 if (S_FALSE != hr)
563 {
564 hr = WcaGetRecordString(hRecGac, nggApplication, &pwzData);
565 ExitOnFailure(hr, "failed to get MsiAssembly.File_Application");
566
567 // If it's in the GAC replace the file name with the strong name
568 if (L'\0' == pwzData[0])
569 {
570 hr = GetStrongName(&pwzFile, pwzComponent);
571 ExitOnFailure(hr, "failed to get strong name for component: %ls", pwzData);
572 }
573 }
574 }
575
576 //
577 // Schedule the work
578 //
579 if (!(iAttributes & NGEN_32BIT) && !(iAttributes & NGEN_64BIT))
580 ExitOnFailure(hr = E_INVALIDARG, "Neither 32bit nor 64bit is specified for NGEN of file: %ls", pwzFile);
581
582 if (WcaIsInstalling(isInstalled, isAction) || WcaIsReInstalling(isInstalled, isAction))
583 {
584 if (iAttributes & NGEN_32BIT && f32NgenExeExists)
585 {
586 // Assemble the install command line
587 hr = CreateInstallCommand(&pwzData, pwz32Ngen, pwzFile, iPriority, iAttributes, pwzFileApp, pwzDirAppBase);
588 ExitOnFailure(hr, "failed to create install command line");
589
590 hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData);
591 ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
592
593 hr = WcaWriteIntegerToCaData(iAssemblyCost, &pwzInstallCustomActionData);
594 ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
595
596 uiCost += iAssemblyCost;
597
598 fNeedInstallUpdate32 = TRUE;
599 }
600
601 if (iAttributes & NGEN_64BIT && f64NgenExeExists)
602 {
603 // Assemble the install command line
604 hr = CreateInstallCommand(&pwzData, pwz64Ngen, pwzFile, iPriority, iAttributes, pwzFileApp, pwzDirAppBase);
605 ExitOnFailure(hr, "failed to create install command line");
606
607 hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
608 ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
609
610 hr = WcaWriteIntegerToCaData(iAssemblyCost, &pwzInstallCustomActionData); // cost
611 ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
612
613 uiCost += iAssemblyCost;
614
615 fNeedInstallUpdate64 = TRUE;
616 }
617 }
618 else if (WcaIsUninstalling(isInstalled, isAction))
619 {
620 if (iAttributes & NGEN_32BIT && f32NgenExeExists)
621 {
622 hr = StrAllocFormatted(&pwzData, L"%s uninstall %s", pwz32Ngen, pwzFile);
623 ExitOnFailure(hr, "failed to create update 32 command line");
624
625 hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
626 ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
627
628 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
629 ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
630
631 uiCost += COST_NGEN_NONBLOCKING;
632
633 fNeedUninstallUpdate32 = TRUE;
634 }
635
636 if (iAttributes & NGEN_64BIT && f64NgenExeExists)
637 {
638 hr = StrAllocFormatted(&pwzData, L"%s uninstall %s", pwz64Ngen, pwzFile);
639 ExitOnFailure(hr, "failed to create update 64 command line");
640
641 hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
642 ExitOnFailure(hr, "failed to add install command to custom action data: %ls", pwzData);
643
644 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
645 ExitOnFailure(hr, "failed to add cost to custom action data: %ls", pwzData);
646
647 uiCost += COST_NGEN_NONBLOCKING;
648
649 fNeedUninstallUpdate64 = TRUE;
650 }
651 }
652 }
653 if (E_NOMOREITEMS == hr)
654 hr = S_OK;
655 ExitOnFailure(hr, "failed while looping through all files to create native images for");
656
657 // If we need 32 bit install update
658 if (fNeedInstallUpdate32)
659 {
660 hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz32Ngen);
661 ExitOnFailure(hr, "failed to create install update 32 command line");
662
663 hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
664 ExitOnFailure(hr, "failed to add install command to install custom action data: %ls", pwzData);
665
666 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzInstallCustomActionData); // cost
667 ExitOnFailure(hr, "failed to add cost to install custom action data: %ls", pwzData);
668
669 uiCost += COST_NGEN_NONBLOCKING;
670 }
671
672 // If we need 32 bit uninstall update
673 if (fNeedUninstallUpdate32)
674 {
675 hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz32Ngen);
676 ExitOnFailure(hr, "failed to create uninstall update 32 command line");
677
678 hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
679 ExitOnFailure(hr, "failed to add install command to uninstall custom action data: %ls", pwzData);
680
681 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
682 ExitOnFailure(hr, "failed to add cost to uninstall custom action data: %ls", pwzData);
683
684 uiCost += COST_NGEN_NONBLOCKING;
685 }
686
687 // If we need 64 bit install update
688 if (fNeedInstallUpdate64)
689 {
690 hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz64Ngen);
691 ExitOnFailure(hr, "failed to create install update 64 command line");
692
693 hr = WcaWriteStringToCaData(pwzData, &pwzInstallCustomActionData); // command
694 ExitOnFailure(hr, "failed to add install command to install custom action data: %ls", pwzData);
695
696 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzInstallCustomActionData); // cost
697 ExitOnFailure(hr, "failed to add cost to install custom action data: %ls", pwzData);
698
699 uiCost += COST_NGEN_NONBLOCKING;
700 }
701
702 // If we need 64 bit install update
703 if (fNeedUninstallUpdate64)
704 {
705 hr = StrAllocFormatted(&pwzData, L"%s update /queue", pwz64Ngen);
706 ExitOnFailure(hr, "failed to create uninstall update 64 command line");
707
708 hr = WcaWriteStringToCaData(pwzData, &pwzUninstallCustomActionData); // command
709 ExitOnFailure(hr, "failed to add install command to uninstall custom action data: %ls", pwzData);
710
711 hr = WcaWriteIntegerToCaData(COST_NGEN_NONBLOCKING, &pwzUninstallCustomActionData); // cost
712 ExitOnFailure(hr, "failed to add cost to uninstall custom action data: %ls", pwzData);
713
714 uiCost += COST_NGEN_NONBLOCKING;
715 }
716
717 // Add to progress bar
718 if ((pwzInstallCustomActionData && *pwzInstallCustomActionData) || (pwzUninstallCustomActionData && *pwzUninstallCustomActionData))
719 {
720 hr = WcaProgressMessage(uiCost, TRUE);
721 ExitOnFailure(hr, "failed to extend progress bar for NetFxExecuteNativeImage");
722 }
723
724 // Schedule the install custom action
725 if (pwzInstallCustomActionData && *pwzInstallCustomActionData)
726 {
727 hr = WcaSetProperty(L"NetFxExecuteNativeImageInstall", pwzInstallCustomActionData);
728 ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageInstall action");
729
730 hr = WcaSetProperty(L"NetFxExecuteNativeImageCommitInstall", pwzInstallCustomActionData);
731 ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageCommitInstall action");
732 }
733
734 // Schedule the uninstall custom action
735 if (pwzUninstallCustomActionData && *pwzUninstallCustomActionData)
736 {
737 hr = WcaSetProperty(L"NetFxExecuteNativeImageUninstall", pwzUninstallCustomActionData);
738 ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageUninstall action");
739
740 hr = WcaSetProperty(L"NetFxExecuteNativeImageCommitUninstall", pwzUninstallCustomActionData);
741 ExitOnFailure(hr, "failed to schedule NetFxExecuteNativeImageCommitUninstall action");
742 }
743
744
745LExit:
746 ReleaseStr(pwzInstallCustomActionData);
747 ReleaseStr(pwzUninstallCustomActionData);
748 ReleaseStr(pwzId);
749 ReleaseStr(pwzData);
750 ReleaseStr(pwzTemp);
751 ReleaseStr(pwzFile);
752 ReleaseStr(pwzFileApp);
753 ReleaseStr(pwzDirAppBase);
754 ReleaseStr(pwzComponent);
755 ReleaseStr(pwz32Ngen);
756 ReleaseStr(pwz64Ngen);
757
758 if (FAILED(hr))
759 er = ERROR_INSTALL_FAILURE;
760 return WcaFinalize(er);
761}
762
763
764/******************************************************************
765 ExecNetFx - entry point for NetFx Custom Action
766
767*******************************************************************/
768extern "C" UINT __stdcall ExecNetFx(
769 __in MSIHANDLE hInstall
770 )
771{
772// AssertSz(FALSE, "debug ExecNetFx");
773
774 HRESULT hr = S_OK;
775 UINT er = ERROR_SUCCESS;
776
777 LPWSTR pwzCustomActionData = NULL;
778 LPWSTR pwzData = NULL;
779 LPWSTR pwz = NULL;
780 int iCost = 0;
781
782 // initialize
783 hr = WcaInitialize(hInstall, "ExecNetFx");
784 ExitOnFailure(hr, "failed to initialize");
785
786 hr = WcaGetProperty( L"CustomActionData", &pwzCustomActionData);
787 ExitOnFailure(hr, "failed to get CustomActionData");
788
789 WcaLog(LOGMSG_TRACEONLY, "CustomActionData: %ls", pwzCustomActionData);
790
791 pwz = pwzCustomActionData;
792
793 // loop through all the passed in data
794 while (pwz && *pwz)
795 {
796 hr = WcaReadStringFromCaData(&pwz, &pwzData);
797 ExitOnFailure(hr, "failed to read command line from custom action data");
798
799 hr = WcaReadIntegerFromCaData(&pwz, &iCost);
800 ExitOnFailure(hr, "failed to read cost from custom action data");
801
802 hr = QuietExec(pwzData, NGEN_TIMEOUT, TRUE, TRUE);
803 // If we fail here it isn't critical - keep looping through to try to act on the other assemblies on our list
804 if (FAILED(hr))
805 {
806 WcaLog(LOGMSG_STANDARD, "failed to execute Ngen command (with error 0x%x): %ls, continuing anyway", hr, pwzData);
807 hr = S_OK;
808 }
809
810 // Tick the progress bar along for this assembly
811 hr = WcaProgressMessage(iCost, FALSE);
812 ExitOnFailure(hr, "failed to tick progress bar for command line: %ls", pwzData);
813 }
814
815LExit:
816 ReleaseStr(pwzCustomActionData);
817 ReleaseStr(pwzData);
818
819 if (FAILED(hr))
820 er = ERROR_INSTALL_FAILURE;
821 return WcaFinalize(er);
822}
823
diff --git a/src/ext/NetFx/ca/netfxca.def b/src/ext/NetFx/ca/netfxca.def
new file mode 100644
index 00000000..c1d01f5f
--- /dev/null
+++ b/src/ext/NetFx/ca/netfxca.def
@@ -0,0 +1,8 @@
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
4LIBRARY "netfxca"
5
6EXPORTS
7 SchedNetFx
8 ExecNetFx
diff --git a/src/ext/NetFx/ca/netfxca.vcxproj b/src/ext/NetFx/ca/netfxca.vcxproj
new file mode 100644
index 00000000..5e25b683
--- /dev/null
+++ b/src/ext/NetFx/ca/netfxca.vcxproj
@@ -0,0 +1,73 @@
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<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 <ItemGroup Label="ProjectConfigurations">
6 <ProjectConfiguration Include="Debug|Win32">
7 <Configuration>Debug</Configuration>
8 <Platform>Win32</Platform>
9 </ProjectConfiguration>
10 <ProjectConfiguration Include="Release|Win32">
11 <Configuration>Release</Configuration>
12 <Platform>Win32</Platform>
13 </ProjectConfiguration>
14 <ProjectConfiguration Include="Debug|x64">
15 <Configuration>Debug</Configuration>
16 <Platform>x64</Platform>
17 </ProjectConfiguration>
18 <ProjectConfiguration Include="Release|x64">
19 <Configuration>Release</Configuration>
20 <Platform>x64</Platform>
21 </ProjectConfiguration>
22 <ProjectConfiguration Include="Debug|ARM64">
23 <Configuration>Debug</Configuration>
24 <Platform>ARM64</Platform>
25 </ProjectConfiguration>
26 <ProjectConfiguration Include="Release|ARM64">
27 <Configuration>Release</Configuration>
28 <Platform>ARM64</Platform>
29 </ProjectConfiguration>
30 </ItemGroup>
31
32 <PropertyGroup Label="Globals">
33 <ProjectGuid>{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}</ProjectGuid>
34 <ConfigurationType>DynamicLibrary</ConfigurationType>
35 <TargetName>netfxca</TargetName>
36 <PlatformToolset>v142</PlatformToolset>
37 <CharacterSet>Unicode</CharacterSet>
38 <ProjectModuleDefinitionFile>netfxca.def</ProjectModuleDefinitionFile>
39 <Description>WiX Toolset .NET Framework CustomAction</Description>
40 </PropertyGroup>
41
42 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
43 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
44
45 <PropertyGroup>
46 <ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
47 </PropertyGroup>
48
49 <ItemGroup>
50 <ClCompile Include="dllmain.cpp">
51 <PrecompiledHeader>Create</PrecompiledHeader>
52 </ClCompile>
53 <ClCompile Include="netfxca.cpp" />
54 </ItemGroup>
55
56 <ItemGroup>
57 <ClInclude Include="cost.h" />
58 <ClInclude Include="precomp.h" />
59 </ItemGroup>
60
61 <ItemGroup>
62 <None Include="netfxca.def" />
63 </ItemGroup>
64
65 <ItemGroup>
66 <PackageReference Include="WixToolset.Dutil" Version="4.0.72" />
67 <PackageReference Include="WixToolset.WcaUtil" Version="4.0.19" />
68 <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
69 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" />
70 </ItemGroup>
71
72 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
73</Project>
diff --git a/src/ext/NetFx/ca/precomp.h b/src/ext/NetFx/ca/precomp.h
new file mode 100644
index 00000000..4a83c164
--- /dev/null
+++ b/src/ext/NetFx/ca/precomp.h
@@ -0,0 +1,14 @@
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 "wcautil.h"
9#include "fileutil.h"
10#include "strutil.h"
11#include "pathutil.h"
12
13#include "caDecor.h"
14#include "cost.h"
diff --git a/src/ext/NetFx/nuget.config b/src/ext/NetFx/nuget.config
new file mode 100644
index 00000000..7f258709
--- /dev/null
+++ b/src/ext/NetFx/nuget.config
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8"?>
2<configuration>
3 <packageSources>
4 <clear />
5 <add key="wixtoolset-data" value="https://ci.appveyor.com/nuget/wixtoolset-data" />
6 <add key="wixtoolset-extensibility" value="https://ci.appveyor.com/nuget/wixtoolset-extensibility" />
7 <add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" />
8 <add key="wixtoolset-core-native" value="https://ci.appveyor.com/nuget/wixtoolset-core-native" />
9 <add key="wixtoolset-dtf" value="https://ci.appveyor.com/nuget/wixtoolset-dtf" />
10 <add key="wixtoolset-dutil" value="https://ci.appveyor.com/nuget/wixtoolset-dutil" />
11 <add key="wixtoolset-wcautil" value="https://ci.appveyor.com/nuget/wixtoolset-wcautil" />
12 <add key="wixtoolset-tools" value="https://ci.appveyor.com/nuget/wixtoolset-tools" />
13 <add key="wixtoolset-bal-wixext" value="https://ci.appveyor.com/nuget/wixtoolset-bal-wixext" />
14 <add key="wixtoolset-util-wixext" value="https://ci.appveyor.com/nuget/wixtoolset-util-wixext" />
15 <add key="wixburn" value="https://ci.appveyor.com/nuget/wixtoolset-burn" />
16 <add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
17 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
18 </packageSources>
19</configuration> \ No newline at end of file
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/NetfxExtensionFixture.cs b/src/ext/NetFx/test/WixToolsetTest.Netfx/NetfxExtensionFixture.cs
new file mode 100644
index 00000000..72d4a682
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/NetfxExtensionFixture.cs
@@ -0,0 +1,147 @@
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
3namespace WixToolsetTest.Netfx
4{
5 using System.IO;
6 using System.Linq;
7 using WixBuildTools.TestSupport;
8 using WixToolset.Core.TestPackage;
9 using WixToolset.Netfx;
10 using Xunit;
11
12 public class NetfxExtensionFixture
13 {
14 [Fact]
15 public void CanBuildUsingLatestDotNetCorePackages()
16 {
17 using (var fs = new DisposableFileSystem())
18 {
19 var baseFolder = fs.GetFolder();
20 var bundleFile = Path.Combine(baseFolder, "bin", "test.exe");
21 var bundleSourceFolder = TestData.Get(@"TestData\UsingDotNetCorePackages");
22 var intermediateFolder = Path.Combine(baseFolder, "obj");
23
24 var compileResult = WixRunner.Execute(new[]
25 {
26 "build",
27 Path.Combine(bundleSourceFolder, "BundleLatest.wxs"),
28 "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"),
29 "-ext", TestData.Get(@"WixToolset.Netfx.wixext.dll"),
30 "-intermediateFolder", intermediateFolder,
31 "-o", bundleFile,
32 });
33 compileResult.AssertSuccess();
34
35 Assert.True(File.Exists(bundleFile));
36 }
37 }
38
39 [Fact]
40 public void CanBuildUsingLatestDotNetCorePackages_X64()
41 {
42 using (var fs = new DisposableFileSystem())
43 {
44 var baseFolder = fs.GetFolder();
45 var bundleFile = Path.Combine(baseFolder, "bin", "test.exe");
46 var bundleSourceFolder = TestData.Get(@"TestData\UsingDotNetCorePackages");
47 var intermediateFolder = Path.Combine(baseFolder, "obj");
48
49 var compileResult = WixRunner.Execute(new[]
50 {
51 "build",
52 Path.Combine(bundleSourceFolder, "BundleLatest_x64.wxs"),
53 "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"),
54 "-ext", TestData.Get(@"WixToolset.Netfx.wixext.dll"),
55 "-intermediateFolder", intermediateFolder,
56 "-o", bundleFile,
57 });
58 compileResult.AssertSuccess();
59
60 Assert.True(File.Exists(bundleFile));
61 }
62 }
63
64 [Fact]
65 public void CanBuildUsingNativeImage()
66 {
67 var folder = TestData.Get(@"TestData\UsingNativeImage");
68 var build = new Builder(folder, typeof(NetfxExtensionFactory), new[] { folder });
69
70 var results = build.BuildAndQuery(Build, "Binary", "CustomAction", "Wix4NetFxNativeImage");
71 Assert.Equal(new[]
72 {
73 "Binary:Wix4NetFxCA_X86\t[Binary data]",
74 "CustomAction:Wix4NetFxExecuteNativeImageCommitInstall_X86\t3649\tWix4NetFxCA_X86\tExecNetFx\t",
75 "CustomAction:Wix4NetFxExecuteNativeImageCommitUninstall_X86\t3649\tWix4NetFxCA_X86\tExecNetFx\t",
76 "CustomAction:Wix4NetFxExecuteNativeImageInstall_X86\t3137\tWix4NetFxCA_X86\tExecNetFx\t",
77 "CustomAction:Wix4NetFxExecuteNativeImageUninstall_X86\t3137\tWix4NetFxCA_X86\tExecNetFx\t",
78 "CustomAction:Wix4NetFxScheduleNativeImage_X86\t1\tWix4NetFxCA_X86\tSchedNetFx\t",
79 "Wix4NetFxNativeImage:ExampleNgen\tfil6349_KNDJhqShNzVdHX3ihhvA6Y\t3\t8\t\t",
80 }, results.OrderBy(s => s).ToArray());
81 }
82
83 [Fact]
84 public void CanBuildUsingNativeImageX64()
85 {
86 var folder = TestData.Get(@"TestData\UsingNativeImage");
87 var build = new Builder(folder, typeof(NetfxExtensionFactory), new[] { folder });
88
89 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4NetFxNativeImage");
90 Assert.Equal(new[]
91 {
92 "Binary:Wix4NetFxCA_X64\t[Binary data]",
93 "CustomAction:Wix4NetFxExecuteNativeImageCommitInstall_X64\t3649\tWix4NetFxCA_X64\tExecNetFx\t",
94 "CustomAction:Wix4NetFxExecuteNativeImageCommitUninstall_X64\t3649\tWix4NetFxCA_X64\tExecNetFx\t",
95 "CustomAction:Wix4NetFxExecuteNativeImageInstall_X64\t3137\tWix4NetFxCA_X64\tExecNetFx\t",
96 "CustomAction:Wix4NetFxExecuteNativeImageUninstall_X64\t3137\tWix4NetFxCA_X64\tExecNetFx\t",
97 "CustomAction:Wix4NetFxScheduleNativeImage_X64\t1\tWix4NetFxCA_X64\tSchedNetFx\t",
98 "Wix4NetFxNativeImage:ExampleNgen\tfil6349_KNDJhqShNzVdHX3ihhvA6Y\t3\t8\t\t",
99 }, results.OrderBy(s => s).ToArray());
100 }
101
102 [Fact]
103 public void CanBuildUsingNativeImageARM64()
104 {
105 var folder = TestData.Get(@"TestData\UsingNativeImage");
106 var build = new Builder(folder, typeof(NetfxExtensionFactory), new[] { folder });
107
108 var results = build.BuildAndQuery(BuildARM64, "Binary", "CustomAction", "Wix4NetFxNativeImage");
109 Assert.Equal(new[]
110 {
111 "Binary:Wix4NetFxCA_A64\t[Binary data]",
112 "CustomAction:Wix4NetFxExecuteNativeImageCommitInstall_A64\t3649\tWix4NetFxCA_A64\tExecNetFx\t",
113 "CustomAction:Wix4NetFxExecuteNativeImageCommitUninstall_A64\t3649\tWix4NetFxCA_A64\tExecNetFx\t",
114 "CustomAction:Wix4NetFxExecuteNativeImageInstall_A64\t3137\tWix4NetFxCA_A64\tExecNetFx\t",
115 "CustomAction:Wix4NetFxExecuteNativeImageUninstall_A64\t3137\tWix4NetFxCA_A64\tExecNetFx\t",
116 "CustomAction:Wix4NetFxScheduleNativeImage_A64\t1\tWix4NetFxCA_A64\tSchedNetFx\t",
117 "Wix4NetFxNativeImage:ExampleNgen\tfil6349_KNDJhqShNzVdHX3ihhvA6Y\t3\t8\t\t",
118 }, results.OrderBy(s => s).ToArray());
119 }
120
121 private static void Build(string[] args)
122 {
123 var result = WixRunner.Execute(args);
124 result.AssertSuccess();
125 }
126
127 private static void BuildX64(string[] args)
128 {
129 var newArgs = args.ToList();
130 newArgs.Add("-platform");
131 newArgs.Add("x64");
132
133 var result = WixRunner.Execute(newArgs.ToArray());
134 result.AssertSuccess();
135 }
136
137 private static void BuildARM64(string[] args)
138 {
139 var newArgs = args.ToList();
140 newArgs.Add("-platform");
141 newArgs.Add("arm64");
142
143 var result = WixRunner.Execute(newArgs.ToArray());
144 result.AssertSuccess();
145 }
146 }
147}
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs
new file mode 100644
index 00000000..8e3d2c30
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest.wxs
@@ -0,0 +1,12 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
2 <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2">
3 <BootstrapperApplication>
4 <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" />
5 </BootstrapperApplication>
6 <Chain>
7 <PackageGroupRef Id="AspNetCoreRuntime31Redist_x86" />
8 <PackageGroupRef Id="DesktopNetCoreRuntime31Redist_x86" />
9 <PackageGroupRef Id="DotNetCoreRuntime31Redist_x86" />
10 </Chain>
11 </Bundle>
12</Wix>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs
new file mode 100644
index 00000000..fc42ac99
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingDotNetCorePackages/BundleLatest_x64.wxs
@@ -0,0 +1,12 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
2 <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2">
3 <BootstrapperApplication>
4 <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" />
5 </BootstrapperApplication>
6 <Chain>
7 <PackageGroupRef Id="AspNetCoreRuntime31Redist_x64" />
8 <PackageGroupRef Id="DesktopNetCoreRuntime31Redist_x64" />
9 <PackageGroupRef Id="DotNetCoreRuntime31Redist_x64" />
10 </Chain>
11 </Bundle>
12</Wix>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.en-us.wxl b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.en-us.wxl
new file mode 100644
index 00000000..5301bb1a
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.en-us.wxl
@@ -0,0 +1,9 @@
1<!--
2This file contains the declaration of all the localizable strings.
3-->
4<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
5
6 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
7 <String Id="FeatureTitle">MsiPackage</String>
8
9</WixLocalization>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.wxs b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.wxs
new file mode 100644
index 00000000..ace73680
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/Package.wxs
@@ -0,0 +1,15 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
3 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
4
5 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
6 <ComponentGroupRef Id="ProductComponents" />
7 </Feature>
8 </Package>
9
10 <Fragment>
11 <StandardDirectory Id="ProgramFilesFolder">
12 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
13 </StandardDirectory>
14 </Fragment>
15</Wix>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/PackageComponents.wxs b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/PackageComponents.wxs
new file mode 100644
index 00000000..a1c806d9
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/PackageComponents.wxs
@@ -0,0 +1,11 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
2 <Fragment>
3 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
4 <Component>
5 <File Name="fake.ddl" Source="example.txt">
6 <netfx:NativeImage Id="ExampleNgen" />
7 </File>
8 </Component>
9 </ComponentGroup>
10 </Fragment>
11</Wix>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/example.txt b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/TestData/UsingNativeImage/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.csproj b/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.csproj
new file mode 100644
index 00000000..1c41d176
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.csproj
@@ -0,0 +1,40 @@
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<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <DebugType>embedded</DebugType>
8 <IsPackable>false</IsPackable>
9 </PropertyGroup>
10
11 <ItemGroup>
12 <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
13 </ItemGroup>
14
15 <ItemGroup>
16 <ProjectReference Include="..\..\wixext\WixToolset.Netfx.wixext.csproj" />
17 </ItemGroup>
18
19 <ItemGroup>
20 <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.*" />
21 <PackageReference Include="WixToolset.Core" Version="4.0.*" />
22 <PackageReference Include="WixToolset.Core.Burn" Version="4.0.*" />
23 <PackageReference Include="WixToolset.Core.WindowsInstaller" Version="4.0.*" />
24 <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
29 </ItemGroup>
30
31 <ItemGroup>
32 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
33 <PackageReference Include="xunit" Version="2.4.1" />
34 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
35 </ItemGroup>
36
37 <Target Name="CopyExtensions" AfterTargets="Build">
38 <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(WixExtension)" />
39 </Target>
40</Project>
diff --git a/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.v3.ncrunchproject b/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.v3.ncrunchproject
new file mode 100644
index 00000000..7b5b2139
--- /dev/null
+++ b/src/ext/NetFx/test/WixToolsetTest.Netfx/WixToolsetTest.Netfx.v3.ncrunchproject
@@ -0,0 +1,5 @@
1<ProjectConfiguration>
2 <Settings>
3 <CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
4 </Settings>
5</ProjectConfiguration> \ No newline at end of file
diff --git a/src/ext/NetFx/wix.snk b/src/ext/NetFx/wix.snk
new file mode 100644
index 00000000..3908a66a
--- /dev/null
+++ b/src/ext/NetFx/wix.snk
Binary files differ
diff --git a/src/ext/NetFx/wixext/NetFxCompiler.cs b/src/ext/NetFx/wixext/NetFxCompiler.cs
new file mode 100644
index 00000000..90aa8bcb
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetFxCompiler.cs
@@ -0,0 +1,163 @@
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
3namespace WixToolset.Netfx
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Xml.Linq;
8 using WixToolset.Data;
9 using WixToolset.Extensibility;
10 using WixToolset.Extensibility.Data;
11 using WixToolset.Netfx.Symbols;
12
13 /// <summary>
14 /// The compiler for the WiX Toolset .NET Framework Extension.
15 /// </summary>
16 public sealed class NetfxCompiler : BaseCompilerExtension
17 {
18 public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/netfx";
19
20 /// <summary>
21 /// Processes an element for the Compiler.
22 /// </summary>
23 /// <param name="parentElement">Parent element of element to process.</param>
24 /// <param name="element">Element to process.</param>
25 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
26 public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
27 {
28 switch (parentElement.Name.LocalName)
29 {
30 case "File":
31 string fileId = context["FileId"];
32
33 switch (element.Name.LocalName)
34 {
35 case "NativeImage":
36 this.ParseNativeImageElement(intermediate, section, element, fileId);
37 break;
38 default:
39 this.ParseHelper.UnexpectedElement(parentElement, element);
40 break;
41 }
42 break;
43 default:
44 this.ParseHelper.UnexpectedElement(parentElement, element);
45 break;
46 }
47 }
48
49 /// <summary>
50 /// Parses a NativeImage element.
51 /// </summary>
52 /// <param name="element">The element to parse.</param>
53 /// <param name="fileId">The file identifier of the parent element.</param>
54 private void ParseNativeImageElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId)
55 {
56 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
57 Identifier id = null;
58 string appBaseDirectory = null;
59 string assemblyApplication = null;
60 int attributes = 0x8; // 32bit is on by default
61 int priority = 3;
62
63 foreach (var attrib in element.Attributes())
64 {
65 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
66 {
67 switch (attrib.Name.LocalName)
68 {
69 case "Id":
70 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
71 break;
72 case "AppBaseDirectory":
73 appBaseDirectory = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
74
75 // See if a formatted value is specified.
76 if (-1 == appBaseDirectory.IndexOf("[", StringComparison.Ordinal))
77 {
78 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.Directory, appBaseDirectory);
79 }
80 break;
81 case "AssemblyApplication":
82 assemblyApplication = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
83
84 // See if a formatted value is specified.
85 if (-1 == assemblyApplication.IndexOf("[", StringComparison.Ordinal))
86 {
87 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, assemblyApplication);
88 }
89 break;
90 case "Debug":
91 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
92 {
93 attributes |= 0x1;
94 }
95 break;
96 case "Dependencies":
97 if (YesNoType.No == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
98 {
99 attributes |= 0x2;
100 }
101 break;
102 case "Platform":
103 string platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
104 if (0 < platformValue.Length)
105 {
106 switch (platformValue)
107 {
108 case "32bit":
109 // 0x8 is already on by default
110 break;
111 case "64bit":
112 attributes &= ~0x8;
113 attributes |= 0x10;
114 break;
115 case "all":
116 attributes |= 0x10;
117 break;
118 }
119 }
120 break;
121 case "Priority":
122 priority = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3);
123 break;
124 case "Profile":
125 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
126 {
127 attributes |= 0x4;
128 }
129 break;
130 default:
131 this.ParseHelper.UnexpectedAttribute(element, attrib);
132 break;
133 }
134 }
135 else
136 {
137 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
138 }
139 }
140
141 if (null == id)
142 {
143 id = this.ParseHelper.CreateIdentifier("nni", fileId);
144 }
145
146 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
147
148 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4NetFxScheduleNativeImage", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86);
149
150 if (!this.Messaging.EncounteredError)
151 {
152 section.AddSymbol(new NetFxNativeImageSymbol(sourceLineNumbers, id)
153 {
154 FileRef = fileId,
155 Priority = priority,
156 Attributes = attributes,
157 ApplicationFileRef = assemblyApplication,
158 ApplicationBaseDirectoryRef = appBaseDirectory,
159 });
160 }
161 }
162 }
163}
diff --git a/src/ext/NetFx/wixext/NetFxDecompiler.cs b/src/ext/NetFx/wixext/NetFxDecompiler.cs
new file mode 100644
index 00000000..e30905d1
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetFxDecompiler.cs
@@ -0,0 +1,139 @@
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
3namespace WixToolset.Extensions
4{
5#if TODO_CONSIDER_DECOMPILER
6 using System;
7 using System.Collections;
8 using System.Diagnostics;
9 using System.Globalization;
10 using WixToolset.Data;
11 using WixToolset.Extensibility;
12 using NetFx = WixToolset.Extensions.Serialize.NetFx;
13 using Wix = WixToolset.Data.Serialize;
14
15 /// <summary>
16 /// The decompiler for the WiX Toolset .NET Framework Extension.
17 /// </summary>
18 public sealed class NetFxDecompiler : DecompilerExtension
19 {
20 /// <summary>
21 /// Creates a decompiler for NetFx Extension.
22 /// </summary>
23 public NetFxDecompiler()
24 {
25 this.TableDefinitions = NetFxExtensionData.GetExtensionTableDefinitions();
26 }
27
28 /// <summary>
29 /// Get the extensions library to be removed.
30 /// </summary>
31 /// <param name="tableDefinitions">Table definitions for library.</param>
32 /// <returns>Library to remove from decompiled output.</returns>
33 public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions)
34 {
35 return NetFxExtensionData.GetExtensionLibrary(tableDefinitions);
36 }
37
38 /// <summary>
39 /// Decompiles an extension table.
40 /// </summary>
41 /// <param name="table">The table to decompile.</param>
42 public override void DecompileTable(Table table)
43 {
44 switch (table.Name)
45 {
46 case "NetFxNativeImage":
47 this.DecompileNetFxNativeImageTable(table);
48 break;
49 default:
50 base.DecompileTable(table);
51 break;
52 }
53 }
54
55 /// <summary>
56 /// Decompile the NetFxNativeImage table.
57 /// </summary>
58 /// <param name="table">The table to decompile.</param>
59 private void DecompileNetFxNativeImageTable(Table table)
60 {
61 foreach (Row row in table.Rows)
62 {
63 NetFx.NativeImage nativeImage = new NetFx.NativeImage();
64
65 nativeImage.Id = (string)row[0];
66
67 switch ((int)row[2])
68 {
69 case 0:
70 nativeImage.Priority = NetFx.NativeImage.PriorityType.Item0;
71 break;
72 case 1:
73 nativeImage.Priority = NetFx.NativeImage.PriorityType.Item1;
74 break;
75 case 2:
76 nativeImage.Priority = NetFx.NativeImage.PriorityType.Item2;
77 break;
78 case 3:
79 nativeImage.Priority = NetFx.NativeImage.PriorityType.Item3;
80 break;
81 }
82
83 if (null != row[3])
84 {
85 int attributes = (int)row[3];
86
87 if (0x1 == (attributes & 0x1))
88 {
89 nativeImage.Debug = NetFx.YesNoType.yes;
90 }
91
92 if (0x2 == (attributes & 0x2))
93 {
94 nativeImage.Dependencies = NetFx.YesNoType.no;
95 }
96
97 if (0x4 == (attributes & 0x4))
98 {
99 nativeImage.Profile = NetFx.YesNoType.yes;
100 }
101
102 if (0x8 == (attributes & 0x8) && 0x10 == (attributes & 0x10))
103 {
104 nativeImage.Platform = NetFx.NativeImage.PlatformType.all;
105 }
106 else if (0x8 == (attributes & 0x8))
107 {
108 nativeImage.Platform = NetFx.NativeImage.PlatformType.Item32bit;
109 }
110 else if (0x10 == (attributes & 0x10))
111 {
112 nativeImage.Platform = NetFx.NativeImage.PlatformType.Item64bit;
113 }
114 }
115
116 if (null != row[4])
117 {
118 nativeImage.AssemblyApplication = (string)row[4];
119 }
120
121 if (null != row[5])
122 {
123 nativeImage.AppBaseDirectory = (string)row[5];
124 }
125
126 Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[1]);
127 if (null != file)
128 {
129 file.AddChild(nativeImage);
130 }
131 else
132 {
133 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_", (string)row[1], "File"));
134 }
135 }
136 }
137 }
138#endif
139}
diff --git a/src/ext/NetFx/wixext/NetFxExtensionData.cs b/src/ext/NetFx/wixext/NetFxExtensionData.cs
new file mode 100644
index 00000000..0a24ef1e
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetFxExtensionData.cs
@@ -0,0 +1,25 @@
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
3namespace WixToolset.Netfx
4{
5 using WixToolset.Data;
6 using WixToolset.Extensibility;
7 using WixToolset.Netfx.Symbols;
8
9 /// <summary>
10 /// The WiX Toolset .NET Framework Extension.
11 /// </summary>
12 public sealed class NetfxExtensionData : BaseExtensionData
13 {
14 public override bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
15 {
16 symbolDefinition = (name == NetfxSymbolDefinitionNames.NetFxNativeImage) ? NetfxSymbolDefinitions.NetFxNativeImage : null;
17 return symbolDefinition != null;
18 }
19
20 public override Intermediate GetLibrary(ISymbolDefinitionCreator symbolDefinitions)
21 {
22 return Intermediate.Load(typeof(NetfxExtensionData).Assembly, "WixToolset.Netfx.netfx.wixlib", symbolDefinitions);
23 }
24 }
25}
diff --git a/src/ext/NetFx/wixext/NetfxExtensionFactory.cs b/src/ext/NetFx/wixext/NetfxExtensionFactory.cs
new file mode 100644
index 00000000..fe618460
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetfxExtensionFactory.cs
@@ -0,0 +1,18 @@
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
3namespace WixToolset.Netfx
4{
5 using System;
6 using System.Collections.Generic;
7 using WixToolset.Extensibility;
8
9 public class NetfxExtensionFactory : BaseExtensionFactory
10 {
11 protected override IReadOnlyCollection<Type> ExtensionTypes => new[]
12 {
13 typeof(NetfxCompiler),
14 typeof(NetfxExtensionData),
15 typeof(NetfxWindowsInstallerBackendBinderExtension),
16 };
17 }
18}
diff --git a/src/ext/NetFx/wixext/NetfxTableDefinitions.cs b/src/ext/NetFx/wixext/NetfxTableDefinitions.cs
new file mode 100644
index 00000000..1b2a4d21
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetfxTableDefinitions.cs
@@ -0,0 +1,30 @@
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
3namespace WixToolset.Netfx
4{
5 using WixToolset.Data.WindowsInstaller;
6 using WixToolset.Netfx.Symbols;
7
8 public static class NetfxTableDefinitions
9 {
10 public static readonly TableDefinition NetFxNativeImage = new TableDefinition(
11 "Wix4NetFxNativeImage",
12 NetfxSymbolDefinitions.NetFxNativeImage,
13 new[]
14 {
15 new ColumnDefinition("Wix4NetFxNativeImage", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The primary key, a non-localized token.", modularizeType: ColumnModularizeType.Column),
16 new ColumnDefinition("File_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "The assembly for which a native image will be generated.", modularizeType: ColumnModularizeType.Column),
17 new ColumnDefinition("Priority", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Integer, minValue: 0, maxValue: 3, description: "The priority for generating this native image: 0 is syncronous, 1-3 represent various levels of queued generation."),
18 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Integer, minValue: 0, maxValue: 2147483647, description: "Integer containing bit flags representing native image attributes."),
19 new ColumnDefinition("File_Application", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The application which loads this assembly.", modularizeType: ColumnModularizeType.Column),
20 new ColumnDefinition("Directory_ApplicationBase", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The directory containing the application which loads this assembly.", modularizeType: ColumnModularizeType.Column),
21 },
22 symbolIdIsPrimaryKey: true
23 );
24
25 public static readonly TableDefinition[] All = new[]
26 {
27 NetFxNativeImage,
28 };
29 }
30}
diff --git a/src/ext/NetFx/wixext/NetfxWindowsInstallerBackendExtension.cs b/src/ext/NetFx/wixext/NetfxWindowsInstallerBackendExtension.cs
new file mode 100644
index 00000000..7d4fe475
--- /dev/null
+++ b/src/ext/NetFx/wixext/NetfxWindowsInstallerBackendExtension.cs
@@ -0,0 +1,13 @@
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
3namespace WixToolset.Netfx
4{
5 using System.Collections.Generic;
6 using WixToolset.Data.WindowsInstaller;
7 using WixToolset.Extensibility;
8
9 public class NetfxWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension
10 {
11 public override IReadOnlyCollection<TableDefinition> TableDefinitions => NetfxTableDefinitions.All;
12 }
13}
diff --git a/src/ext/NetFx/wixext/Symbols/NetFxNativeImageSymbol.cs b/src/ext/NetFx/wixext/Symbols/NetFxNativeImageSymbol.cs
new file mode 100644
index 00000000..3803abd6
--- /dev/null
+++ b/src/ext/NetFx/wixext/Symbols/NetFxNativeImageSymbol.cs
@@ -0,0 +1,58 @@
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
3namespace WixToolset.Netfx.Symbols
4{
5 using WixToolset.Data;
6
7 public enum NetFxNativeImageSymbolFields
8 {
9 FileRef,
10 Priority,
11 Attributes,
12 ApplicationFileRef,
13 ApplicationBaseDirectoryRef,
14 }
15
16 public class NetFxNativeImageSymbol : IntermediateSymbol
17 {
18 public NetFxNativeImageSymbol() : base(NetfxSymbolDefinitions.NetFxNativeImage, null, null)
19 {
20 }
21
22 public NetFxNativeImageSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(NetfxSymbolDefinitions.NetFxNativeImage, sourceLineNumber, id)
23 {
24 }
25
26 public IntermediateField this[NetFxNativeImageSymbolFields index] => this.Fields[(int)index];
27
28 public string FileRef
29 {
30 get => this.Fields[(int)NetFxNativeImageSymbolFields.FileRef].AsString();
31 set => this.Set((int)NetFxNativeImageSymbolFields.FileRef, value);
32 }
33
34 public int Priority
35 {
36 get => this.Fields[(int)NetFxNativeImageSymbolFields.Priority].AsNumber();
37 set => this.Set((int)NetFxNativeImageSymbolFields.Priority, value);
38 }
39
40 public int Attributes
41 {
42 get => this.Fields[(int)NetFxNativeImageSymbolFields.Attributes].AsNumber();
43 set => this.Set((int)NetFxNativeImageSymbolFields.Attributes, value);
44 }
45
46 public string ApplicationFileRef
47 {
48 get => this.Fields[(int)NetFxNativeImageSymbolFields.ApplicationFileRef].AsString();
49 set => this.Set((int)NetFxNativeImageSymbolFields.ApplicationFileRef, value);
50 }
51
52 public string ApplicationBaseDirectoryRef
53 {
54 get => this.Fields[(int)NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef].AsString();
55 set => this.Set((int)NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef, value);
56 }
57 }
58} \ No newline at end of file
diff --git a/src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs b/src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs
new file mode 100644
index 00000000..3c0f1176
--- /dev/null
+++ b/src/ext/NetFx/wixext/Symbols/NetfxSymbolDefinitions.cs
@@ -0,0 +1,26 @@
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
3namespace WixToolset.Netfx.Symbols
4{
5 using WixToolset.Data;
6
7 public static class NetfxSymbolDefinitionNames
8 {
9 public static string NetFxNativeImage { get; } = "NetFxNativeImage";
10 }
11
12 public static class NetfxSymbolDefinitions
13 {
14 public static readonly IntermediateSymbolDefinition NetFxNativeImage = new IntermediateSymbolDefinition(
15 NetfxSymbolDefinitionNames.NetFxNativeImage,
16 new[]
17 {
18 new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.FileRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Priority), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.Attributes), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationFileRef), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(NetFxNativeImageSymbolFields.ApplicationBaseDirectoryRef), IntermediateFieldType.String),
23 },
24 typeof(NetFxNativeImageSymbol));
25 }
26}
diff --git a/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.csproj b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.csproj
new file mode 100644
index 00000000..7c1d55c1
--- /dev/null
+++ b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.csproj
@@ -0,0 +1,31 @@
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<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netstandard2.0</TargetFramework>
7 <DebugType>embedded</DebugType>
8 <RootNamespace>WixToolset.Netfx</RootNamespace>
9 <Description>WiX Toolset .NET Framework Extension</Description>
10 <Title>WiX Toolset .NET Framework Extension</Title>
11 <IncludeSymbols>true</IncludeSymbols>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <EmbeddedResource Include="$(OutputPath)..\netfx.wixlib" />
16 </ItemGroup>
17
18 <ItemGroup>
19 <ProjectReference Include="..\wixlib\netfx.wixproj" ReferenceOutputAssembly="false" Condition=" '$(NCrunch)'=='' " />
20 </ItemGroup>
21
22 <ItemGroup>
23 <PackageReference Include="WixToolset.Data" Version="4.0.*" PrivateAssets="all" />
24 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="all" />
29 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="all" />
30 </ItemGroup>
31</Project>
diff --git a/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.nuspec b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.nuspec
new file mode 100644
index 00000000..ba3eaade
--- /dev/null
+++ b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.nuspec
@@ -0,0 +1,25 @@
1<?xml version="1.0"?>
2<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
3 <metadata minClientVersion="4.0">
4 <id>$id$</id>
5 <version>$version$</version>
6 <title>$title$</title>
7 <description>$description$</description>
8 <authors>$authors$</authors>
9 <license type="expression">MS-RL</license>
10 <requireLicenseAcceptance>false</requireLicenseAcceptance>
11 <copyright>$copyright$</copyright>
12 <projectUrl>$projectUrl$</projectUrl>
13 <repository type="$repositorytype$" url="$repositoryurl$" commit="$repositorycommit$" />
14 </metadata>
15
16 <files>
17 <file src="$projectFolder$$id$.targets" target="build" />
18
19 <file src="netstandard2.0\$id$.dll" target="tools" />
20
21 <file src="ARM64\*.pdb" target="pdbs\ARM64" />
22 <file src="x86\*.pdb" target="pdbs\x86" />
23 <file src="x64\*.pdb" target="pdbs\x64" />
24 </files>
25</package>
diff --git a/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.targets b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.targets
new file mode 100644
index 00000000..2ed9c488
--- /dev/null
+++ b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.targets
@@ -0,0 +1,11 @@
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<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
5 <PropertyGroup>
6 <WixToolsetNetfxWixextPath Condition=" '$(WixToolsetNetfxWixextPath)' == '' ">$(MSBuildThisFileDirectory)..\tools\WixToolset.Netfx.wixext.dll</WixToolsetNetfxWixextPath>
7 </PropertyGroup>
8 <ItemGroup>
9 <WixExtension Include="$(WixToolsetNetfxWixextPath)" />
10 </ItemGroup>
11</Project>
diff --git a/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.v3.ncrunchproject b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.v3.ncrunchproject
new file mode 100644
index 00000000..93e4df3d
--- /dev/null
+++ b/src/ext/NetFx/wixext/WixToolset.Netfx.wixext.v3.ncrunchproject
@@ -0,0 +1,7 @@
1<ProjectConfiguration>
2 <Settings>
3 <AdditionalFilesToIncludeForProject>
4 <Value>..\..\build\Debug\netfx.wixlib</Value>
5 </AdditionalFilesToIncludeForProject>
6 </Settings>
7</ProjectConfiguration> \ No newline at end of file
diff --git a/src/ext/NetFx/wixlib/NetCore3.1.12_x64.wxs b/src/ext/NetFx/wixlib/NetCore3.1.12_x64.wxs
new file mode 100644
index 00000000..990dc0bf
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCore3.1.12_x64.wxs
@@ -0,0 +1,58 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <?define NetCorePlatform = x64?>
6 <?define NetCoreIdVersion = 3112?>
7 <?define NetCoreVersion = 3.1.12?>
8 <?include NetCore3_Platform.wxi?>
9
10 <?define AspNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/20cf277c-2ccf-449f-a0b8-925ba0c175e7/aa50b052ceb8a8d36a5b4f9b8d0bd91c/aspnetcore-runtime-3.1.12-win-x64.exe?>
11 <?define DesktopNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/076a47e9-c65b-4b78-95a7-93eb988891a4/3574764590cfa650e0aa87c44d3fe384/windowsdesktop-runtime-3.1.12-win-x64.exe?>
12 <?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/2fdc3009-cf5c-4cf6-8f3b-a61e83200cbb/2c71ee04b48103a7464f4e28a8bf339b/dotnet-runtime-3.1.12-win-x64.exe?>
13
14 <Fragment>
15 <util:DirectorySearchRef Id="$(var.AspNetCoreId)" />
16
17 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
18 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
22 <PackageGroup Id="$(var.AspNetCoreRedistId)">
23 <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" RepairArguments="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.AspNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)">
24 <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Hash="5CE9839CAE90FB2936033431F2905E97C7DC080DC50108D58714939CCCC6A265694B8259A3BF742A68BF04D9CFFB0602B0306DD401C4CE644BDB96C7D1168E59" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Size="7841808" Version="3.1.12.21070" />
25 </ExePackage>
26 </PackageGroup>
27 </Fragment>
28
29 <Fragment>
30 <util:DirectorySearchRef Id="$(var.DesktopNetCoreId)" />
31
32 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
33 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
37 <PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38 <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" RepairArguments="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.DesktopNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)">
39 <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" Hash="CD69B8722B2FF175FADD6774AB6A97F89292FC57A15CEC95218E79FFF1E26F46A7EFFFB15CE0F6D22B83B991F7083BB5C04F5158F87D298EA0F204933F8ECD27" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" Size="54284816" Version="3.1.12.29719" />
40 </ExePackage>
41 </PackageGroup>
42 </Fragment>
43
44 <Fragment>
45 <util:DirectorySearchRef Id="$(var.DotNetCoreId)" />
46
47 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
48 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
52 <PackageGroup Id="$(var.DotNetCoreRedistId)">
53 <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" RepairArguments="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.DotNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)">
54 <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" Description="Microsoft .NET Core Runtime - 3.1.12 (x64)" Hash="9B3F882AE5DFDC8B50D3CEC4F3292292D658B2FECB84B3F73426FB3C16E6FC6B8E7118EF559CFAE25ED7A2C175FA4D89E18986CA3C05D15F706524FBB667F702" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x64)" Size="26090616" Version="3.1.12.29719" />
55 </ExePackage>
56 </PackageGroup>
57 </Fragment>
58</Wix>
diff --git a/src/ext/NetFx/wixlib/NetCore3.1.12_x86.wxs b/src/ext/NetFx/wixlib/NetCore3.1.12_x86.wxs
new file mode 100644
index 00000000..b6d5d371
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCore3.1.12_x86.wxs
@@ -0,0 +1,58 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <?define NetCorePlatform = x86?>
6 <?define NetCoreIdVersion = 3112?>
7 <?define NetCoreVersion = 3.1.12?>
8 <?include NetCore3_Platform.wxi?>
9
10 <?define AspNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/55d6ff56-2725-4657-bffd-fdf35d6816fd/7431d1d3533f0b1ac97df734c45c33f2/aspnetcore-runtime-3.1.12-win-x86.exe?>
11 <?define DesktopNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/5d89a010-88bf-4e4e-ac12-a07258ddbf5f/1ff5dfe312c5bd9760f3b500b1b37597/windowsdesktop-runtime-3.1.12-win-x86.exe?>
12 <?define DotNetCoreRedistLink = https://download.visualstudio.microsoft.com/download/pr/cbdd1603-7fa9-4957-8869-94e24963ba6c/ca0b7d1be494882d5a7433accfa3c94c/dotnet-runtime-3.1.12-win-x86.exe?>
13
14 <Fragment>
15 <util:DirectorySearchRef Id="$(var.AspNetCoreId)" />
16
17 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.AspNetCoreId)" Overridable="yes" />
18 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
19 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
20 <WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
22 <PackageGroup Id="$(var.AspNetCoreRedistId)">
23 <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" RepairArguments="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.AspNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)">
24 <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Hash="03EE5F6D3B2AF8FFE2A5154BB05E50938E2D36E98D996D9E67A3C349DD0C8B3051D5A9628F48C51E006CEA0B1F4484B4BE51920FE5CA841060B0D2C6A12FD5D2" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Size="7841808" Version="3.1.12.21070" />
25 </ExePackage>
26 </PackageGroup>
27 </Fragment>
28
29 <Fragment>
30 <util:DirectorySearchRef Id="$(var.DesktopNetCoreId)" />
31
32 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DesktopNetCoreId)" Overridable="yes" />
33 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
34 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
35 <WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
37 <PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38 <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" RepairArguments="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.DesktopNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)">
39 <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" Hash="C211A7F29D9B6FEEFCF0379B153FFBFB815157D3D494CFD7D0D84D619701EEA284BF12502094BCFF2BB2968213190454E7CE0E865FD623E78C2FCDAEBEF963DA" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" Size="48590696" Version="3.1.12.29719" />
40 </ExePackage>
41 </PackageGroup>
42 </Fragment>
43
44 <Fragment>
45 <util:DirectorySearchRef Id="$(var.DotNetCoreId)" />
46
47 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition" Value="$(var.DotNetCoreId)" Overridable="yes" />
48 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition" Value="" Overridable="yes" />
49 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory" Value="redist\" Overridable="yes" />
50 <WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
52 <PackageGroup Id="$(var.DotNetCoreRedistId)">
53 <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" RepairArguments="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments)" UninstallArguments="$(var.DotNetCoreRedistUninstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)">
54 <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" Description="Microsoft .NET Core Runtime - 3.1.12 (x86)" Hash="BA18F9028B19630D91017BEACCD8D79388125C228A83B5A62306108F3BB283617A7ED9B98785BC73192EC00E5D186DA767E940DCAB388699FAF274E437D0C16F" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x86)" Size="23392184" Version="3.1.12.29719" />
55 </ExePackage>
56 </PackageGroup>
57 </Fragment>
58</Wix>
diff --git a/src/ext/NetFx/wixlib/NetCore3.1_x64.wxs b/src/ext/NetFx/wixlib/NetCore3.1_x64.wxs
new file mode 100644
index 00000000..60d7c27f
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCore3.1_x64.wxs
@@ -0,0 +1,22 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
5 <Fragment>
6 <PackageGroup Id="AspNetCoreRuntime31Redist_x64">
7 <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x64" />
8 </PackageGroup>
9 </Fragment>
10
11 <Fragment>
12 <PackageGroup Id="DesktopNetCoreRuntime31Redist_x64">
13 <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x64" />
14 </PackageGroup>
15 </Fragment>
16
17 <Fragment>
18 <PackageGroup Id="DotNetCoreRuntime31Redist_x64">
19 <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x64" />
20 </PackageGroup>
21 </Fragment>
22</Wix>
diff --git a/src/ext/NetFx/wixlib/NetCore3.1_x86.wxs b/src/ext/NetFx/wixlib/NetCore3.1_x86.wxs
new file mode 100644
index 00000000..cfff07b3
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCore3.1_x86.wxs
@@ -0,0 +1,22 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
5 <Fragment>
6 <PackageGroup Id="AspNetCoreRuntime31Redist_x86">
7 <PackageGroupRef Id="AspNetCoreRuntime3112Redist_x86" />
8 </PackageGroup>
9 </Fragment>
10
11 <Fragment>
12 <PackageGroup Id="DesktopNetCoreRuntime31Redist_x86">
13 <PackageGroupRef Id="DesktopNetCoreRuntime3112Redist_x86" />
14 </PackageGroup>
15 </Fragment>
16
17 <Fragment>
18 <PackageGroup Id="DotNetCoreRuntime31Redist_x86">
19 <PackageGroupRef Id="DotNetCoreRuntime3112Redist_x86" />
20 </PackageGroup>
21 </Fragment>
22</Wix>
diff --git a/src/ext/NetFx/wixlib/NetCore3_Platform.wxi b/src/ext/NetFx/wixlib/NetCore3_Platform.wxi
new file mode 100644
index 00000000..c7aaca50
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCore3_Platform.wxi
@@ -0,0 +1,65 @@
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
4<Include xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <?define AspNetCoreId = ASPNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
7 <?define AspNetCoreRedistId = AspNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
8 <?define AspNetCoreRedistLog = AspNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
9 <?define AspNetCoreRedistInstallArguments = /install /quiet /norestart /log &quot;[$(var.AspNetCoreRedistLog)]&quot;?>
10 <?define AspNetCoreRedistUninstallArguments = /uninstall /quiet /norestart /log &quot;[$(var.AspNetCoreRedistLog)]&quot;?>
11
12 <?define DesktopNetCoreId = DESKTOPNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
13 <?define DesktopNetCoreRedistId = DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
14 <?define DesktopNetCoreRedistLog = DesktopNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
15 <?define DesktopNetCoreRedistInstallArguments = /install /quiet /norestart /log &quot;[$(var.DesktopNetCoreRedistLog)]&quot;?>
16 <?define DesktopNetCoreRedistUninstallArguments = /uninstall /quiet /norestart /log &quot;[$(var.DesktopNetCoreRedistLog)]&quot;?>
17
18 <?define DotNetCoreId = DOTNETCORERUNTIME$(var.NetCoreIdVersion)_$(var.NetCorePlatform)?>
19 <?define DotNetCoreRedistId = DotNetCoreRuntime$(var.NetCoreIdVersion)Redist_$(var.NetCorePlatform)?>
20 <?define DotNetCoreRedistLog = DotNetCoreRuntime$(var.NetCoreIdVersion)RedistLog?>
21 <?define DotNetCoreRedistInstallArguments = /install /quiet /norestart /log &quot;[$(var.DotNetCoreRedistLog)]&quot;?>
22 <?define DotNetCoreRedistUninstallArguments = /uninstall /quiet /norestart /log &quot;[$(var.DotNetCoreRedistLog)]&quot;?>
23
24 <?define DotNetHomeId = DOTNETHOME_$(var.NetCorePlatform)?>
25 <?define NetCoreEulaLink = https://go.microsoft.com/fwlink/?LinkId=329770?>
26
27 <Fragment>
28 <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
29 <util:DirectorySearch Id="$(var.AspNetCoreId)" Variable="$(var.AspNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.AspNetCore.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
30 </Fragment>
31
32 <Fragment>
33 <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
34 <util:DirectorySearch Id="$(var.DesktopNetCoreId)" Variable="$(var.DesktopNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.WindowsDesktop.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
35 </Fragment>
36
37 <Fragment>
38 <util:RegistrySearchRef Id="$(var.DotNetHomeId)" />
39 <util:DirectorySearch Id="$(var.DotNetCoreId)" Variable="$(var.DotNetCoreId)" Path="[$(var.DotNetHomeId)]\shared\Microsoft.NETCore.App\$(var.NetCoreVersion)" Result="exists" After="$(var.DotNetHomeId)" />
40 </Fragment>
41
42 <Fragment>
43 <PackageGroup Id="$(var.AspNetCoreRedistId)AsPrereq">
44 <PackageGroupRef Id="$(var.AspNetCoreRedistId)" />
45 </PackageGroup>
46
47 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.AspNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
48 </Fragment>
49
50 <Fragment>
51 <PackageGroup Id="$(var.DesktopNetCoreRedistId)AsPrereq">
52 <PackageGroupRef Id="$(var.DesktopNetCoreRedistId)" />
53 </PackageGroup>
54
55 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.DesktopNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
56 </Fragment>
57
58 <Fragment>
59 <PackageGroup Id="$(var.DotNetCoreRedistId)AsPrereq">
60 <PackageGroupRef Id="$(var.DotNetCoreRedistId)" />
61 </PackageGroup>
62
63 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.DotNetCoreRedistId)" LicenseUrl="$(var.NetCoreEulaLink)" />
64 </Fragment>
65</Include>
diff --git a/src/ext/NetFx/wixlib/NetCoreShared.wxs b/src/ext/NetFx/wixlib/NetCoreShared.wxs
new file mode 100644
index 00000000..0332041a
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetCoreShared.wxs
@@ -0,0 +1,11 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <?foreach PLATFORM in x86;x64?>
7 <Fragment>
8 <util:RegistrySearch Id="DOTNETHOME_$(var.PLATFORM)" Variable="DOTNETHOME_$(var.PLATFORM)" Root="HKLM" Key="SOFTWARE\dotnet\Setup\InstalledVersions\$(var.PLATFORM)" Value="InstallLocation" Result="value" Bitness="always32" />
9 </Fragment>
10 <?endforeach?>
11</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx1.1.wxs b/src/ext/NetFx/wixlib/NetFx1.1.wxs
new file mode 100644
index 00000000..12f0a4e3
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx1.1.wxs
@@ -0,0 +1,191 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 1.1 - http://msdn.microsoft.com/library/ms994339.aspx
12 -->
13
14 <!-- set to #1 if the .NET Framework 1.1 is installed (not set otherwise) -->
15 <Fragment>
16 <Property Id="NETFRAMEWORK11" Secure="yes">
17 <RegistrySearch Id="NetFramework11" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322" Name="Install" Type="raw" />
18 </Property>
19 </Fragment>
20
21 <!-- Indicates the service pack level for the .NET Framework 1.1. -->
22 <Fragment>
23 <Property Id="NETFRAMEWORK11_SP_LEVEL" Secure="yes">
24 <RegistrySearch Id="NetFramework11SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322" Name="SP" Type="raw" />
25 </Property>
26 </Fragment>
27
28 <!-- Location of .NET Framework 1.1 redistributable install root directory -->
29 <Fragment>
30 <Property Id="NETFRAMEWORK11INSTALLROOTDIR" Secure="yes">
31 <RegistrySearch Id="NetFxInstallRootForNetfx11Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
32 <DirectorySearch Id="NetFx11InstallRootSearch" Path="v1.1.4322" Depth="0" />
33 </RegistrySearch>
34 </Property>
35 </Fragment>
36
37 <!-- set to #1 if the .NET Framework 1.1 Chinese (Simplified) language pack is installed (not set otherwise) -->
38 <Fragment>
39 <Property Id="NETFRAMEWORK11_ZH_CN_LANGPACK" Secure="yes">
40 <RegistrySearch Id="NetFramework11ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\2052" Name="Install" Type="raw" />
41 </Property>
42 </Fragment>
43
44 <!-- set to #1 if the .NET Framework 1.1 Chinese (Traditional) language pack is installed (not set otherwise) -->
45 <Fragment>
46 <Property Id="NETFRAMEWORK11_ZH_TW_LANGPACK" Secure="yes">
47 <RegistrySearch Id="NetFramework11ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1028" Name="Install" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <!-- set to #1 if the .NET Framework 1.1 Czech language pack is installed (not set otherwise) -->
52 <Fragment>
53 <Property Id="NETFRAMEWORK11_CS_CZ_LANGPACK" Secure="yes">
54 <RegistrySearch Id="NetFramework11CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1029" Name="Install" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <!-- set to #1 if the .NET Framework 1.1 Danish language pack is installed (not set otherwise) -->
59 <Fragment>
60 <Property Id="NETFRAMEWORK11_DA_DK_LANGPACK" Secure="yes">
61 <RegistrySearch Id="NetFramework11DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1030" Name="Install" Type="raw" />
62 </Property>
63 </Fragment>
64
65 <!-- set to #1 if the .NET Framework 1.1 Dutch language pack is installed (not set otherwise) -->
66 <Fragment>
67 <Property Id="NETFRAMEWORK11_NL_NL_LANGPACK" Secure="yes">
68 <RegistrySearch Id="NetFramework11NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1043" Name="Install" Type="raw" />
69 </Property>
70 </Fragment>
71
72 <!-- set to #1 if the .NET Framework 1.1 Finnish language pack is installed (not set otherwise) -->
73 <Fragment>
74 <Property Id="NETFRAMEWORK11_FI_FI_LANGPACK" Secure="yes">
75 <RegistrySearch Id="NetFramework11FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1035" Name="Install" Type="raw" />
76 </Property>
77 </Fragment>
78
79 <!-- set to #1 if the .NET Framework 1.1 French language pack is installed (not set otherwise) -->
80 <Fragment>
81 <Property Id="NETFRAMEWORK11_FR_FR_LANGPACK" Secure="yes">
82 <RegistrySearch Id="NetFramework11FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1036" Name="Install" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- set to #1 if the .NET Framework 1.1 German language pack is installed (not set otherwise) -->
87 <Fragment>
88 <Property Id="NETFRAMEWORK11_DE_DE_LANGPACK" Secure="yes">
89 <RegistrySearch Id="NetFramework11DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1031" Name="Install" Type="raw" />
90 </Property>
91 </Fragment>
92
93 <!-- set to #1 if the .NET Framework 1.1 Greek language pack is installed (not set otherwise) -->
94 <Fragment>
95 <Property Id="NETFRAMEWORK11_EL_GR_LANGPACK" Secure="yes">
96 <RegistrySearch Id="NetFramework11ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1032" Name="Install" Type="raw" />
97 </Property>
98 </Fragment>
99
100 <!-- set to #1 if the .NET Framework 1.1 Hungarian language pack is installed (not set otherwise) -->
101 <Fragment>
102 <Property Id="NETFRAMEWORK11_HU_HU_LANGPACK" Secure="yes">
103 <RegistrySearch Id="NetFramework11HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1038" Name="Install" Type="raw" />
104 </Property>
105 </Fragment>
106
107 <!-- set to #1 if the .NET Framework 1.1 Italian language pack is installed (not set otherwise) -->
108 <Fragment>
109 <Property Id="NETFRAMEWORK11_IT_IT_LANGPACK" Secure="yes">
110 <RegistrySearch Id="NetFramework11ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1040" Name="Install" Type="raw" />
111 </Property>
112 </Fragment>
113
114 <!-- set to #1 if the .NET Framework 1.1 Japanese language pack is installed (not set otherwise) -->
115 <Fragment>
116 <Property Id="NETFRAMEWORK11_JA_JP_LANGPACK" Secure="yes">
117 <RegistrySearch Id="NetFramework11JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1041" Name="Install" Type="raw" />
118 </Property>
119 </Fragment>
120
121 <!-- set to #1 if the .NET Framework 1.1 Korean language pack is installed (not set otherwise) -->
122 <Fragment>
123 <Property Id="NETFRAMEWORK11_KO_KR_LANGPACK" Secure="yes">
124 <RegistrySearch Id="NetFramework11KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1042" Name="Install" Type="raw" />
125 </Property>
126 </Fragment>
127
128 <!-- set to #1 if the .NET Framework 1.1 Norwegian language pack is installed (not set otherwise) -->
129 <Fragment>
130 <Property Id="NETFRAMEWORK11_NB_NO_LANGPACK" Secure="yes">
131 <RegistrySearch Id="NetFramework11NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1044" Name="Install" Type="raw" />
132 </Property>
133 </Fragment>
134
135 <!-- set to #1 if the .NET Framework 1.1 Polish language pack is installed (not set otherwise) -->
136 <Fragment>
137 <Property Id="NETFRAMEWORK11_PL_PL_LANGPACK" Secure="yes">
138 <RegistrySearch Id="NetFramework11PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1045" Name="Install" Type="raw" />
139 </Property>
140 </Fragment>
141
142 <!-- set to #1 if the .NET Framework 1.1 Portuguese (Brazil) language pack is installed (not set otherwise) -->
143 <Fragment>
144 <Property Id="NETFRAMEWORK11_PT_BR_LANGPACK" Secure="yes">
145 <RegistrySearch Id="NetFramework11PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1046" Name="Install" Type="raw" />
146 </Property>
147 </Fragment>
148
149 <!-- set to #1 if the .NET Framework 1.1 Portuguese (Portugal) language pack is installed (not set otherwise) -->
150 <Fragment>
151 <Property Id="NETFRAMEWORK11_PT_PT_LANGPACK" Secure="yes">
152 <RegistrySearch Id="NetFramework11PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\2070" Name="Install" Type="raw" />
153 </Property>
154 </Fragment>
155
156 <!-- set to #1 if the .NET Framework 1.1 Russian language pack is installed (not set otherwise) -->
157 <Fragment>
158 <Property Id="NETFRAMEWORK11_RU_RU_LANGPACK" Secure="yes">
159 <RegistrySearch Id="NetFramework11RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1049" Name="Install" Type="raw" />
160 </Property>
161 </Fragment>
162
163 <!-- set to #1 if the .NET Framework 1.1 Spanish language pack is installed (not set otherwise) -->
164 <Fragment>
165 <Property Id="NETFRAMEWORK11_ES_ES_LANGPACK" Secure="yes">
166 <RegistrySearch Id="NetFramework11EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\3082" Name="Install" Type="raw" />
167 </Property>
168 </Fragment>
169
170 <!-- set to #1 if the .NET Framework 1.1 Swedish language pack is installed (not set otherwise) -->
171 <Fragment>
172 <Property Id="NETFRAMEWORK11_SV_SE_LANGPACK" Secure="yes">
173 <RegistrySearch Id="NetFramework11SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1053" Name="Install" Type="raw" />
174 </Property>
175 </Fragment>
176
177 <!-- set to #1 if the .NET Framework 1.1 Turkish language pack is installed (not set otherwise) -->
178 <Fragment>
179 <Property Id="NETFRAMEWORK11_TR_TR_LANGPACK" Secure="yes">
180 <RegistrySearch Id="NetFramework11TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\1055" Name="Install" Type="raw" />
181 </Property>
182 </Fragment>
183
184 <!-- location of the .NET Framework 1.1 SDK installation root -->
185 <Fragment>
186 <Property Id="NETFRAMEWORK11SDKDIR" Secure="yes">
187 <RegistrySearch Id="NetFramework11SDKDir" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="sdkInstallRootv1.1" Type="raw" />
188 </Property>
189 </Fragment>
190
191</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx1.wxs b/src/ext/NetFx/wixlib/NetFx1.wxs
new file mode 100644
index 00000000..68d6f13d
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx1.wxs
@@ -0,0 +1,30 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 1.0 - http://msdn.microsoft.com/library/ms994349.aspx
12 -->
13
14 <!-- set to 3321-3705 if the .NET Framework 1.0 is installed (not set otherwise) -->
15 <Fragment>
16 <Property Id="NETFRAMEWORK10" Secure="yes">
17 <RegistrySearch Id="NetFramework10" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework\policy\v1.0" Name="3705" Type="raw" />
18 </Property>
19 </Fragment>
20
21 <!-- Location of .NET Framework 1.0 redistributable install root directory -->
22 <Fragment>
23 <Property Id="NETFRAMEWORK10INSTALLROOTDIR" Secure="yes">
24 <RegistrySearch Id="NetFxInstallRootForNetfx10Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
25 <DirectorySearch Id="NetFx10InstallRootSearch" Path="v1.0.3705" Depth="0" />
26 </RegistrySearch>
27 </Property>
28 </Fragment>
29
30</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx2.wxs b/src/ext/NetFx/wixlib/NetFx2.wxs
new file mode 100644
index 00000000..e5eef54b
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx2.wxs
@@ -0,0 +1,200 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 2.0 - http://msdn.microsoft.com/library/aa480243.aspx
12 -->
13
14 <!-- set to #1 if the .NET Framework 2.0 is installed (not set otherwise) -->
15 <Fragment>
16 <Property Id="NETFRAMEWORK20" Secure="yes">
17 <RegistrySearch Id="NetFramework20" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="Install" Type="raw" />
18 </Property>
19 </Fragment>
20
21 <!-- Indicates the service pack level for the .NET Framework 2.0. -->
22 <Fragment>
23 <Property Id="NETFRAMEWORK20_SP_LEVEL" Secure="yes">
24 <RegistrySearch Id="NetFramework20SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="SP" Type="raw" />
25 </Property>
26 </Fragment>
27
28 <!-- Location of .NET Framework 2.0 redistributable install root directory -->
29 <Fragment>
30 <Property Id="NETFRAMEWORK20INSTALLROOTDIR" Secure="yes">
31 <RegistrySearch Id="NetFxInstallRootForNetfx20Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
32 <DirectorySearch Id="NetFx20InstallRootSearch" Path="v2.0.50727" Depth="0" />
33 </RegistrySearch>
34 </Property>
35 </Fragment>
36
37 <!-- Location of .NET Framework 2.0 (64-bit) redistributable install root directory -->
38 <Fragment>
39 <Property Id="NETFRAMEWORK20INSTALLROOTDIR64" Secure="yes">
40 <RegistrySearch Id="NetFxInstallRootForNetfx20Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Bitness="always64">
41 <DirectorySearch Id="NetFx20InstallRootSearch64" Path="v2.0.50727" Depth="0" />
42 </RegistrySearch>
43 </Property>
44 </Fragment>
45
46 <!-- set to #1 if the .NET Framework 2.0 Chinese (Simplified) language pack is installed (not set otherwise) -->
47 <Fragment>
48 <Property Id="NETFRAMEWORK20_ZH_CN_LANGPACK" Secure="yes">
49 <RegistrySearch Id="NETFRAMEWORK20ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\2052" Name="Install" Type="raw" />
50 </Property>
51 </Fragment>
52
53 <!-- set to #1 if the .NET Framework 2.0 Chinese (Traditional) language pack is installed (not set otherwise) -->
54 <Fragment>
55 <Property Id="NETFRAMEWORK20_ZH_TW_LANGPACK" Secure="yes">
56 <RegistrySearch Id="NETFRAMEWORK20ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1028" Name="Install" Type="raw" />
57 </Property>
58 </Fragment>
59
60 <!-- set to #1 if the .NET Framework 2.0 Czech language pack is installed (not set otherwise) -->
61 <Fragment>
62 <Property Id="NETFRAMEWORK20_CS_CZ_LANGPACK" Secure="yes">
63 <RegistrySearch Id="NETFRAMEWORK20CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1029" Name="Install" Type="raw" />
64 </Property>
65 </Fragment>
66
67 <!-- set to #1 if the .NET Framework 2.0 Danish language pack is installed (not set otherwise) -->
68 <Fragment>
69 <Property Id="NETFRAMEWORK20_DA_DK_LANGPACK" Secure="yes">
70 <RegistrySearch Id="NETFRAMEWORK20DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1030" Name="Install" Type="raw" />
71 </Property>
72 </Fragment>
73
74 <!-- set to #1 if the .NET Framework 2.0 Dutch language pack is installed (not set otherwise) -->
75 <Fragment>
76 <Property Id="NETFRAMEWORK20_NL_NL_LANGPACK" Secure="yes">
77 <RegistrySearch Id="NETFRAMEWORK20NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1043" Name="Install" Type="raw" />
78 </Property>
79 </Fragment>
80
81 <!-- set to #1 if the .NET Framework 2.0 Finnish language pack is installed (not set otherwise) -->
82 <Fragment>
83 <Property Id="NETFRAMEWORK20_FI_FI_LANGPACK" Secure="yes">
84 <RegistrySearch Id="NETFRAMEWORK20FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1035" Name="Install" Type="raw" />
85 </Property>
86 </Fragment>
87
88 <!-- set to #1 if the .NET Framework 2.0 French language pack is installed (not set otherwise) -->
89 <Fragment>
90 <Property Id="NETFRAMEWORK20_FR_FR_LANGPACK" Secure="yes">
91 <RegistrySearch Id="NETFRAMEWORK20FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1036" Name="Install" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- set to #1 if the .NET Framework 2.0 German language pack is installed (not set otherwise) -->
96 <Fragment>
97 <Property Id="NETFRAMEWORK20_DE_DE_LANGPACK" Secure="yes">
98 <RegistrySearch Id="NETFRAMEWORK20DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1031" Name="Install" Type="raw" />
99 </Property>
100 </Fragment>
101
102 <!-- set to #1 if the .NET Framework 2.0 Greek language pack is installed (not set otherwise) -->
103 <Fragment>
104 <Property Id="NETFRAMEWORK20_EL_GR_LANGPACK" Secure="yes">
105 <RegistrySearch Id="NETFRAMEWORK20ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1032" Name="Install" Type="raw" />
106 </Property>
107 </Fragment>
108
109 <!-- set to #1 if the .NET Framework 2.0 Hungarian language pack is installed (not set otherwise) -->
110 <Fragment>
111 <Property Id="NETFRAMEWORK20_HU_HU_LANGPACK" Secure="yes">
112 <RegistrySearch Id="NETFRAMEWORK20HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1038" Name="Install" Type="raw" />
113 </Property>
114 </Fragment>
115
116 <!-- set to #1 if the .NET Framework 2.0 Italian language pack is installed (not set otherwise) -->
117 <Fragment>
118 <Property Id="NETFRAMEWORK20_IT_IT_LANGPACK" Secure="yes">
119 <RegistrySearch Id="NETFRAMEWORK20ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1040" Name="Install" Type="raw" />
120 </Property>
121 </Fragment>
122
123 <!-- set to #1 if the .NET Framework 2.0 Japanese language pack is installed (not set otherwise) -->
124 <Fragment>
125 <Property Id="NETFRAMEWORK20_JA_JP_LANGPACK" Secure="yes">
126 <RegistrySearch Id="NETFRAMEWORK20JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1041" Name="Install" Type="raw" />
127 </Property>
128 </Fragment>
129
130 <!-- set to #1 if the .NET Framework 2.0 Korean language pack is installed (not set otherwise) -->
131 <Fragment>
132 <Property Id="NETFRAMEWORK20_KO_KR_LANGPACK" Secure="yes">
133 <RegistrySearch Id="NETFRAMEWORK20KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1042" Name="Install" Type="raw" />
134 </Property>
135 </Fragment>
136
137 <!-- set to #1 if the .NET Framework 2.0 Norwegian language pack is installed (not set otherwise) -->
138 <Fragment>
139 <Property Id="NETFRAMEWORK20_NB_NO_LANGPACK" Secure="yes">
140 <RegistrySearch Id="NETFRAMEWORK20NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1044" Name="Install" Type="raw" />
141 </Property>
142 </Fragment>
143
144 <!-- set to #1 if the .NET Framework 2.0 Polish language pack is installed (not set otherwise) -->
145 <Fragment>
146 <Property Id="NETFRAMEWORK20_PL_PL_LANGPACK" Secure="yes">
147 <RegistrySearch Id="NETFRAMEWORK20PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1045" Name="Install" Type="raw" />
148 </Property>
149 </Fragment>
150
151 <!-- set to #1 if the .NET Framework 2.0 Portuguese (Brazil) language pack is installed (not set otherwise) -->
152 <Fragment>
153 <Property Id="NETFRAMEWORK20_PT_BR_LANGPACK" Secure="yes">
154 <RegistrySearch Id="NETFRAMEWORK20PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1046" Name="Install" Type="raw" />
155 </Property>
156 </Fragment>
157
158 <!-- set to #1 if the .NET Framework 2.0 Portuguese (Portugal) language pack is installed (not set otherwise) -->
159 <Fragment>
160 <Property Id="NETFRAMEWORK20_PT_PT_LANGPACK" Secure="yes">
161 <RegistrySearch Id="NETFRAMEWORK20PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\2070" Name="Install" Type="raw" />
162 </Property>
163 </Fragment>
164
165 <!-- set to #1 if the .NET Framework 2.0 Russian language pack is installed (not set otherwise) -->
166 <Fragment>
167 <Property Id="NETFRAMEWORK20_RU_RU_LANGPACK" Secure="yes">
168 <RegistrySearch Id="NETFRAMEWORK20RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1049" Name="Install" Type="raw" />
169 </Property>
170 </Fragment>
171
172 <!-- set to #1 if the .NET Framework 2.0 Spanish language pack is installed (not set otherwise) -->
173 <Fragment>
174 <Property Id="NETFRAMEWORK20_ES_ES_LANGPACK" Secure="yes">
175 <RegistrySearch Id="NETFRAMEWORK20EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\3082" Name="Install" Type="raw" />
176 </Property>
177 </Fragment>
178
179 <!-- set to #1 if the .NET Framework 2.0 Swedish language pack is installed (not set otherwise) -->
180 <Fragment>
181 <Property Id="NETFRAMEWORK20_SV_SE_LANGPACK" Secure="yes">
182 <RegistrySearch Id="NETFRAMEWORK20SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1053" Name="Install" Type="raw" />
183 </Property>
184 </Fragment>
185
186 <!-- set to #1 if the .NET Framework 2.0 Turkish language pack is installed (not set otherwise) -->
187 <Fragment>
188 <Property Id="NETFRAMEWORK20_TR_TR_LANGPACK" Secure="yes">
189 <RegistrySearch Id="NETFRAMEWORK20TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\1055" Name="Install" Type="raw" />
190 </Property>
191 </Fragment>
192
193 <!-- location of the .NET Framework 2.0 SDK installation root -->
194 <Fragment>
195 <Property Id="NETFRAMEWORK20SDKDIR" Secure="yes">
196 <RegistrySearch Id="NetFramework20SDKDir" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="sdkInstallRootv2.0" Type="raw" />
197 </Property>
198 </Fragment>
199
200</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx3.5.wxs b/src/ext/NetFx/wixlib/NetFx3.5.wxs
new file mode 100644
index 00000000..c1a80f50
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx3.5.wxs
@@ -0,0 +1,234 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following locations:
10
11 .NET Framework 3.5 - http://msdn.microsoft.com/library/cc160716.aspx
12 .NET Framework 3.5 client profile - http://download.microsoft.com/download/5/a/a/5aa86d6c-969b-42d8-bc6b-30e02bfeccf0/NETFXClientProfile_DeploymentGuide.htm
13 -->
14
15 <!-- Indicates the service pack level for the .NET Framework 3.5 (for bundles). -->
16 <Fragment>
17 <util:RegistrySearch Id="NETFRAMEWORK35_SP_LEVEL" Variable="NETFRAMEWORK35_SP_LEVEL" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5" Value="SP" Result="value" />
18 </Fragment>
19
20 <!-- set to #1 if the .NET Framework 3.5 is installed (not set otherwise) -->
21 <Fragment>
22 <Property Id="NETFRAMEWORK35" Secure="yes">
23 <RegistrySearch Id="NetFramework35" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" Name="Install" Type="raw" />
24 </Property>
25 </Fragment>
26
27 <!-- Indicates the service pack level for the .NET Framework 3.5. -->
28 <Fragment>
29 <Property Id="NETFRAMEWORK35_SP_LEVEL" Secure="yes">
30 <RegistrySearch Id="NetFramework35SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5" Name="SP" Type="raw" />
31 </Property>
32 </Fragment>
33
34 <!-- Location of .NET Framework 3.5 redistributable install root directory -->
35 <Fragment>
36 <Property Id="NETFRAMEWORK35INSTALLROOTDIR" Secure="yes">
37 <RegistrySearch Id="NetFxInstallRootForNetfx35Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
38 <DirectorySearch Id="NetFx35InstallRootSearch" Path="v3.5" Depth="0" />
39 </RegistrySearch>
40 </Property>
41 </Fragment>
42
43 <!-- Location of .NET Framework 3.5 (64-bit) redistributable install root directory -->
44 <Fragment>
45 <Property Id="NETFRAMEWORK35INSTALLROOTDIR64" Secure="yes">
46 <RegistrySearch Id="NetFxInstallRootForNetfx35Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Bitness="always64">
47 <DirectorySearch Id="NetFx35InstallRootSearch64" Path="v3.5" Depth="0" />
48 </RegistrySearch>
49 </Property>
50 </Fragment>
51
52 <!-- set to #1 if the .NET Framework 3.5 Chinese (Simplified) language pack is installed (not set otherwise) -->
53 <Fragment>
54 <Property Id="NETFRAMEWORK35_ZH_CN_LANGPACK" Secure="yes">
55 <RegistrySearch Id="NETFRAMEWORK35ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\2052" Name="Install" Type="raw" />
56 </Property>
57 </Fragment>
58
59 <!-- set to #1 if the .NET Framework 3.5 Chinese (Traditional) language pack is installed (not set otherwise) -->
60 <Fragment>
61 <Property Id="NETFRAMEWORK35_ZH_TW_LANGPACK" Secure="yes">
62 <RegistrySearch Id="NETFRAMEWORK35ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1028" Name="Install" Type="raw" />
63 </Property>
64 </Fragment>
65
66 <!-- set to #1 if the .NET Framework 3.5 Czech language pack is installed (not set otherwise) -->
67 <Fragment>
68 <Property Id="NETFRAMEWORK35_CS_CZ_LANGPACK" Secure="yes">
69 <RegistrySearch Id="NETFRAMEWORK35CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1029" Name="Install" Type="raw" />
70 </Property>
71 </Fragment>
72
73 <!-- set to #1 if the .NET Framework 3.5 Danish language pack is installed (not set otherwise) -->
74 <Fragment>
75 <Property Id="NETFRAMEWORK35_DA_DK_LANGPACK" Secure="yes">
76 <RegistrySearch Id="NETFRAMEWORK35DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1030" Name="Install" Type="raw" />
77 </Property>
78 </Fragment>
79
80 <!-- set to #1 if the .NET Framework 3.5 Dutch language pack is installed (not set otherwise) -->
81 <Fragment>
82 <Property Id="NETFRAMEWORK35_NL_NL_LANGPACK" Secure="yes">
83 <RegistrySearch Id="NETFRAMEWORK35NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1043" Name="Install" Type="raw" />
84 </Property>
85 </Fragment>
86
87 <!-- set to #1 if the .NET Framework 3.5 Finnish language pack is installed (not set otherwise) -->
88 <Fragment>
89 <Property Id="NETFRAMEWORK35_FI_FI_LANGPACK" Secure="yes">
90 <RegistrySearch Id="NETFRAMEWORK35FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1035" Name="Install" Type="raw" />
91 </Property>
92 </Fragment>
93
94 <!-- set to #1 if the .NET Framework 3.5 French language pack is installed (not set otherwise) -->
95 <Fragment>
96 <Property Id="NETFRAMEWORK35_FR_FR_LANGPACK" Secure="yes">
97 <RegistrySearch Id="NETFRAMEWORK35FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1036" Name="Install" Type="raw" />
98 </Property>
99 </Fragment>
100
101 <!-- set to #1 if the .NET Framework 3.5 German language pack is installed (not set otherwise) -->
102 <Fragment>
103 <Property Id="NETFRAMEWORK35_DE_DE_LANGPACK" Secure="yes">
104 <RegistrySearch Id="NETFRAMEWORK35DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1031" Name="Install" Type="raw" />
105 </Property>
106 </Fragment>
107
108 <!-- set to #1 if the .NET Framework 3.5 Greek language pack is installed (not set otherwise) -->
109 <Fragment>
110 <Property Id="NETFRAMEWORK35_EL_GR_LANGPACK" Secure="yes">
111 <RegistrySearch Id="NETFRAMEWORK35ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1032" Name="Install" Type="raw" />
112 </Property>
113 </Fragment>
114
115 <!-- set to #1 if the .NET Framework 3.5 Hungarian language pack is installed (not set otherwise) -->
116 <Fragment>
117 <Property Id="NETFRAMEWORK35_HU_HU_LANGPACK" Secure="yes">
118 <RegistrySearch Id="NETFRAMEWORK35HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1038" Name="Install" Type="raw" />
119 </Property>
120 </Fragment>
121
122 <!-- set to #1 if the .NET Framework 3.5 Italian language pack is installed (not set otherwise) -->
123 <Fragment>
124 <Property Id="NETFRAMEWORK35_IT_IT_LANGPACK" Secure="yes">
125 <RegistrySearch Id="NETFRAMEWORK35ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1040" Name="Install" Type="raw" />
126 </Property>
127 </Fragment>
128
129 <!-- set to #1 if the .NET Framework 3.5 Japanese language pack is installed (not set otherwise) -->
130 <Fragment>
131 <Property Id="NETFRAMEWORK35_JA_JP_LANGPACK" Secure="yes">
132 <RegistrySearch Id="NETFRAMEWORK35JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1041" Name="Install" Type="raw" />
133 </Property>
134 </Fragment>
135
136 <!-- set to #1 if the .NET Framework 3.5 Korean language pack is installed (not set otherwise) -->
137 <Fragment>
138 <Property Id="NETFRAMEWORK35_KO_KR_LANGPACK" Secure="yes">
139 <RegistrySearch Id="NETFRAMEWORK35KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1042" Name="Install" Type="raw" />
140 </Property>
141 </Fragment>
142
143 <!-- set to #1 if the .NET Framework 3.5 Norwegian language pack is installed (not set otherwise) -->
144 <Fragment>
145 <Property Id="NETFRAMEWORK35_NB_NO_LANGPACK" Secure="yes">
146 <RegistrySearch Id="NETFRAMEWORK35NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1044" Name="Install" Type="raw" />
147 </Property>
148 </Fragment>
149
150 <!-- set to #1 if the .NET Framework 3.5 Polish language pack is installed (not set otherwise) -->
151 <Fragment>
152 <Property Id="NETFRAMEWORK35_PL_PL_LANGPACK" Secure="yes">
153 <RegistrySearch Id="NETFRAMEWORK35PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1045" Name="Install" Type="raw" />
154 </Property>
155 </Fragment>
156
157 <!-- set to #1 if the .NET Framework 3.5 Portuguese (Brazil) language pack is installed (not set otherwise) -->
158 <Fragment>
159 <Property Id="NETFRAMEWORK35_PT_BR_LANGPACK" Secure="yes">
160 <RegistrySearch Id="NETFRAMEWORK35PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1046" Name="Install" Type="raw" />
161 </Property>
162 </Fragment>
163
164 <!-- set to #1 if the .NET Framework 3.5 Portuguese (Portugal) language pack is installed (not set otherwise) -->
165 <Fragment>
166 <Property Id="NETFRAMEWORK35_PT_PT_LANGPACK" Secure="yes">
167 <RegistrySearch Id="NETFRAMEWORK35PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\2070" Name="Install" Type="raw" />
168 </Property>
169 </Fragment>
170
171 <!-- set to #1 if the .NET Framework 3.5 Russian language pack is installed (not set otherwise) -->
172 <Fragment>
173 <Property Id="NETFRAMEWORK35_RU_RU_LANGPACK" Secure="yes">
174 <RegistrySearch Id="NETFRAMEWORK35RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1049" Name="Install" Type="raw" />
175 </Property>
176 </Fragment>
177
178 <!-- set to #1 if the .NET Framework 3.5 Spanish language pack is installed (not set otherwise) -->
179 <Fragment>
180 <Property Id="NETFRAMEWORK35_ES_ES_LANGPACK" Secure="yes">
181 <RegistrySearch Id="NETFRAMEWORK35EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\3082" Name="Install" Type="raw" />
182 </Property>
183 </Fragment>
184
185 <!-- set to #1 if the .NET Framework 3.5 Swedish language pack is installed (not set otherwise) -->
186 <Fragment>
187 <Property Id="NETFRAMEWORK35_SV_SE_LANGPACK" Secure="yes">
188 <RegistrySearch Id="NETFRAMEWORK35SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1053" Name="Install" Type="raw" />
189 </Property>
190 </Fragment>
191
192 <!-- set to #1 if the .NET Framework 3.5 Turkish language pack is installed (not set otherwise) -->
193 <Fragment>
194 <Property Id="NETFRAMEWORK35_TR_TR_LANGPACK" Secure="yes">
195 <RegistrySearch Id="NETFRAMEWORK35TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.5\1055" Name="Install" Type="raw" />
196 </Property>
197 </Fragment>
198
199 <!-- set to #1 if the .NET Framework 3.5 client profile is installed (not set otherwise) -->
200 <Fragment>
201 <Property Id="NETFRAMEWORK35_CLIENT" Secure="yes">
202 <RegistrySearch Id="NETFRAMEWORK35ClientSearch" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\DotNetClient\v3.5" Name="Install" Type="raw" />
203 </Property>
204 </Fragment>
205
206 <!-- Indicates the service pack level for the .NET Framework 3.5 client profile -->
207 <Fragment>
208 <Property Id="NETFRAMEWORK35_CLIENT_SP_LEVEL" Secure="yes">
209 <RegistrySearch Id="NETFRAMEWORK35ClientSpSearch" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\DotNetClient\v3.5" Name="SP" Type="raw" />
210 </Property>
211 </Fragment>
212
213 <!-- location of the Windows SDK 6.0a installation root -->
214 <Fragment>
215 <Property Id="WINDOWSSDK60ADIR" Secure="yes">
216 <RegistrySearch Id="WindowsSdk60aDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v6.0A" Name="InstallationFolder" Type="raw" />
217 </Property>
218 </Fragment>
219
220 <!-- location of the Windows SDK 6.1 installation root -->
221 <Fragment>
222 <Property Id="WINDOWSSDK61DIR" Secure="yes">
223 <RegistrySearch Id="WindowsSdk61Dir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v6.1" Name="InstallationFolder" Type="raw" />
224 </Property>
225 </Fragment>
226
227 <!-- location of the Windows SDK 7.0 installation root -->
228 <Fragment>
229 <Property Id="WINDOWSSDK70ADIR" Secure="yes">
230 <RegistrySearch Id="WindowsSdk70aDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows\v7.0A" Name="InstallationFolder" Type="raw" />
231 </Property>
232 </Fragment>
233
234</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx3.wxs b/src/ext/NetFx/wixlib/NetFx3.wxs
new file mode 100644
index 00000000..5fb279ea
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx3.wxs
@@ -0,0 +1,194 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 3.0 - http://msdn.microsoft.com/library/aa964979.aspx
12 -->
13
14 <!-- set to #1 if the .NET Framework 3.0 is installed (not set otherwise) -->
15 <Fragment>
16 <Property Id="NETFRAMEWORK30" Secure="yes">
17 <RegistrySearch Id="NetFramework30" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" Name="InstallSuccess" Type="raw" />
18 </Property>
19 </Fragment>
20
21 <!-- Indicates the service pack level for the .NET Framework 3.0. -->
22 <!-- This value will not exist until a service pack is installed. -->
23 <Fragment>
24 <Property Id="NETFRAMEWORK30_SP_LEVEL" Secure="yes">
25 <RegistrySearch Id="NetFramework30SP" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0" Name="SP" Type="raw" />
26 </Property>
27 </Fragment>
28
29 <!-- Location of .NET Framework 3.0 redistributable install root directory -->
30 <Fragment>
31 <Property Id="NETFRAMEWORK30INSTALLROOTDIR" Secure="yes">
32 <RegistrySearch Id="NetFxInstallRootForNetfx30Search" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot">
33 <DirectorySearch Id="NetFx30InstallRootSearch" Path="v3.0" Depth="0" />
34 </RegistrySearch>
35 </Property>
36 </Fragment>
37
38 <!-- Location of .NET Framework 3.0 (64-bit) redistributable install root directory -->
39 <Fragment>
40 <Property Id="NETFRAMEWORK30INSTALLROOTDIR64" Secure="yes">
41 <RegistrySearch Id="NetFxInstallRootForNetfx30Search64" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" Bitness="always64">
42 <DirectorySearch Id="NetFx30InstallRootSearch64" Path="v3.0" Depth="0" />
43 </RegistrySearch>
44 </Property>
45 </Fragment>
46
47 <!-- set to #1 if the .NET Framework 3.0 Chinese (Simplified) language pack is installed (not set otherwise) -->
48 <Fragment>
49 <Property Id="NETFRAMEWORK30_ZH_CN_LANGPACK" Secure="yes">
50 <RegistrySearch Id="NETFRAMEWORK30ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\2052" Name="Install" Type="raw" />
51 </Property>
52 </Fragment>
53
54 <!-- set to #1 if the .NET Framework 3.0 Chinese (Traditional) language pack is installed (not set otherwise) -->
55 <Fragment>
56 <Property Id="NETFRAMEWORK30_ZH_TW_LANGPACK" Secure="yes">
57 <RegistrySearch Id="NETFRAMEWORK30ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1028" Name="Install" Type="raw" />
58 </Property>
59 </Fragment>
60
61 <!-- set to #1 if the .NET Framework 3.0 Czech language pack is installed (not set otherwise) -->
62 <Fragment>
63 <Property Id="NETFRAMEWORK30_CS_CZ_LANGPACK" Secure="yes">
64 <RegistrySearch Id="NETFRAMEWORK30CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1029" Name="Install" Type="raw" />
65 </Property>
66 </Fragment>
67
68 <!-- set to #1 if the .NET Framework 3.0 Danish language pack is installed (not set otherwise) -->
69 <Fragment>
70 <Property Id="NETFRAMEWORK30_DA_DK_LANGPACK" Secure="yes">
71 <RegistrySearch Id="NETFRAMEWORK30DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1030" Name="Install" Type="raw" />
72 </Property>
73 </Fragment>
74
75 <!-- set to #1 if the .NET Framework 3.0 Dutch language pack is installed (not set otherwise) -->
76 <Fragment>
77 <Property Id="NETFRAMEWORK30_NL_NL_LANGPACK" Secure="yes">
78 <RegistrySearch Id="NETFRAMEWORK30NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1043" Name="Install" Type="raw" />
79 </Property>
80 </Fragment>
81
82 <!-- set to #1 if the .NET Framework 3.0 Finnish language pack is installed (not set otherwise) -->
83 <Fragment>
84 <Property Id="NETFRAMEWORK30_FI_FI_LANGPACK" Secure="yes">
85 <RegistrySearch Id="NETFRAMEWORK30FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1035" Name="Install" Type="raw" />
86 </Property>
87 </Fragment>
88
89 <!-- set to #1 if the .NET Framework 3.0 French language pack is installed (not set otherwise) -->
90 <Fragment>
91 <Property Id="NETFRAMEWORK30_FR_FR_LANGPACK" Secure="yes">
92 <RegistrySearch Id="NETFRAMEWORK30FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1036" Name="Install" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- set to #1 if the .NET Framework 3.0 German language pack is installed (not set otherwise) -->
97 <Fragment>
98 <Property Id="NETFRAMEWORK30_DE_DE_LANGPACK" Secure="yes">
99 <RegistrySearch Id="NETFRAMEWORK30DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1031" Name="Install" Type="raw" />
100 </Property>
101 </Fragment>
102
103 <!-- set to #1 if the .NET Framework 3.0 Greek language pack is installed (not set otherwise) -->
104 <Fragment>
105 <Property Id="NETFRAMEWORK30_EL_GR_LANGPACK" Secure="yes">
106 <RegistrySearch Id="NETFRAMEWORK30ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1032" Name="Install" Type="raw" />
107 </Property>
108 </Fragment>
109
110 <!-- set to #1 if the .NET Framework 3.0 Hungarian language pack is installed (not set otherwise) -->
111 <Fragment>
112 <Property Id="NETFRAMEWORK30_HU_HU_LANGPACK" Secure="yes">
113 <RegistrySearch Id="NETFRAMEWORK30HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1038" Name="Install" Type="raw" />
114 </Property>
115 </Fragment>
116
117 <!-- set to #1 if the .NET Framework 3.0 Italian language pack is installed (not set otherwise) -->
118 <Fragment>
119 <Property Id="NETFRAMEWORK30_IT_IT_LANGPACK" Secure="yes">
120 <RegistrySearch Id="NETFRAMEWORK30ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1040" Name="Install" Type="raw" />
121 </Property>
122 </Fragment>
123
124 <!-- set to #1 if the .NET Framework 3.0 Japanese language pack is installed (not set otherwise) -->
125 <Fragment>
126 <Property Id="NETFRAMEWORK30_JA_JP_LANGPACK" Secure="yes">
127 <RegistrySearch Id="NETFRAMEWORK30JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1041" Name="Install" Type="raw" />
128 </Property>
129 </Fragment>
130
131 <!-- set to #1 if the .NET Framework 3.0 Korean language pack is installed (not set otherwise) -->
132 <Fragment>
133 <Property Id="NETFRAMEWORK30_KO_KR_LANGPACK" Secure="yes">
134 <RegistrySearch Id="NETFRAMEWORK30KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1042" Name="Install" Type="raw" />
135 </Property>
136 </Fragment>
137
138 <!-- set to #1 if the .NET Framework 3.0 Norwegian language pack is installed (not set otherwise) -->
139 <Fragment>
140 <Property Id="NETFRAMEWORK30_NB_NO_LANGPACK" Secure="yes">
141 <RegistrySearch Id="NETFRAMEWORK30NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1044" Name="Install" Type="raw" />
142 </Property>
143 </Fragment>
144
145 <!-- set to #1 if the .NET Framework 3.0 Polish language pack is installed (not set otherwise) -->
146 <Fragment>
147 <Property Id="NETFRAMEWORK30_PL_PL_LANGPACK" Secure="yes">
148 <RegistrySearch Id="NETFRAMEWORK30PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1045" Name="Install" Type="raw" />
149 </Property>
150 </Fragment>
151
152 <!-- set to #1 if the .NET Framework 3.0 Portuguese (Brazil) language pack is installed (not set otherwise) -->
153 <Fragment>
154 <Property Id="NETFRAMEWORK30_PT_BR_LANGPACK" Secure="yes">
155 <RegistrySearch Id="NETFRAMEWORK30PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1046" Name="Install" Type="raw" />
156 </Property>
157 </Fragment>
158
159 <!-- set to #1 if the .NET Framework 3.0 Portuguese (Portugal) language pack is installed (not set otherwise) -->
160 <Fragment>
161 <Property Id="NETFRAMEWORK30_PT_PT_LANGPACK" Secure="yes">
162 <RegistrySearch Id="NETFRAMEWORK30PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\2070" Name="Install" Type="raw" />
163 </Property>
164 </Fragment>
165
166 <!-- set to #1 if the .NET Framework 3.0 Russian language pack is installed (not set otherwise) -->
167 <Fragment>
168 <Property Id="NETFRAMEWORK30_RU_RU_LANGPACK" Secure="yes">
169 <RegistrySearch Id="NETFRAMEWORK30RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1049" Name="Install" Type="raw" />
170 </Property>
171 </Fragment>
172
173 <!-- set to #1 if the .NET Framework 3.0 Spanish language pack is installed (not set otherwise) -->
174 <Fragment>
175 <Property Id="NETFRAMEWORK30_ES_ES_LANGPACK" Secure="yes">
176 <RegistrySearch Id="NETFRAMEWORK30EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\3082" Name="Install" Type="raw" />
177 </Property>
178 </Fragment>
179
180 <!-- set to #1 if the .NET Framework 3.0 Swedish language pack is installed (not set otherwise) -->
181 <Fragment>
182 <Property Id="NETFRAMEWORK30_SV_SE_LANGPACK" Secure="yes">
183 <RegistrySearch Id="NETFRAMEWORK30SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1053" Name="Install" Type="raw" />
184 </Property>
185 </Fragment>
186
187 <!-- set to #1 if the .NET Framework 3.0 Turkish language pack is installed (not set otherwise) -->
188 <Fragment>
189 <Property Id="NETFRAMEWORK30_TR_TR_LANGPACK" Secure="yes">
190 <RegistrySearch Id="NETFRAMEWORK30TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1055" Name="Install" Type="raw" />
191 </Property>
192 </Fragment>
193
194</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx4.5.wxs b/src/ext/NetFx/wixlib/NetFx4.5.wxs
new file mode 100644
index 00000000..443235d4
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx4.5.wxs
@@ -0,0 +1,198 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 4.5 - http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx, http://msdn.microsoft.com/en-us/library/ee942965(v=VS.110).aspx
12 -->
13
14 <?define NetFx45MinRelease = 378389?>
15 <?define NetFx45WebLink = http://go.microsoft.com/fwlink/?LinkId=225704 ?>
16 <?define NetFx45RedistLink = http://go.microsoft.com/fwlink/?LinkId=225702 ?>
17 <?define NetFx45EulaLink = http://go.microsoft.com/fwlink/?LinkID=260867 ?>
18 <?define NetFx45WebId = NetFx45Web ?>
19 <?define NetFx45RedistId = NetFx45Redist ?>
20
21 <Fragment>
22 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
23 <Property Id="WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED" Secure="yes" />
24 <SetProperty Id="WIX_IS_NETFRAMEWORK_45_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx45MinRelease)&quot;" />
25 </Fragment>
26
27 <Fragment>
28 <util:RegistrySearch Id="NETFRAMEWORK45" Variable="NETFRAMEWORK45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Release" Result="value" />
29 </Fragment>
30
31 <!-- set to Release number of the .NET Framework 4.5 if installed (not set otherwise) -->
32 <Fragment>
33 <Property Id="NETFRAMEWORK45" Secure="yes">
34 <RegistrySearch Id="NetFramework45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Release" Type="raw" />
35 </Property>
36 </Fragment>
37
38 <!-- set to Release number of the .NET Framework 4.5 Arabic language pack if installed (not set otherwise) -->
39 <Fragment>
40 <Property Id="NETFRAMEWORK45_AR_SA_LANGPACK" Secure="yes">
41 <RegistrySearch Id="NETFRAMEWORK45ArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1025" Name="Release" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <!-- set to Release number of the .NET Framework 4.5 Chinese (Simplified) language pack if installed (not set otherwise) -->
46 <Fragment>
47 <Property Id="NETFRAMEWORK45_ZH_CN_LANGPACK" Secure="yes">
48 <RegistrySearch Id="NETFRAMEWORK45ZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2052" Name="Release" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <!-- set to Release number of the .NET Framework 4.5 Chinese (Traditional) language pack if installed (not set otherwise) -->
53 <Fragment>
54 <Property Id="NETFRAMEWORK45_ZH_TW_LANGPACK" Secure="yes">
55 <RegistrySearch Id="NETFRAMEWORK45ZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1028" Name="Release" Type="raw" />
56 </Property>
57 </Fragment>
58
59 <!-- set to Release number of the .NET Framework 4.5 Czech language pack if installed (not set otherwise) -->
60 <Fragment>
61 <Property Id="NETFRAMEWORK45_CS_CZ_LANGPACK" Secure="yes">
62 <RegistrySearch Id="NETFRAMEWORK45CsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1029" Name="Release" Type="raw" />
63 </Property>
64 </Fragment>
65
66 <!-- set to Release number of the .NET Framework 4.5 Danish language pack if installed (not set otherwise) -->
67 <Fragment>
68 <Property Id="NETFRAMEWORK45_DA_DK_LANGPACK" Secure="yes">
69 <RegistrySearch Id="NETFRAMEWORK45DaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1030" Name="Release" Type="raw" />
70 </Property>
71 </Fragment>
72
73 <!-- set to Release number of the .NET Framework 4.5 Dutch language pack if installed (not set otherwise) -->
74 <Fragment>
75 <Property Id="NETFRAMEWORK45_NL_NL_LANGPACK" Secure="yes">
76 <RegistrySearch Id="NETFRAMEWORK45NlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1043" Name="Release" Type="raw" />
77 </Property>
78 </Fragment>
79
80 <!-- set to Release number of the .NET Framework 4.5 Finnish language pack if installed (not set otherwise) -->
81 <Fragment>
82 <Property Id="NETFRAMEWORK45_FI_FI_LANGPACK" Secure="yes">
83 <RegistrySearch Id="NETFRAMEWORK45FiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1035" Name="Release" Type="raw" />
84 </Property>
85 </Fragment>
86
87 <!-- set to Release number of the .NET Framework 4.5 French language pack if installed (not set otherwise) -->
88 <Fragment>
89 <Property Id="NETFRAMEWORK45_FR_FR_LANGPACK" Secure="yes">
90 <RegistrySearch Id="NETFRAMEWORK45FrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1036" Name="Release" Type="raw" />
91 </Property>
92 </Fragment>
93
94 <!-- set to Release number of the .NET Framework 4.5 German language pack if installed (not set otherwise) -->
95 <Fragment>
96 <Property Id="NETFRAMEWORK45_DE_DE_LANGPACK" Secure="yes">
97 <RegistrySearch Id="NETFRAMEWORK45DeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1031" Name="Release" Type="raw" />
98 </Property>
99 </Fragment>
100
101 <!-- set to Release number of the .NET Framework 4.5 Greek language pack if installed (not set otherwise) -->
102 <Fragment>
103 <Property Id="NETFRAMEWORK45_EL_GR_LANGPACK" Secure="yes">
104 <RegistrySearch Id="NETFRAMEWORK45ElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1032" Name="Release" Type="raw" />
105 </Property>
106 </Fragment>
107
108 <!-- set to Release number of the .NET Framework 4.5 Hebrew language pack if installed (not set otherwise) -->
109 <Fragment>
110 <Property Id="NETFRAMEWORK45_HE_IL_LANGPACK" Secure="yes">
111 <RegistrySearch Id="NETFRAMEWORK45HeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1037" Name="Release" Type="raw" />
112 </Property>
113 </Fragment>
114
115 <!-- set to Release number of the .NET Framework 4.5 Hungarian language pack if installed (not set otherwise) -->
116 <Fragment>
117 <Property Id="NETFRAMEWORK45_HU_HU_LANGPACK" Secure="yes">
118 <RegistrySearch Id="NETFRAMEWORK45HuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1038" Name="Release" Type="raw" />
119 </Property>
120 </Fragment>
121
122 <!-- set to Release number of the .NET Framework 4.5 Italian language pack if installed (not set otherwise) -->
123 <Fragment>
124 <Property Id="NETFRAMEWORK45_IT_IT_LANGPACK" Secure="yes">
125 <RegistrySearch Id="NETFRAMEWORK45ItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1040" Name="Release" Type="raw" />
126 </Property>
127 </Fragment>
128
129 <!-- set to Release number of the .NET Framework 4.5 Japanese language pack if installed (not set otherwise) -->
130 <Fragment>
131 <Property Id="NETFRAMEWORK45_JA_JP_LANGPACK" Secure="yes">
132 <RegistrySearch Id="NETFRAMEWORK45JaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1041" Name="Release" Type="raw" />
133 </Property>
134 </Fragment>
135
136 <!-- set to Release number of the .NET Framework 4.5 Korean language pack if installed (not set otherwise) -->
137 <Fragment>
138 <Property Id="NETFRAMEWORK45_KO_KR_LANGPACK" Secure="yes">
139 <RegistrySearch Id="NETFRAMEWORK45KoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1042" Name="Release" Type="raw" />
140 </Property>
141 </Fragment>
142
143 <!-- set to Release number of the .NET Framework 4.5 Norwegian language pack if installed (not set otherwise) -->
144 <Fragment>
145 <Property Id="NETFRAMEWORK45_NB_NO_LANGPACK" Secure="yes">
146 <RegistrySearch Id="NETFRAMEWORK45NbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1044" Name="Release" Type="raw" />
147 </Property>
148 </Fragment>
149
150 <!-- set to Release number of the .NET Framework 4.5 Polish language pack if installed (not set otherwise) -->
151 <Fragment>
152 <Property Id="NETFRAMEWORK45_PL_PL_LANGPACK" Secure="yes">
153 <RegistrySearch Id="NETFRAMEWORK45PlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1045" Name="Release" Type="raw" />
154 </Property>
155 </Fragment>
156
157 <!-- set to Release number of the .NET Framework 4.5 Portuguese (Brazil) language pack if installed (not set otherwise) -->
158 <Fragment>
159 <Property Id="NETFRAMEWORK45_PT_BR_LANGPACK" Secure="yes">
160 <RegistrySearch Id="NETFRAMEWORK45PtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1046" Name="Release" Type="raw" />
161 </Property>
162 </Fragment>
163
164 <!-- set to Release number of the .NET Framework 4.5 Portuguese (Portugal) language pack if installed (not set otherwise) -->
165 <Fragment>
166 <Property Id="NETFRAMEWORK45_PT_PT_LANGPACK" Secure="yes">
167 <RegistrySearch Id="NETFRAMEWORK45PtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2070" Name="Release" Type="raw" />
168 </Property>
169 </Fragment>
170
171 <!-- set to Release number of the .NET Framework 4.5 Russian language pack if installed (not set otherwise) -->
172 <Fragment>
173 <Property Id="NETFRAMEWORK45_RU_RU_LANGPACK" Secure="yes">
174 <RegistrySearch Id="NETFRAMEWORK45RuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1049" Name="Release" Type="raw" />
175 </Property>
176 </Fragment>
177
178 <!-- set to Release number of the .NET Framework 4.5 Spanish language pack if installed (not set otherwise) -->
179 <Fragment>
180 <Property Id="NETFRAMEWORK45_ES_ES_LANGPACK" Secure="yes">
181 <RegistrySearch Id="NETFRAMEWORK45EsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\3082" Name="Release" Type="raw" />
182 </Property>
183 </Fragment>
184
185 <!-- set to Release number of the .NET Framework 4.5 Swedish language pack if installed (not set otherwise) -->
186 <Fragment>
187 <Property Id="NETFRAMEWORK45_SV_SE_LANGPACK" Secure="yes">
188 <RegistrySearch Id="NETFRAMEWORK45SvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1053" Name="Release" Type="raw" />
189 </Property>
190 </Fragment>
191
192 <!-- set to Release number of the .NET Framework 4.5 Turkish language pack if installed (not set otherwise) -->
193 <Fragment>
194 <Property Id="NETFRAMEWORK45_TR_TR_LANGPACK" Secure="yes">
195 <RegistrySearch Id="NETFRAMEWORK45TrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1055" Name="Release" Type="raw" />
196 </Property>
197 </Fragment>
198</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx4.wxs b/src/ext/NetFx/wixlib/NetFx4.wxs
new file mode 100644
index 00000000..295d8078
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx4.wxs
@@ -0,0 +1,416 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 4.0 full & client - http://msdn.microsoft.com/en-us/library/ee942965.aspx
12 -->
13
14 <?define NetFx40WebLink = http://go.microsoft.com/fwlink/?linkid=182805 ?>
15 <?define NetFx40RedistLink = http://go.microsoft.com/fwlink/?LinkId=247729 ?>
16 <?define NetFx40ClientWebLink = http://go.microsoft.com/fwlink/?linkid=182804 ?>
17 <?define NetFx40ClientRedistLink = http://go.microsoft.com/fwlink/?LinkId=247730 ?>
18 <?define NetFx40EulaLink = http://go.microsoft.com/fwlink/?LinkID=188993 ?>
19 <?define NetFx40WebId = NetFx40Web ?>
20 <?define NetFx40RedistId = NetFx40Redist ?>
21 <?define NetFx40ClientWebId = NetFx40ClientWeb ?>
22 <?define NetFx40ClientRedistId = NetFx40ClientRedist ?>
23
24 <Fragment>
25 <PropertyRef Id="NETFRAMEWORK40FULL" />
26 <Property Id="WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" Secure="yes" />
27 <SetProperty Id="WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="NETFRAMEWORK40FULL" />
28 </Fragment>
29
30 <Fragment>
31 <util:RegistrySearch Id="NETFRAMEWORK40" Variable="NETFRAMEWORK40" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Install" Result="value" />
32 </Fragment>
33
34 <Fragment>
35 <util:RegistrySearch Id="NETFRAMEWORK40CLIENT" Variable="NETFRAMEWORK40CLIENT" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" Value="Install" Result="value" />
36 </Fragment>
37
38 <!-- set to #1 if the .NET Framework 4.0 client is installed (not set otherwise) -->
39 <Fragment>
40 <Property Id="NETFRAMEWORK40CLIENT" Secure="yes">
41 <RegistrySearch Id="NetFramework40Client" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" Name="Install" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <!-- Indicates the servicing level for the .NET Framework 4.0 client. -->
46 <Fragment>
47 <Property Id="NETFRAMEWORK40CLIENT_SERVICING_LEVEL" Secure="yes">
48 <RegistrySearch Id="NetFramework40ClientServicing" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="Servicing" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <!-- Location of .NET Framework 4.0 client redistributable install root directory -->
53 <Fragment>
54 <Property Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR" Secure="yes">
55 <RegistrySearch Id="NetFxInstallRootForNetfx40Client" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="InstallPath" Type="raw" />
56 </Property>
57 </Fragment>
58
59 <!-- Location of .NET Framework 4.0 client (64-bit) redistributable install root directory -->
60 <Fragment>
61 <Property Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR64" Secure="yes">
62 <RegistrySearch Id="NetFxInstallRootForNetfx40Client64" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client" Name="InstallPath" Type="raw" Bitness="always64" />
63 </Property>
64 </Fragment>
65
66 <!-- set to #1 if the .NET Framework 4.0 full is installed (not set otherwise) -->
67 <Fragment>
68 <Property Id="NETFRAMEWORK40FULL" Secure="yes">
69 <RegistrySearch Id="NetFramework40Full" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Install" Type="raw" />
70 </Property>
71 </Fragment>
72
73 <!-- Indicates the servicing level for the .NET Framework 4.0 full. -->
74 <Fragment>
75 <Property Id="NETFRAMEWORK40FULL_SERVICING_LEVEL" Secure="yes">
76 <RegistrySearch Id="NetFramework40FullServicing" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Servicing" Type="raw" />
77 </Property>
78 </Fragment>
79
80 <!-- Location of .NET Framework 4.0 full redistributable install root directory -->
81 <Fragment>
82 <Property Id="NETFRAMEWORK40FULLINSTALLROOTDIR" Secure="yes">
83 <RegistrySearch Id="NetFxInstallRootForNetfx40Full" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="InstallPath" Type="raw" />
84 </Property>
85 </Fragment>
86
87 <!-- Location of .NET Framework 4.0 full (64-bit) redistributable install root directory -->
88 <Fragment>
89 <Property Id="NETFRAMEWORK40FULLINSTALLROOTDIR64" Secure="yes">
90 <RegistrySearch Id="NetFxInstallRootForNetfx40Full64" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full" Name="InstallPath" Type="raw" Bitness="always64" />
91 </Property>
92 </Fragment>
93
94 <!-- set to #1 if the .NET Framework 4.0 Client Arabic language pack is installed (not set otherwise) -->
95 <Fragment>
96 <Property Id="NETFRAMEWORK40CLIENT_AR_SA_LANGPACK" Secure="yes">
97 <RegistrySearch Id="NETFRAMEWORK40CLIENTArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1025" Name="Install" Type="raw" />
98 </Property>
99 </Fragment>
100
101 <!-- set to #1 if the .NET Framework 4.0 Client Chinese (Simplified) language pack is installed (not set otherwise) -->
102 <Fragment>
103 <Property Id="NETFRAMEWORK40CLIENT_ZH_CN_LANGPACK" Secure="yes">
104 <RegistrySearch Id="NETFRAMEWORK40CLIENTZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\2052" Name="Install" Type="raw" />
105 </Property>
106 </Fragment>
107
108 <!-- set to #1 if the .NET Framework 4.0 Client Chinese (Traditional) language pack is installed (not set otherwise) -->
109 <Fragment>
110 <Property Id="NETFRAMEWORK40CLIENT_ZH_TW_LANGPACK" Secure="yes">
111 <RegistrySearch Id="NETFRAMEWORK40CLIENTZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1028" Name="Install" Type="raw" />
112 </Property>
113 </Fragment>
114
115 <!-- set to #1 if the .NET Framework 4.0 Client Czech language pack is installed (not set otherwise) -->
116 <Fragment>
117 <Property Id="NETFRAMEWORK40CLIENT_CS_CZ_LANGPACK" Secure="yes">
118 <RegistrySearch Id="NETFRAMEWORK40CLIENTCsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1029" Name="Install" Type="raw" />
119 </Property>
120 </Fragment>
121
122 <!-- set to #1 if the .NET Framework 4.0 Client Danish language pack is installed (not set otherwise) -->
123 <Fragment>
124 <Property Id="NETFRAMEWORK40CLIENT_DA_DK_LANGPACK" Secure="yes">
125 <RegistrySearch Id="NETFRAMEWORK40CLIENTDaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1030" Name="Install" Type="raw" />
126 </Property>
127 </Fragment>
128
129 <!-- set to #1 if the .NET Framework 4.0 Client Dutch language pack is installed (not set otherwise) -->
130 <Fragment>
131 <Property Id="NETFRAMEWORK40CLIENT_NL_NL_LANGPACK" Secure="yes">
132 <RegistrySearch Id="NETFRAMEWORK40CLIENTNlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1043" Name="Install" Type="raw" />
133 </Property>
134 </Fragment>
135
136 <!-- set to #1 if the .NET Framework 4.0 Client Finnish language pack is installed (not set otherwise) -->
137 <Fragment>
138 <Property Id="NETFRAMEWORK40CLIENT_FI_FI_LANGPACK" Secure="yes">
139 <RegistrySearch Id="NETFRAMEWORK40CLIENTFiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1035" Name="Install" Type="raw" />
140 </Property>
141 </Fragment>
142
143 <!-- set to #1 if the .NET Framework 4.0 Client French language pack is installed (not set otherwise) -->
144 <Fragment>
145 <Property Id="NETFRAMEWORK40CLIENT_FR_FR_LANGPACK" Secure="yes">
146 <RegistrySearch Id="NETFRAMEWORK40CLIENTFrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1036" Name="Install" Type="raw" />
147 </Property>
148 </Fragment>
149
150 <!-- set to #1 if the .NET Framework 4.0 Client German language pack is installed (not set otherwise) -->
151 <Fragment>
152 <Property Id="NETFRAMEWORK40CLIENT_DE_DE_LANGPACK" Secure="yes">
153 <RegistrySearch Id="NETFRAMEWORK40CLIENTDeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1031" Name="Install" Type="raw" />
154 </Property>
155 </Fragment>
156
157 <!-- set to #1 if the .NET Framework 4.0 Client Greek language pack is installed (not set otherwise) -->
158 <Fragment>
159 <Property Id="NETFRAMEWORK40CLIENT_EL_GR_LANGPACK" Secure="yes">
160 <RegistrySearch Id="NETFRAMEWORK40CLIENTElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1032" Name="Install" Type="raw" />
161 </Property>
162 </Fragment>
163
164 <!-- set to #1 if the .NET Framework 4.0 Client Hebrew language pack is installed (not set otherwise) -->
165 <Fragment>
166 <Property Id="NETFRAMEWORK40CLIENT_HE_IL_LANGPACK" Secure="yes">
167 <RegistrySearch Id="NETFRAMEWORK40CLIENTHeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1037" Name="Install" Type="raw" />
168 </Property>
169 </Fragment>
170
171 <!-- set to #1 if the .NET Framework 4.0 Client Hungarian language pack is installed (not set otherwise) -->
172 <Fragment>
173 <Property Id="NETFRAMEWORK40CLIENT_HU_HU_LANGPACK" Secure="yes">
174 <RegistrySearch Id="NETFRAMEWORK40CLIENTHuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1038" Name="Install" Type="raw" />
175 </Property>
176 </Fragment>
177
178 <!-- set to #1 if the .NET Framework 4.0 Client Italian language pack is installed (not set otherwise) -->
179 <Fragment>
180 <Property Id="NETFRAMEWORK40CLIENT_IT_IT_LANGPACK" Secure="yes">
181 <RegistrySearch Id="NETFRAMEWORK40CLIENTItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1040" Name="Install" Type="raw" />
182 </Property>
183 </Fragment>
184
185 <!-- set to #1 if the .NET Framework 4.0 Client Japanese language pack is installed (not set otherwise) -->
186 <Fragment>
187 <Property Id="NETFRAMEWORK40CLIENT_JA_JP_LANGPACK" Secure="yes">
188 <RegistrySearch Id="NETFRAMEWORK40CLIENTJaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1041" Name="Install" Type="raw" />
189 </Property>
190 </Fragment>
191
192 <!-- set to #1 if the .NET Framework 4.0 Client Korean language pack is installed (not set otherwise) -->
193 <Fragment>
194 <Property Id="NETFRAMEWORK40CLIENT_KO_KR_LANGPACK" Secure="yes">
195 <RegistrySearch Id="NETFRAMEWORK40CLIENTKoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1042" Name="Install" Type="raw" />
196 </Property>
197 </Fragment>
198
199 <!-- set to #1 if the .NET Framework 4.0 Client Norwegian language pack is installed (not set otherwise) -->
200 <Fragment>
201 <Property Id="NETFRAMEWORK40CLIENT_NB_NO_LANGPACK" Secure="yes">
202 <RegistrySearch Id="NETFRAMEWORK40CLIENTNbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1044" Name="Install" Type="raw" />
203 </Property>
204 </Fragment>
205
206 <!-- set to #1 if the .NET Framework 4.0 Client Polish language pack is installed (not set otherwise) -->
207 <Fragment>
208 <Property Id="NETFRAMEWORK40CLIENT_PL_PL_LANGPACK" Secure="yes">
209 <RegistrySearch Id="NETFRAMEWORK40CLIENTPlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1045" Name="Install" Type="raw" />
210 </Property>
211 </Fragment>
212
213 <!-- set to #1 if the .NET Framework 4.0 Client Portuguese (Brazil) language pack is installed (not set otherwise) -->
214 <Fragment>
215 <Property Id="NETFRAMEWORK40CLIENT_PT_BR_LANGPACK" Secure="yes">
216 <RegistrySearch Id="NETFRAMEWORK40CLIENTPtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1046" Name="Install" Type="raw" />
217 </Property>
218 </Fragment>
219
220 <!-- set to #1 if the .NET Framework 4.0 Client Portuguese (Portugal) language pack is installed (not set otherwise) -->
221 <Fragment>
222 <Property Id="NETFRAMEWORK40CLIENT_PT_PT_LANGPACK" Secure="yes">
223 <RegistrySearch Id="NETFRAMEWORK40CLIENTPtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\2070" Name="Install" Type="raw" />
224 </Property>
225 </Fragment>
226
227 <!-- set to #1 if the .NET Framework 4.0 Client Russian language pack is installed (not set otherwise) -->
228 <Fragment>
229 <Property Id="NETFRAMEWORK40CLIENT_RU_RU_LANGPACK" Secure="yes">
230 <RegistrySearch Id="NETFRAMEWORK40CLIENTRuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1049" Name="Install" Type="raw" />
231 </Property>
232 </Fragment>
233
234 <!-- set to #1 if the .NET Framework 4.0 Client Spanish language pack is installed (not set otherwise) -->
235 <Fragment>
236 <Property Id="NETFRAMEWORK40CLIENT_ES_ES_LANGPACK" Secure="yes">
237 <RegistrySearch Id="NETFRAMEWORK40CLIENTEsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\3082" Name="Install" Type="raw" />
238 </Property>
239 </Fragment>
240
241 <!-- set to #1 if the .NET Framework 4.0 Client Swedish language pack is installed (not set otherwise) -->
242 <Fragment>
243 <Property Id="NETFRAMEWORK40CLIENT_SV_SE_LANGPACK" Secure="yes">
244 <RegistrySearch Id="NETFRAMEWORK40CLIENTSvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1053" Name="Install" Type="raw" />
245 </Property>
246 </Fragment>
247
248 <!-- set to #1 if the .NET Framework 4.0 Client Turkish language pack is installed (not set otherwise) -->
249 <Fragment>
250 <Property Id="NETFRAMEWORK40CLIENT_TR_TR_LANGPACK" Secure="yes">
251 <RegistrySearch Id="NETFRAMEWORK40CLIENTTrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Client\1055" Name="Install" Type="raw" />
252 </Property>
253 </Fragment>
254
255 <!-- set to #1 if the .NET Framework 4.0 Full Arabic language pack is installed (not set otherwise) -->
256 <Fragment>
257 <Property Id="NETFRAMEWORK40FULL_AR_SA_LANGPACK" Secure="yes">
258 <RegistrySearch Id="NETFRAMEWORK40FULLArSaLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1025" Name="Install" Type="raw" />
259 </Property>
260 </Fragment>
261
262 <!-- set to #1 if the .NET Framework 4.0 Full Chinese (Simplified) language pack is installed (not set otherwise) -->
263 <Fragment>
264 <Property Id="NETFRAMEWORK40FULL_ZH_CN_LANGPACK" Secure="yes">
265 <RegistrySearch Id="NETFRAMEWORK40FULLZhCnLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2052" Name="Install" Type="raw" />
266 </Property>
267 </Fragment>
268
269 <!-- set to #1 if the .NET Framework 4.0 Full Chinese (Traditional) language pack is installed (not set otherwise) -->
270 <Fragment>
271 <Property Id="NETFRAMEWORK40FULL_ZH_TW_LANGPACK" Secure="yes">
272 <RegistrySearch Id="NETFRAMEWORK40FULLZhTwLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1028" Name="Install" Type="raw" />
273 </Property>
274 </Fragment>
275
276 <!-- set to #1 if the .NET Framework 4.0 Full Czech language pack is installed (not set otherwise) -->
277 <Fragment>
278 <Property Id="NETFRAMEWORK40FULL_CS_CZ_LANGPACK" Secure="yes">
279 <RegistrySearch Id="NETFRAMEWORK40FULLCsCzLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1029" Name="Install" Type="raw" />
280 </Property>
281 </Fragment>
282
283 <!-- set to #1 if the .NET Framework 4.0 Full Danish language pack is installed (not set otherwise) -->
284 <Fragment>
285 <Property Id="NETFRAMEWORK40FULL_DA_DK_LANGPACK" Secure="yes">
286 <RegistrySearch Id="NETFRAMEWORK40FULLDaDkLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1030" Name="Install" Type="raw" />
287 </Property>
288 </Fragment>
289
290 <!-- set to #1 if the .NET Framework 4.0 Full Dutch language pack is installed (not set otherwise) -->
291 <Fragment>
292 <Property Id="NETFRAMEWORK40FULL_NL_NL_LANGPACK" Secure="yes">
293 <RegistrySearch Id="NETFRAMEWORK40FULLNlNlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1043" Name="Install" Type="raw" />
294 </Property>
295 </Fragment>
296
297 <!-- set to #1 if the .NET Framework 4.0 Full Finnish language pack is installed (not set otherwise) -->
298 <Fragment>
299 <Property Id="NETFRAMEWORK40FULL_FI_FI_LANGPACK" Secure="yes">
300 <RegistrySearch Id="NETFRAMEWORK40FULLFiFiLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1035" Name="Install" Type="raw" />
301 </Property>
302 </Fragment>
303
304 <!-- set to #1 if the .NET Framework 4.0 Full French language pack is installed (not set otherwise) -->
305 <Fragment>
306 <Property Id="NETFRAMEWORK40FULL_FR_FR_LANGPACK" Secure="yes">
307 <RegistrySearch Id="NETFRAMEWORK40FULLFrFrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1036" Name="Install" Type="raw" />
308 </Property>
309 </Fragment>
310
311 <!-- set to #1 if the .NET Framework 4.0 Full German language pack is installed (not set otherwise) -->
312 <Fragment>
313 <Property Id="NETFRAMEWORK40FULL_DE_DE_LANGPACK" Secure="yes">
314 <RegistrySearch Id="NETFRAMEWORK40FULLDeDeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1031" Name="Install" Type="raw" />
315 </Property>
316 </Fragment>
317
318 <!-- set to #1 if the .NET Framework 4.0 Full Greek language pack is installed (not set otherwise) -->
319 <Fragment>
320 <Property Id="NETFRAMEWORK40FULL_EL_GR_LANGPACK" Secure="yes">
321 <RegistrySearch Id="NETFRAMEWORK40FULLElGrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1032" Name="Install" Type="raw" />
322 </Property>
323 </Fragment>
324
325 <!-- set to #1 if the .NET Framework 4.0 Full Hebrew language pack is installed (not set otherwise) -->
326 <Fragment>
327 <Property Id="NETFRAMEWORK40FULL_HE_IL_LANGPACK" Secure="yes">
328 <RegistrySearch Id="NETFRAMEWORK40FULLHeIlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1037" Name="Install" Type="raw" />
329 </Property>
330 </Fragment>
331
332 <!-- set to #1 if the .NET Framework 4.0 Full Hungarian language pack is installed (not set otherwise) -->
333 <Fragment>
334 <Property Id="NETFRAMEWORK40FULL_HU_HU_LANGPACK" Secure="yes">
335 <RegistrySearch Id="NETFRAMEWORK40FULLHuHuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1038" Name="Install" Type="raw" />
336 </Property>
337 </Fragment>
338
339 <!-- set to #1 if the .NET Framework 4.0 Full Italian language pack is installed (not set otherwise) -->
340 <Fragment>
341 <Property Id="NETFRAMEWORK40FULL_IT_IT_LANGPACK" Secure="yes">
342 <RegistrySearch Id="NETFRAMEWORK40FULLItItLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1040" Name="Install" Type="raw" />
343 </Property>
344 </Fragment>
345
346 <!-- set to #1 if the .NET Framework 4.0 Full Japanese language pack is installed (not set otherwise) -->
347 <Fragment>
348 <Property Id="NETFRAMEWORK40FULL_JA_JP_LANGPACK" Secure="yes">
349 <RegistrySearch Id="NETFRAMEWORK40FULLJaJpLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1041" Name="Install" Type="raw" />
350 </Property>
351 </Fragment>
352
353 <!-- set to #1 if the .NET Framework 4.0 Full Korean language pack is installed (not set otherwise) -->
354 <Fragment>
355 <Property Id="NETFRAMEWORK40FULL_KO_KR_LANGPACK" Secure="yes">
356 <RegistrySearch Id="NETFRAMEWORK40FULLKoKrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1042" Name="Install" Type="raw" />
357 </Property>
358 </Fragment>
359
360 <!-- set to #1 if the .NET Framework 4.0 Full Norwegian language pack is installed (not set otherwise) -->
361 <Fragment>
362 <Property Id="NETFRAMEWORK40FULL_NB_NO_LANGPACK" Secure="yes">
363 <RegistrySearch Id="NETFRAMEWORK40FULLNbNoLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1044" Name="Install" Type="raw" />
364 </Property>
365 </Fragment>
366
367 <!-- set to #1 if the .NET Framework 4.0 Full Polish language pack is installed (not set otherwise) -->
368 <Fragment>
369 <Property Id="NETFRAMEWORK40FULL_PL_PL_LANGPACK" Secure="yes">
370 <RegistrySearch Id="NETFRAMEWORK40FULLPlPlLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1045" Name="Install" Type="raw" />
371 </Property>
372 </Fragment>
373
374 <!-- set to #1 if the .NET Framework 4.0 Full Portuguese (Brazil) language pack is installed (not set otherwise) -->
375 <Fragment>
376 <Property Id="NETFRAMEWORK40FULL_PT_BR_LANGPACK" Secure="yes">
377 <RegistrySearch Id="NETFRAMEWORK40FULLPtBrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1046" Name="Install" Type="raw" />
378 </Property>
379 </Fragment>
380
381 <!-- set to #1 if the .NET Framework 4.0 Full Portuguese (Portugal) language pack is installed (not set otherwise) -->
382 <Fragment>
383 <Property Id="NETFRAMEWORK40FULL_PT_PT_LANGPACK" Secure="yes">
384 <RegistrySearch Id="NETFRAMEWORK40FULLPtPtLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\2070" Name="Install" Type="raw" />
385 </Property>
386 </Fragment>
387
388 <!-- set to #1 if the .NET Framework 4.0 Full Russian language pack is installed (not set otherwise) -->
389 <Fragment>
390 <Property Id="NETFRAMEWORK40FULL_RU_RU_LANGPACK" Secure="yes">
391 <RegistrySearch Id="NETFRAMEWORK40FULLRuRuLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1049" Name="Install" Type="raw" />
392 </Property>
393 </Fragment>
394
395 <!-- set to #1 if the .NET Framework 4.0 Full Spanish language pack is installed (not set otherwise) -->
396 <Fragment>
397 <Property Id="NETFRAMEWORK40FULL_ES_ES_LANGPACK" Secure="yes">
398 <RegistrySearch Id="NETFRAMEWORK40FULLEsEsLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\3082" Name="Install" Type="raw" />
399 </Property>
400 </Fragment>
401
402 <!-- set to #1 if the .NET Framework 4.0 Full Swedish language pack is installed (not set otherwise) -->
403 <Fragment>
404 <Property Id="NETFRAMEWORK40FULL_SV_SE_LANGPACK" Secure="yes">
405 <RegistrySearch Id="NETFRAMEWORK40FULLSvSeLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1053" Name="Install" Type="raw" />
406 </Property>
407 </Fragment>
408
409 <!-- set to #1 if the .NET Framework 4.0 Full Turkish language pack is installed (not set otherwise) -->
410 <Fragment>
411 <Property Id="NETFRAMEWORK40FULL_TR_TR_LANGPACK" Secure="yes">
412 <RegistrySearch Id="NETFRAMEWORK40FULLTrTrLp" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full\1055" Name="Install" Type="raw" />
413 </Property>
414 </Fragment>
415
416</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx451.wxs b/src/ext/NetFx/wixlib/NetFx451.wxs
new file mode 100644
index 00000000..88363555
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx451.wxs
@@ -0,0 +1,26 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 4.5/4.5.1 - http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx, http://msdn.microsoft.com/en-us/library/ee942965(v=VS.110).aspx
12 -->
13
14 <?define NetFx451MinRelease = 378675 ?>
15 <?define NetFx451WebLink = http://go.microsoft.com/fwlink/?LinkId=322115 ?>
16 <?define NetFx451RedistLink = http://go.microsoft.com/fwlink/?LinkId=322116 ?>
17 <?define NetFx451EulaLink = http://wixtoolset.org/licenses/netfx451 ?>
18 <?define NetFx451WebId = NetFx451Web ?>
19 <?define NetFx451RedistId = NetFx451Redist ?>
20
21 <Fragment>
22 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
23 <Property Id="WIX_IS_NETFRAMEWORK_451_OR_LATER_INSTALLED" Secure="yes" />
24 <SetProperty Id="WIX_IS_NETFRAMEWORK_451_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx451MinRelease)&quot;" />
25 </Fragment>
26</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx452.wxs b/src/ext/NetFx/wixlib/NetFx452.wxs
new file mode 100644
index 00000000..33f79db4
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx452.wxs
@@ -0,0 +1,69 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <!--
6 .NET Framework installation state properties
7
8 Official documentation can be found at the following location:
9
10 .NET Framework 4.5/4.5.1/4.5.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
11 -->
12
13 <?define NetFx452MinRelease = 379893 ?>
14 <?define NetFx452WebLink = https://go.microsoft.com/fwlink/?LinkId=397707 ?>
15 <?define NetFx452RedistLink = https://go.microsoft.com/fwlink/?LinkId=397708 ?>
16 <?define NetFx452EulaLink = https://wixtoolset.org/licenses/netfx452 ?>
17 <?define NetFx452WebId = NetFx452Web ?>
18 <?define NetFx452RedistId = NetFx452Redist ?>
19
20 <Fragment>
21 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
22 <Property Id="WIX_IS_NETFRAMEWORK_452_OR_LATER_INSTALLED" Secure="yes" />
23 <SetProperty Id="WIX_IS_NETFRAMEWORK_452_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx452MinRelease)&quot;" />
24 </Fragment>
25
26 <Fragment>
27 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
28
29 <WixVariable Id="NetFx452WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx452MinRelease)" Overridable="yes" />
30 <WixVariable Id="NetFx452WebInstallCondition" Value="" Overridable="yes" />
31 <WixVariable Id="NetFx452WebPackageDirectory" Value="redist\" Overridable="yes" />
32
33 <PackageGroup Id="$(var.NetFx452WebId)">
34 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx452FullWebLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx452FullWebLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx452WebDetectCondition)" InstallCondition="!(wix.NetFx452WebInstallCondition)" Id="$(var.NetFx452WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx452FullWebLog">
35 <ExePackagePayload Name="!(wix.NetFx452WebPackageDirectory)NDP452-KB2901954-Web.exe" DownloadUrl="$(var.NetFx452WebLink)" Description="Microsoft .NET Framework 4.5.2 Setup" Hash="90A3A5A57EA8A6508EEE0D129303C7CB012AABF651DD9A6BEFC20DA3BBDB09FC47FD087645051D3D45BFF909DFC6E6039C22C4816FBC793A847E81701248639E" ProductName="Microsoft .NET Framework 4.5.2" Size="1118920" Version="4.5.51209.34209" />
36 </ExePackage>
37 </PackageGroup>
38 </Fragment>
39
40 <Fragment>
41 <PackageGroup Id="$(var.NetFx452WebId)AsPrereq">
42 <PackageGroupRef Id="$(var.NetFx452WebId)" />
43 </PackageGroup>
44
45 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx452WebId)" LicenseUrl="$(var.NetFx452EulaLink)" />
46 </Fragment>
47
48 <Fragment>
49 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
50
51 <WixVariable Id="NetFx452RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx452MinRelease)" Overridable="yes" />
52 <WixVariable Id="NetFx452RedistInstallCondition" Value="" Overridable="yes" />
53 <WixVariable Id="NetFx452RedistPackageDirectory" Value="redist\" Overridable="yes" />
54
55 <PackageGroup Id="$(var.NetFx452RedistId)">
56 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx452FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx452FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx452RedistDetectCondition)" InstallCondition="!(wix.NetFx452RedistInstallCondition)" Id="$(var.NetFx452RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx452FullLog">
57 <ExePackagePayload Name="!(wix.NetFx452RedistPackageDirectory)NDP452-KB2901907-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx452RedistLink)" Description="Microsoft .NET Framework 4.5.2 Setup" Hash="033D457229C4FE6EEA7B1E42A3A39DD4CF6A054C5E996CE036942DD2FE9623FD3A0634BE5DCB88506C1C61BF9FF6076F27B4ECEC38F8CF85603AF018111E584D" ProductName="Microsoft .NET Framework 4.5.2" Size="69999448" Version="4.5.51209.34209" />
58 </ExePackage>
59 </PackageGroup>
60 </Fragment>
61
62 <Fragment>
63 <PackageGroup Id="$(var.NetFx452RedistId)AsPrereq">
64 <PackageGroupRef Id="$(var.NetFx452RedistId)" />
65 </PackageGroup>
66
67 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx452RedistId)" LicenseUrl="$(var.NetFx452EulaLink)" />
68 </Fragment>
69</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx46.wxs b/src/ext/NetFx/wixlib/NetFx46.wxs
new file mode 100644
index 00000000..cb53be2e
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx46.wxs
@@ -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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
5
6 <!--
7 .NET Framework installation state properties
8
9 Official documentation can be found at the following location:
10
11 .NET Framework 4.5/4.5.1/4.5.2/4.6 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
12 -->
13
14 <?define NetFx46MinRelease = 393295 ?>
15 <?define NetFx46WebLink = https://go.microsoft.com/fwlink/?LinkId=560371 ?>
16 <?define NetFx46RedistLink = https://go.microsoft.com/fwlink/?LinkId=560369 ?>
17 <?define NetFx46EulaLink = https://go.microsoft.com/fwlink/?LinkID=558772 ?>
18 <?define NetFx46WebId = NetFx46Web ?>
19 <?define NetFx46RedistId = NetFx46Redist ?>
20
21 <Fragment>
22 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
23 <Property Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Secure="yes" />
24 <SetProperty Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx46MinRelease)&quot;" />
25 </Fragment>
26
27 <Fragment>
28 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
29
30 <WixVariable Id="NetFx46WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx46MinRelease)" Overridable="yes" />
31 <WixVariable Id="NetFx46WebInstallCondition" Value="" Overridable="yes" />
32 <WixVariable Id="NetFx46WebPackageDirectory" Value="redist\" Overridable="yes" />
33
34 <PackageGroup Id="$(var.NetFx46WebId)">
35 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx46FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx46FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx46WebDetectCondition)" InstallCondition="!(wix.NetFx46WebInstallCondition)" Id="$(var.NetFx46WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx46FullLog">
36 <ExePackagePayload Name="!(wix.NetFx46WebPackageDirectory)NDP46-KB3045560-Web.exe" DownloadUrl="$(var.NetFx46WebLink)" Description="Microsoft .NET Framework 4.6 Setup" Hash="CAA5F4D4DB0C9DF34252FCB74CF7762214F69D2419865EBC1E6717E6B1348E59A7599A8DECAAB5CEE6974E59D1AE5A749F8C4EC07C8E4C80C90E77B996B3B205" ProductName="Microsoft .NET Framework 4.6" Size="1497400" Version="4.6.81.0" />
37 </ExePackage>
38 </PackageGroup>
39 </Fragment>
40
41 <Fragment>
42 <PackageGroup Id="$(var.NetFx46WebId)AsPrereq">
43 <PackageGroupRef Id="$(var.NetFx46WebId)" />
44 </PackageGroup>
45
46 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx46WebId)" LicenseUrl="$(var.NetFx46EulaLink)" />
47 </Fragment>
48
49 <Fragment>
50 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
51
52 <WixVariable Id="NetFx46RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx46MinRelease)" Overridable="yes" />
53 <WixVariable Id="NetFx46RedistInstallCondition" Value="" Overridable="yes" />
54 <WixVariable Id="NetFx46RedistPackageDirectory" Value="redist\" Overridable="yes" />
55
56 <PackageGroup Id="$(var.NetFx46RedistId)">
57 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx46FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx46FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx46RedistDetectCondition)" InstallCondition="!(wix.NetFx46RedistInstallCondition)" Id="$(var.NetFx46RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx46FullLog">
58 <ExePackagePayload Name="!(wix.NetFx46RedistPackageDirectory)NDP46-KB3045557-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx46RedistLink)" Description="Microsoft .NET Framework 4.6 Setup" Hash="C6FC54F648F822515ADACB4C27E0A6DBD6A3EAF2BA3F069C0002750894ECC453EBED8BC8D4FF2AFD73C7B3445C1DA18D43FE361EA5195AE8522249DF36B84B7E" ProductName="Microsoft .NET Framework 4.6" Size="65444688" Version="4.6.81.0" />
59 </ExePackage>
60 </PackageGroup>
61 </Fragment>
62
63 <Fragment>
64 <PackageGroup Id="$(var.NetFx46RedistId)AsPrereq">
65 <PackageGroupRef Id="$(var.NetFx46RedistId)" />
66 </PackageGroup>
67
68 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx46RedistId)" LicenseUrl="$(var.NetFx46EulaLink)" />
69 </Fragment>
70</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx461.wxs b/src/ext/NetFx/wixlib/NetFx461.wxs
new file mode 100644
index 00000000..95cc2876
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx461.wxs
@@ -0,0 +1,69 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <!--
6 .NET Framework installation state properties
7
8 Official documentation can be found at the following location:
9
10 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
11 -->
12
13 <?define NetFx461MinRelease = 394254 ?>
14 <?define NetFx461WebLink = https://go.microsoft.com/fwlink/?LinkId=671728 ?>
15 <?define NetFx461RedistLink = https://go.microsoft.com/fwlink/?LinkId=671743 ?>
16 <?define NetFx461EulaLink = https://referencesource.microsoft.com/license.html ?>
17 <?define NetFx461WebId = NetFx461Web ?>
18 <?define NetFx461RedistId = NetFx461Redist ?>
19
20 <Fragment>
21 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
22 <Property Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Secure="yes" />
23 <SetProperty Id="WIX_IS_NETFRAMEWORK_461_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx461MinRelease)&quot;" />
24 </Fragment>
25
26 <Fragment>
27 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
28
29 <WixVariable Id="NetFx461WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx461MinRelease)" Overridable="yes" />
30 <WixVariable Id="NetFx461WebInstallCondition" Value="" Overridable="yes" />
31 <WixVariable Id="NetFx461WebPackageDirectory" Value="redist\" Overridable="yes" />
32
33 <PackageGroup Id="$(var.NetFx461WebId)">
34 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx461FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx461FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx461WebDetectCondition)" InstallCondition="!(wix.NetFx461WebInstallCondition)" Id="$(var.NetFx461WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx461FullLog">
35 <ExePackagePayload Name="!(wix.NetFx461WebPackageDirectory)NDP461-KB3102438-Web.exe" DownloadUrl="$(var.NetFx461WebLink)" Description="Microsoft .NET Framework 4.6.1 Setup" Hash="97C4DD638E2E0324D60BDD1D7BE85603EDBF969898469A524FB271EBA5E22B78CA67DB1F568F5C45393381F1E76408C366AD4A68A7BB00E23D1FB820E67DE99E" ProductName="Microsoft .NET Framework 4.6.1" Size="1424328" Version="4.6.1055.0" />
36 </ExePackage>
37 </PackageGroup>
38 </Fragment>
39
40 <Fragment>
41 <PackageGroup Id="$(var.NetFx461WebId)AsPrereq">
42 <PackageGroupRef Id="$(var.NetFx461WebId)" />
43 </PackageGroup>
44
45 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx461WebId)" LicenseUrl="$(var.NetFx461EulaLink)" />
46 </Fragment>
47
48 <Fragment>
49 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
50
51 <WixVariable Id="NetFx461RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx461MinRelease)" Overridable="yes" />
52 <WixVariable Id="NetFx461RedistInstallCondition" Value="" Overridable="yes" />
53 <WixVariable Id="NetFx461RedistPackageDirectory" Value="redist\" Overridable="yes" />
54
55 <PackageGroup Id="$(var.NetFx461RedistId)">
56 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx461FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx461FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx461RedistDetectCondition)" InstallCondition="!(wix.NetFx461RedistInstallCondition)" Id="$(var.NetFx461RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx461FullLog">
57 <ExePackagePayload Name="!(wix.NetFx461RedistPackageDirectory)NDP461-KB3102436-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx461RedistLink)" Description="Microsoft .NET Framework 4.6.1 Setup" Hash="43BEF5EB278CF0954EAE1A6FEEC5A9852B932270508DD10647B9EA32DFD3832ECB58172B28707216709705BF0013FCEBB0B39DB31E38786FC2DAE219622EA00F" ProductName="Microsoft .NET Framework 4.6.1" Size="67681000" Version="4.6.1055.0" />
58 </ExePackage>
59 </PackageGroup>
60 </Fragment>
61
62 <Fragment>
63 <PackageGroup Id="$(var.NetFx461RedistId)AsPrereq">
64 <PackageGroupRef Id="$(var.NetFx461RedistId)" />
65 </PackageGroup>
66
67 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx461RedistId)" LicenseUrl="$(var.NetFx461EulaLink)" />
68 </Fragment>
69</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx462.wxs b/src/ext/NetFx/wixlib/NetFx462.wxs
new file mode 100644
index 00000000..146bae5f
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx462.wxs
@@ -0,0 +1,69 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <!--
6 .NET Framework installation state properties
7
8 Official documentation can be found at the following location:
9
10 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
11 -->
12
13 <?define NetFx462MinRelease = 394802 ?>
14 <?define NetFx462WebLink = https://go.microsoft.com/fwlink/?LinkId=780596 ?>
15 <?define NetFx462RedistLink = https://go.microsoft.com/fwlink/?LinkId=780600 ?>
16 <?define NetFx462EulaLink = https://referencesource.microsoft.com/license.html ?>
17 <?define NetFx462WebId = NetFx462Web ?>
18 <?define NetFx462RedistId = NetFx462Redist ?>
19
20 <Fragment>
21 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
22 <Property Id="WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED" Secure="yes" />
23 <SetProperty Id="WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx462MinRelease)&quot;" />
24 </Fragment>
25
26 <Fragment>
27 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
28
29 <WixVariable Id="NetFx462WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx462MinRelease)" Overridable="yes" />
30 <WixVariable Id="NetFx462WebInstallCondition" Value="" Overridable="yes" />
31 <WixVariable Id="NetFx462WebPackageDirectory" Value="redist\" Overridable="yes" />
32
33 <PackageGroup Id="$(var.NetFx462WebId)">
34 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx462FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx462FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx462WebDetectCondition)" InstallCondition="!(wix.NetFx462WebInstallCondition)" Id="$(var.NetFx462WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog">
35 <ExePackagePayload Name="!(wix.NetFx462WebPackageDirectory)NDP462-KB3151802-Web.exe" DownloadUrl="$(var.NetFx462WebLink)" Description="Microsoft .NET Framework 4.6.2 Setup" Hash="72CC8904EA9AC4248874FD888E2C63737DFFF920E4002EB1426318EFD2650D1D5055DFC80C1F398278F7246A3827FC0ED3C044471C67A40CDE66D3796F854DCE" ProductName="Microsoft .NET Framework 4.6.2" Size="1408232" Version="4.6.1590.0" />
36 </ExePackage>
37 </PackageGroup>
38 </Fragment>
39
40 <Fragment>
41 <PackageGroup Id="$(var.NetFx462WebId)AsPrereq">
42 <PackageGroupRef Id="$(var.NetFx462WebId)" />
43 </PackageGroup>
44
45 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx462WebId)" LicenseUrl="$(var.NetFx462EulaLink)" />
46 </Fragment>
47
48 <Fragment>
49 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
50
51 <WixVariable Id="NetFx462RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx462MinRelease)" Overridable="yes" />
52 <WixVariable Id="NetFx462RedistInstallCondition" Value="" Overridable="yes" />
53 <WixVariable Id="NetFx462RedistPackageDirectory" Value="redist\" Overridable="yes" />
54
55 <PackageGroup Id="$(var.NetFx462RedistId)">
56 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx462FullLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx462FullLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx462RedistDetectCondition)" InstallCondition="!(wix.NetFx462RedistInstallCondition)" Id="$(var.NetFx462RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog">
57 <ExePackagePayload Name="!(wix.NetFx462RedistPackageDirectory)NDP462-KB3151800-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx462RedistLink)" Description="Microsoft .NET Framework 4.6.2 Setup" Hash="5EFE9C21F355B91D12CB6B328737E8D01B6A7F8F815C477F6971A2267381B943BE6245E4B0021376EBE91C794812E93C7D4108348D837B2866FD86475F012908" ProductName="Microsoft .NET Framework 4.6.2" Size="62005552" Version="4.6.1590.0" />
58 </ExePackage>
59 </PackageGroup>
60 </Fragment>
61
62 <Fragment>
63 <PackageGroup Id="$(var.NetFx462RedistId)AsPrereq">
64 <PackageGroupRef Id="$(var.NetFx462RedistId)" />
65 </PackageGroup>
66
67 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx462RedistId)" LicenseUrl="$(var.NetFx462EulaLink)" />
68 </Fragment>
69</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx47.wxs b/src/ext/NetFx/wixlib/NetFx47.wxs
new file mode 100644
index 00000000..84f4a221
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx47.wxs
@@ -0,0 +1,20 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
5 <!--
6 .NET Framework installation state properties
7
8 Official documentation can be found at the following location:
9
10 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
11 -->
12
13 <?define NetFx47MinRelease = 460798 ?>
14
15 <Fragment>
16 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
17 <Property Id="WIX_IS_NETFRAMEWORK_47_OR_LATER_INSTALLED" Secure="yes" />
18 <SetProperty Id="WIX_IS_NETFRAMEWORK_47_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx47MinRelease)&quot;" />
19 </Fragment>
20</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx471.wxs b/src/ext/NetFx/wixlib/NetFx471.wxs
new file mode 100644
index 00000000..b5f825ab
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx471.wxs
@@ -0,0 +1,20 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
4
5 <!--
6 .NET Framework installation state properties
7
8 Official documentation can be found at the following location:
9
10 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
11 -->
12
13 <?define NetFx471MinRelease = 461308 ?>
14
15 <Fragment>
16 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
17 <Property Id="WIX_IS_NETFRAMEWORK_471_OR_LATER_INSTALLED" Secure="yes" />
18 <SetProperty Id="WIX_IS_NETFRAMEWORK_471_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx471MinRelease)&quot;" />
19 </Fragment>
20</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx472.wxs b/src/ext/NetFx/wixlib/NetFx472.wxs
new file mode 100644
index 00000000..57584a9e
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx472.wxs
@@ -0,0 +1,67 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <!--
6 .NET Framework installation state properties
7 Official documentation can be found at the following location:
8 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2 - https://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
9 -->
10
11 <?define NetFx472MinRelease = 461808 ?>
12 <?define NetFx472WebLink = https://go.microsoft.com/fwlink/?LinkId=863262 ?>
13 <?define NetFx472RedistLink = https://go.microsoft.com/fwlink/?LinkId=863258 ?>
14 <?define NetFx472EulaLink = https://referencesource.microsoft.com/license.html ?>
15 <?define NetFx472WebId = NetFx472Web ?>
16 <?define NetFx472RedistId = NetFx472Redist ?>
17
18 <Fragment>
19 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
20 <Property Id="WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED" Secure="yes" />
21 <SetProperty Id="WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx472MinRelease)&quot;" />
22 </Fragment>
23
24 <Fragment>
25 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
26
27 <WixVariable Id="NetFx472WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx472MinRelease)" Overridable="yes" />
28 <WixVariable Id="NetFx472WebInstallCondition" Value="" Overridable="yes" />
29 <WixVariable Id="NetFx472WebPackageDirectory" Value="redist\" Overridable="yes" />
30
31 <PackageGroup Id="$(var.NetFx472WebId)">
32 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx472WebLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx472WebLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx472WebDetectCondition)" InstallCondition="!(wix.NetFx472WebInstallCondition)" Id="$(var.NetFx472WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472WebLog">
33 <ExePackagePayload Name="!(wix.NetFx472WebPackageDirectory)NDP472-KB4054531-Web.exe" DownloadUrl="$(var.NetFx472WebLink)" Description="Microsoft .NET Framework 4.7.2 Setup" Hash="213CDEE35D320FE126CB64FE59963DB355062A14592E0B2FC4D45C2EDEF5F6A91305D0674D27152869202E3440090DFC207A0C5EB14D812F61E437907A81887E" ProductName="Microsoft .NET Framework 4.7.2" Size="1399888" Version="4.7.3081.0" />
34 </ExePackage>
35 </PackageGroup>
36 </Fragment>
37
38 <Fragment>
39 <PackageGroup Id="$(var.NetFx472WebId)AsPrereq">
40 <PackageGroupRef Id="$(var.NetFx472WebId)" />
41 </PackageGroup>
42
43 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx472WebId)" LicenseUrl="$(var.NetFx472EulaLink)" />
44 </Fragment>
45
46 <Fragment>
47 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
48
49 <WixVariable Id="NetFx472RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx472MinRelease)" Overridable="yes" />
50 <WixVariable Id="NetFx472RedistInstallCondition" Value="" Overridable="yes" />
51 <WixVariable Id="NetFx472RedistPackageDirectory" Value="redist\" Overridable="yes" />
52
53 <PackageGroup Id="$(var.NetFx472RedistId)">
54 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx472RedistLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx472RedistLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx472RedistDetectCondition)" InstallCondition="!(wix.NetFx472RedistInstallCondition)" Id="$(var.NetFx472RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472RedistLog">
55 <ExePackagePayload Name="!(wix.NetFx472RedistPackageDirectory)NDP472-KB4054530-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx472RedistLink)" Description="Microsoft .NET Framework 4.7.2 Setup" Hash="F4EA32D8189DD269FF02D68B39D7DE866AE5F46EEA5A71BF8F4715FB0E4F8B7AC64B274DFA7BFF69B52C719E65256906C8D92FDD355F52C977175AE3E1919098" ProductName="Microsoft .NET Framework 4.7.2" Size="83940592" Version="4.7.3081.0" />
56 </ExePackage>
57 </PackageGroup>
58 </Fragment>
59
60 <Fragment>
61 <PackageGroup Id="$(var.NetFx472RedistId)AsPrereq">
62 <PackageGroupRef Id="$(var.NetFx472RedistId)" />
63 </PackageGroup>
64
65 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx472RedistId)" LicenseUrl="$(var.NetFx472EulaLink)" />
66 </Fragment>
67</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFx48.wxs b/src/ext/NetFx/wixlib/NetFx48.wxs
new file mode 100644
index 00000000..bfca5092
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFx48.wxs
@@ -0,0 +1,67 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4
5 <!--
6 .NET Framework installation state properties
7 Official documentation can be found at the following location:
8 .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8 - https://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx
9 -->
10
11 <?define NetFx48MinRelease = 528040 ?>
12 <?define NetFx48WebLink = https://go.microsoft.com/fwlink/?LinkId=2085155 ?>
13 <?define NetFx48RedistLink = https://go.microsoft.com/fwlink/?linkid=2088631 ?>
14 <?define NetFx48EulaLink = https://referencesource.microsoft.com/license.html ?>
15 <?define NetFx48WebId = NetFx48Web ?>
16 <?define NetFx48RedistId = NetFx48Redist ?>
17
18 <Fragment>
19 <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
20 <Property Id="WIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED" Secure="yes" />
21 <SetProperty Id="WIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED" Value="1" After="AppSearch" Condition="WIXNETFX4RELEASEINSTALLED &gt;= &quot;#$(var.NetFx48MinRelease)&quot;" />
22 </Fragment>
23
24 <Fragment>
25 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
26
27 <WixVariable Id="NetFx48WebDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx48MinRelease)" Overridable="yes" />
28 <WixVariable Id="NetFx48WebInstallCondition" Value="" Overridable="yes" />
29 <WixVariable Id="NetFx48WebPackageDirectory" Value="redist\" Overridable="yes" />
30
31 <PackageGroup Id="$(var.NetFx48WebId)">
32 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx48WebLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx48WebLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx48WebDetectCondition)" InstallCondition="!(wix.NetFx48WebInstallCondition)" Id="$(var.NetFx48WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48WebLog">
33 <ExePackagePayload Name="!(wix.NetFx48WebPackageDirectory)ndp48-web.exe" DownloadUrl="$(var.NetFx48WebLink)" Description="Microsoft .NET Framework 4.8 Setup" Hash="B09A3F6802741BD5E4A9598FF3F890FEB760D865C98F33B3CF6951C3ADE396C9819D6ECA562CAD6C339C53FC1AF88F7936DD09CBBAC22EE16FC67BAE076646B6" ProductName="Microsoft .NET Framework 4.8" Size="1443272" Version="4.8.4115.0" />
34 </ExePackage>
35 </PackageGroup>
36 </Fragment>
37
38 <Fragment>
39 <PackageGroup Id="$(var.NetFx48WebId)AsPrereq">
40 <PackageGroupRef Id="$(var.NetFx48WebId)" />
41 </PackageGroup>
42
43 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx48WebId)" LicenseUrl="$(var.NetFx48EulaLink)" />
44 </Fragment>
45
46 <Fragment>
47 <util:RegistrySearchRef Id="NETFRAMEWORK45" />
48
49 <WixVariable Id="NetFx48RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx48MinRelease)" Overridable="yes" />
50 <WixVariable Id="NetFx48RedistInstallCondition" Value="" Overridable="yes" />
51 <WixVariable Id="NetFx48RedistPackageDirectory" Value="redist\" Overridable="yes" />
52
53 <PackageGroup Id="$(var.NetFx48RedistId)">
54 <ExePackage InstallArguments="/q /norestart /log &quot;[NetFx48RedistLog].html&quot;" UninstallArguments="/uninstall /q /norestart /log &quot;[NetFx48RedistLog].html&quot;" PerMachine="yes" DetectCondition="!(wix.NetFx48RedistDetectCondition)" InstallCondition="!(wix.NetFx48RedistInstallCondition)" Id="$(var.NetFx48RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48RedistLog">
55 <ExePackagePayload Name="!(wix.NetFx48RedistPackageDirectory)ndp48-x86-x64-allos-enu.exe" DownloadUrl="$(var.NetFx48RedistLink)" Description="Microsoft .NET Framework 4.8 Setup" Hash="DE7FD1B245BAAAC3A2BA1C2C650492AB71EB689902E281DDA02B069A441BAF9B1CF067D596C2E67C27EB58C341F572D8E7D481EC5D6E3A4CFB8D0C9AA7B55181" ProductName="Microsoft .NET Framework 4.8" Size="121319368" Version="4.8.4115.0" />
56 </ExePackage>
57 </PackageGroup>
58 </Fragment>
59
60 <Fragment>
61 <PackageGroup Id="$(var.NetFx48RedistId)AsPrereq">
62 <PackageGroupRef Id="$(var.NetFx48RedistId)" />
63 </PackageGroup>
64
65 <bal:ManagedBootstrapperApplicationPrereqInformation PackageId="$(var.NetFx48RedistId)" LicenseUrl="$(var.NetFx48EulaLink)" />
66 </Fragment>
67</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFxExtension.wxs b/src/ext/NetFx/wixlib/NetFxExtension.wxs
new file mode 100644
index 00000000..63c79235
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFxExtension.wxs
@@ -0,0 +1,38 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <!--
7 .NET Framework installation state properties
8 -->
9
10 <!-- Location of .NET Framework redistributable install root directory -->
11 <Fragment>
12 <Property Id="NETFRAMEWORKINSTALLROOTDIR" Secure="yes">
13 <RegistrySearch Id="NetFxInstallRootSearch" Type="raw" Root="HKLM" Key="Software\Microsoft\.NETFramework" Name="InstallRoot" />
14 </Property>
15 </Fragment>
16
17 <!-- location of the Windows SDK current active version installation root -->
18 <Fragment>
19 <Property Id="WINDOWSSDKCURRENTVERSIONDIR" Secure="yes">
20 <RegistrySearch Id="WindowsSdkCurrentVersionDir" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows" Name="CurrentInstallFolder" Type="raw" />
21 </Property>
22 </Fragment>
23
24 <!-- The Windows SDK current active version -->
25 <Fragment>
26 <Property Id="WINDOWSSDKCURRENTVERSION" Secure="yes">
27 <RegistrySearch Id="WindowsSdkCurrentVersion" Root="HKLM" Key="Software\Microsoft\Microsoft SDKs\Windows" Name="CurrentVersion" Type="raw" />
28 </Property>
29 </Fragment>
30
31 <!-- Release value of .NET 4.5 and later -->
32 <Fragment>
33 <Property Id="WIXNETFX4RELEASEINSTALLED" Secure="yes">
34 <RegistrySearch Id="NetFx4ReleaseInstalled" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Name="Release" Type="raw" />
35 </Property>
36 </Fragment>
37
38</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFxExtension_Platform.wxi b/src/ext/NetFx/wixlib/NetFxExtension_Platform.wxi
new file mode 100644
index 00000000..7bd727c5
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFxExtension_Platform.wxi
@@ -0,0 +1,28 @@
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
4<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5
6 <?include caDecor.wxi ?>
7
8 <Fragment>
9 <CustomAction Id="$(var.Prefix)NetFxScheduleNativeImage$(var.Suffix)" DllEntry="SchedNetFx" Execute="immediate" Return="check" SuppressModularization="yes" BinaryRef="$(var.Prefix)NetFxCA$(var.Suffix)" />
10 <CustomAction Id="$(var.Prefix)NetFxExecuteNativeImageInstall$(var.Suffix)" DllEntry="ExecNetFx" Execute="deferred" Impersonate="no" Return="ignore" SuppressModularization="yes" BinaryRef="$(var.Prefix)NetFxCA$(var.Suffix)" />
11 <CustomAction Id="$(var.Prefix)NetFxExecuteNativeImageCommitInstall$(var.Suffix)" DllEntry="ExecNetFx" Execute="commit" Impersonate="no" Return="ignore" SuppressModularization="yes" BinaryRef="$(var.Prefix)NetFxCA$(var.Suffix)" />
12 <CustomAction Id="$(var.Prefix)NetFxExecuteNativeImageUninstall$(var.Suffix)" DllEntry="ExecNetFx" Execute="deferred" Impersonate="no" Return="ignore" SuppressModularization="yes" BinaryRef="$(var.Prefix)NetFxCA$(var.Suffix)" />
13 <CustomAction Id="$(var.Prefix)NetFxExecuteNativeImageCommitUninstall$(var.Suffix)" DllEntry="ExecNetFx" Execute="commit" Impersonate="no" Return="ignore" SuppressModularization="yes" BinaryRef="$(var.Prefix)NetFxCA$(var.Suffix)" />
14
15 <InstallExecuteSequence>
16 <Custom Action="$(var.Prefix)NetFxScheduleNativeImage$(var.Suffix)" Before="InstallFiles" Overridable="yes" />
17 <Custom Action="$(var.Prefix)NetFxExecuteNativeImageCommitUninstall$(var.Suffix)" After="MsiPublishAssemblies" Overridable="yes" Condition="RollbackDisabled &lt;&gt; 1" />
18 <Custom Action="$(var.Prefix)NetFxExecuteNativeImageUninstall$(var.Suffix)" After="$(var.Prefix)NetFxExecuteNativeImageCommitUninstall$(var.Suffix)" Overridable="yes" Condition="RollbackDisabled = 1" />
19 <Custom Action="$(var.Prefix)NetFxExecuteNativeImageCommitInstall$(var.Suffix)" After="$(var.Prefix)NetFxExecuteNativeImageUninstall$(var.Suffix)" Overridable="yes" Condition="RollbackDisabled &lt;&gt; 1" />
20 <Custom Action="$(var.Prefix)NetFxExecuteNativeImageInstall$(var.Suffix)" After="$(var.Prefix)NetFxExecuteNativeImageCommitInstall$(var.Suffix)" Overridable="yes" Condition="RollbackDisabled = 1" />
21 </InstallExecuteSequence>
22 </Fragment>
23
24 <!-- NetFx Custom Action DLL Definitions -->
25 <Fragment>
26 <Binary Id="$(var.Prefix)NetFxCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))netfxca.dll" />
27 </Fragment>
28</Include>
diff --git a/src/ext/NetFx/wixlib/NetFxExtension_arm64.wxs b/src/ext/NetFx/wixlib/NetFxExtension_arm64.wxs
new file mode 100644
index 00000000..a0492fde
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFxExtension_arm64.wxs
@@ -0,0 +1,7 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?define platform=arm64 ?>
6 <?include NetfxExtension_Platform.wxi ?>
7</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFxExtension_x64.wxs b/src/ext/NetFx/wixlib/NetFxExtension_x64.wxs
new file mode 100644
index 00000000..81c9d768
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFxExtension_x64.wxs
@@ -0,0 +1,7 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?define platform=x64 ?>
6 <?include NetfxExtension_Platform.wxi ?>
7</Wix>
diff --git a/src/ext/NetFx/wixlib/NetFxExtension_x86.wxs b/src/ext/NetFx/wixlib/NetFxExtension_x86.wxs
new file mode 100644
index 00000000..b8ad1927
--- /dev/null
+++ b/src/ext/NetFx/wixlib/NetFxExtension_x86.wxs
@@ -0,0 +1,7 @@
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
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?define platform=x86 ?>
6 <?include NetfxExtension_Platform.wxi ?>
7</Wix>
diff --git a/src/ext/NetFx/wixlib/caDecor.wxi b/src/ext/NetFx/wixlib/caDecor.wxi
new file mode 100644
index 00000000..b1711518
--- /dev/null
+++ b/src/ext/NetFx/wixlib/caDecor.wxi
@@ -0,0 +1,39 @@
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
4<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?ifdef Prefix ?>
6 <?undef Prefix ?>
7 <?endif?>
8
9 <?define Prefix="Wix4" ?>
10
11 <?ifndef platform ?>
12 <?define platform="x86" ?>
13 <?endif?>
14
15 <?if $(var.platform)="" ?>
16 <?undef platform ?>
17 <?define platform="x86" ?>
18 <?endif?>
19
20 <?ifdef Suffix ?>
21 <?undef Suffix ?>
22 <?endif?>
23
24 <?if $(var.platform)~="x86" ?>
25 <?define Suffix="_X86" ?>
26 <?endif?>
27
28 <?if $(var.platform)~="x64" ?>
29 <?define Suffix="_X64" ?>
30 <?endif?>
31
32 <?if $(var.platform)~="arm" ?>
33 <?define Suffix="_A32" ?>
34 <?endif?>
35
36 <?if $(var.platform)~="arm64" ?>
37 <?define Suffix="_A64" ?>
38 <?endif?>
39</Include>
diff --git a/src/ext/NetFx/wixlib/netfx.v3.ncrunchproject b/src/ext/NetFx/wixlib/netfx.v3.ncrunchproject
new file mode 100644
index 00000000..319cd523
--- /dev/null
+++ b/src/ext/NetFx/wixlib/netfx.v3.ncrunchproject
@@ -0,0 +1,5 @@
1<ProjectConfiguration>
2 <Settings>
3 <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
4 </Settings>
5</ProjectConfiguration> \ No newline at end of file
diff --git a/src/ext/NetFx/wixlib/netfx.wixproj b/src/ext/NetFx/wixlib/netfx.wixproj
new file mode 100644
index 00000000..937ed0d4
--- /dev/null
+++ b/src/ext/NetFx/wixlib/netfx.wixproj
@@ -0,0 +1,32 @@
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<Project Sdk="WixToolset.Sdk">
5
6 <PropertyGroup>
7 <OutputType>Library</OutputType>
8 <BindFiles>true</BindFiles>
9 </PropertyGroup>
10
11 <ItemGroup>
12 <BindInputPaths Include="$(OutputPath)x86" BindName='x86' />
13 <BindInputPaths Include="$(OutputPath)x64" BindName='x64' />
14 <BindInputPaths Include="$(OutputPath)arm64" BindName='arm64' />
15 </ItemGroup>
16
17 <ItemGroup>
18 <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=ARM64" ReferenceOutputAssembly="false" />
19 <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x86" ReferenceOutputAssembly="false" />
20 <ProjectReference Include="..\ca\netfxca.vcxproj" Properties="Platform=x64" ReferenceOutputAssembly="false" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.*" />
25 <PackageReference Include="WixToolset.Util.wixext" Version="4.0.*" />
26 </ItemGroup>
27
28 <ItemGroup>
29 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="All" />
30 </ItemGroup>
31
32</Project>