aboutsummaryrefslogtreecommitdiff
path: root/src/ext
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-05-04 22:50:56 -0700
committerRob Mensching <rob@firegiant.com>2021-05-04 22:50:56 -0700
commita8a1e0d6f99c2b902a8f81d3d7f3503c506e8171 (patch)
treef003003bf293bb5f2a2db368acfd98639d315d44 /src/ext
parente137eef6a20999a37a137414b8c8b9a8f5af3cd4 (diff)
downloadwix-a8a1e0d6f99c2b902a8f81d3d7f3503c506e8171.tar.gz
wix-a8a1e0d6f99c2b902a8f81d3d7f3503c506e8171.tar.bz2
wix-a8a1e0d6f99c2b902a8f81d3d7f3503c506e8171.zip
Move VisualStudio.wixext into ext
Diffstat (limited to 'src/ext')
-rw-r--r--src/ext/VisualStudio/CSharp.Build.props11
-rw-r--r--src/ext/VisualStudio/Cpp.Build.props86
-rw-r--r--src/ext/VisualStudio/Directory.Build.props27
-rw-r--r--src/ext/VisualStudio/Directory.Build.targets51
-rw-r--r--src/ext/VisualStudio/Directory.csproj.props13
-rw-r--r--src/ext/VisualStudio/Directory.csproj.targets26
-rw-r--r--src/ext/VisualStudio/Directory.vcxproj.props111
-rw-r--r--src/ext/VisualStudio/README.md2
-rw-r--r--src/ext/VisualStudio/VisualStudio.wixext.sln73
-rw-r--r--src/ext/VisualStudio/appveyor.cmd19
-rw-r--r--src/ext/VisualStudio/appveyor.yml42
-rw-r--r--src/ext/VisualStudio/ca/dllmain.cpp26
-rw-r--r--src/ext/VisualStudio/ca/precomp.h13
-rw-r--r--src/ext/VisualStudio/ca/vsca.cpp510
-rw-r--r--src/ext/VisualStudio/ca/vsca.def7
-rw-r--r--src/ext/VisualStudio/ca/vsca.vcxproj58
-rw-r--r--src/ext/VisualStudio/nuget.config17
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.en-us.wxl11
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs17
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/PackageComponents.wxs14
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/example.txt1
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs45
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj38
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.v3.ncrunchproject5
-rw-r--r--src/ext/VisualStudio/wix.snkbin0 -> 596 bytes
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpFileSymbol.cs95
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpFileToNamespaceSymbol.cs55
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpFilterSymbol.cs55
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpFilterToNamespaceSymbol.cs55
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpNamespaceSymbol.cs63
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/HelpPluginSymbol.cs79
-rw-r--r--src/ext/VisualStudio/wixext/Symbols/VSSymbolDefinitions.cs59
-rw-r--r--src/ext/VisualStudio/wixext/VSCompiler.cs828
-rw-r--r--src/ext/VisualStudio/wixext/VSDecompiler.cs298
-rw-r--r--src/ext/VisualStudio/wixext/VSExtensionData.cs27
-rw-r--r--src/ext/VisualStudio/wixext/VSExtensionFactory.cs18
-rw-r--r--src/ext/VisualStudio/wixext/VSTableDefinitions.cs97
-rw-r--r--src/ext/VisualStudio/wixext/VSWindowsInstallerBackendBinderExtension.cs13
-rw-r--r--src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.csproj30
-rw-r--r--src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.nuspec23
-rw-r--r--src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.targets8
-rw-r--r--src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.v3.ncrunchproject7
-rw-r--r--src/ext/VisualStudio/wixlib/HTML_Help_Registration__RTL_X86.wxs67
-rw-r--r--src/ext/VisualStudio/wixlib/Redist/BIN_File_107602.dllbin0 -> 866816 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/Redist/BIN_File_46001.dllbin0 -> 129536 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/Redist/BIN_File_46002.dllbin0 -> 108544 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/VS11.wxs205
-rw-r--r--src/ext/VisualStudio/wixlib/VS14.wxs186
-rw-r--r--src/ext/VisualStudio/wixlib/VS2003.wxs27
-rw-r--r--src/ext/VisualStudio/wixlib/VS2005.wxs369
-rw-r--r--src/ext/VisualStudio/wixlib/VS2008.wxs299
-rw-r--r--src/ext/VisualStudio/wixlib/VS2010.wxs312
-rw-r--r--src/ext/VisualStudio/wixlib/VS2012.wxs255
-rw-r--r--src/ext/VisualStudio/wixlib/VS2013.wxs252
-rw-r--r--src/ext/VisualStudio/wixlib/VS2015.wxs186
-rw-r--r--src/ext/VisualStudio/wixlib/VS2017.wxs142
-rw-r--r--src/ext/VisualStudio/wixlib/VS2019.wxs142
-rw-r--r--src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi17
-rw-r--r--src/ext/VisualStudio/wixlib/VSExtension_x86.wxs8
-rw-r--r--src/ext/VisualStudio/wixlib/VsixPackage.wxs60
-rw-r--r--src/ext/VisualStudio/wixlib/caSuffix.wxi28
-rw-r--r--src/ext/VisualStudio/wixlib/vs.v3.ncrunchproject5
-rw-r--r--src/ext/VisualStudio/wixlib/vs.wixproj19
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs63
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/BIN_File_60377.dllbin0 -> 45056 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipCCSamples.HxK14
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxc33
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxt15
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccALinks.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccBLinks.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccFLinks.hxk14
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccKLinks.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccNamedURLs.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipccSlinks.hxk14
-rw-r--r--src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc_reg.hxsbin0 -> 18400 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs60
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/BIN_435439_x86_enu.dllbin0 -> 103944 bytes
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_ALinks.hxk10
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_BLinks.hxk10
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_CLinks.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_FLinks.hxk10
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_KLinks.hxk10
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_SLinks.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxc33
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxt15
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk13
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_samples.HxK14
-rw-r--r--src/ext/VisualStudio/wixlib/vs2008/redist/vsipcc_reg.hxsbin0 -> 18488 bytes
-rw-r--r--src/ext/global.json5
89 files changed, 6023 insertions, 0 deletions
diff --git a/src/ext/VisualStudio/CSharp.Build.props b/src/ext/VisualStudio/CSharp.Build.props
new file mode 100644
index 00000000..b12f4c6e
--- /dev/null
+++ b/src/ext/VisualStudio/CSharp.Build.props
@@ -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 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 <SignAssembly>true</SignAssembly>
9 <AssemblyOriginatorKeyFile>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)wix.snk))</AssemblyOriginatorKeyFile>
10 </PropertyGroup>
11</Project>
diff --git a/src/ext/VisualStudio/Cpp.Build.props b/src/ext/VisualStudio/Cpp.Build.props
new file mode 100644
index 00000000..9b7a1bb5
--- /dev/null
+++ b/src/ext/VisualStudio/Cpp.Build.props
@@ -0,0 +1,86 @@
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 </PropertyGroup>
10
11 <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' AND '$(VisualStudioVersion)'>='15.0'">
12 <WindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
13 </PropertyGroup>
14
15 <ItemDefinitionGroup>
16 <ClCompile>
17 <DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
18 <WarningLevel>Level4</WarningLevel>
19 <AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
20 <PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
21 <PrecompiledHeader>Use</PrecompiledHeader>
22 <PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
23 <CallingConvention Condition="'$(Platform)'=='Win32'">StdCall</CallingConvention>
24 <TreatWarningAsError>true</TreatWarningAsError>
25 <ExceptionHandling>false</ExceptionHandling>
26 <AdditionalOptions>-YlprecompDefine</AdditionalOptions>
27 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
28 <MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) &gt; 4 ">true</MultiProcessorCompilation>
29 </ClCompile>
30 <ResourceCompile>
31 <PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
32 <AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
33 </ResourceCompile>
34 <Lib>
35 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
36 </Lib>
37 <Link>
38 <SubSystem>$(ProjectSubSystem)</SubSystem>
39 <ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
40 <NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
41 <GenerateDebugInformation>true</GenerateDebugInformation>
42 <AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
43 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
44 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
45 </Link>
46 </ItemDefinitionGroup>
47
48 <ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
49 <ClCompile>
50 <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
51 </ClCompile>
52 </ItemDefinitionGroup>
53 <ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
54 <ClCompile>
55 <CallingConvention>CDecl</CallingConvention>
56 </ClCompile>
57 </ItemDefinitionGroup>
58 <ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
59 <ClCompile>
60 <DebugInformationFormat>OldStyle</DebugInformationFormat>
61 <OmitDefaultLibName>true</OmitDefaultLibName>
62 <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
63 </ClCompile>
64 </ItemDefinitionGroup>
65 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
66 <ClCompile>
67 <Optimization>Disabled</Optimization>
68 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
69 <PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
70 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
71 </ClCompile>
72 </ItemDefinitionGroup>
73 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
74 <ClCompile>
75 <Optimization>MinSpace</Optimization>
76 <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
77 <FunctionLevelLinking>true</FunctionLevelLinking>
78 <IntrinsicFunctions>true</IntrinsicFunctions>
79 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
80 </ClCompile>
81 <Link>
82 <EnableCOMDATFolding>true</EnableCOMDATFolding>
83 <OptimizeReferences>true</OptimizeReferences>
84 </Link>
85 </ItemDefinitionGroup>
86</Project>
diff --git a/src/ext/VisualStudio/Directory.Build.props b/src/ext/VisualStudio/Directory.Build.props
new file mode 100644
index 00000000..b3c6287c
--- /dev/null
+++ b/src/ext/VisualStudio/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/VisualStudio/Directory.Build.targets b/src/ext/VisualStudio/Directory.Build.targets
new file mode 100644
index 00000000..2fcc765a
--- /dev/null
+++ b/src/ext/VisualStudio/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/VisualStudio/Directory.csproj.props b/src/ext/VisualStudio/Directory.csproj.props
new file mode 100644
index 00000000..81d24ad1
--- /dev/null
+++ b/src/ext/VisualStudio/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/VisualStudio/Directory.csproj.targets b/src/ext/VisualStudio/Directory.csproj.targets
new file mode 100644
index 00000000..c3270426
--- /dev/null
+++ b/src/ext/VisualStudio/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/VisualStudio/Directory.vcxproj.props b/src/ext/VisualStudio/Directory.vcxproj.props
new file mode 100644
index 00000000..bcf26c57
--- /dev/null
+++ b/src/ext/VisualStudio/Directory.vcxproj.props
@@ -0,0 +1,111 @@
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 <ItemDefinitionGroup>
23 <ClCompile>
24 <DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
25 <WarningLevel>Level4</WarningLevel>
26 <AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
27 <PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
28 <PrecompiledHeader>Use</PrecompiledHeader>
29 <PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
30 <CallingConvention Condition="'$(Platform)'=='Win32'">StdCall</CallingConvention>
31 <TreatWarningAsError>true</TreatWarningAsError>
32 <ExceptionHandling>false</ExceptionHandling>
33 <AdditionalOptions>-YlprecompDefine</AdditionalOptions>
34 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
35 <MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) &gt; 4 ">true</MultiProcessorCompilation>
36 </ClCompile>
37 <ResourceCompile>
38 <PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
39 <AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
40 </ResourceCompile>
41 <Lib>
42 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
43 </Lib>
44 <Link>
45 <SubSystem>$(ProjectSubSystem)</SubSystem>
46 <ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
47 <NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
48 <GenerateDebugInformation>true</GenerateDebugInformation>
49 <AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
50 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
51 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
52 </Link>
53 </ItemDefinitionGroup>
54
55 <ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
56 <ClCompile>
57 <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
58 </ClCompile>
59 </ItemDefinitionGroup>
60 <ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
61 <ClCompile>
62 <CallingConvention>CDecl</CallingConvention>
63 </ClCompile>
64 </ItemDefinitionGroup>
65 <ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
66 <ClCompile>
67 <DebugInformationFormat>OldStyle</DebugInformationFormat>
68 <OmitDefaultLibName>true</OmitDefaultLibName>
69 <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
70 </ClCompile>
71 </ItemDefinitionGroup>
72 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
73 <ClCompile>
74 <Optimization>Disabled</Optimization>
75 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
76 <PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
77 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
78 </ClCompile>
79 </ItemDefinitionGroup>
80 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' and '$(CLRSupport)'=='true' ">
81 <ClCompile>
82 <BasicRuntimeChecks></BasicRuntimeChecks>
83 <RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
84 </ClCompile>
85 </ItemDefinitionGroup>
86 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
87 <ClCompile>
88 <Optimization>MinSpace</Optimization>
89 <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
90 <FunctionLevelLinking>true</FunctionLevelLinking>
91 <IntrinsicFunctions>true</IntrinsicFunctions>
92 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
93 </ClCompile>
94 <Link>
95 <EnableCOMDATFolding>true</EnableCOMDATFolding>
96 <OptimizeReferences>true</OptimizeReferences>
97 </Link>
98 </ItemDefinitionGroup>
99 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' and '$(CLRSupport)'=='true' ">
100 <ClCompile>
101 <BasicRuntimeChecks></BasicRuntimeChecks>
102 <RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
103 </ClCompile>
104 </ItemDefinitionGroup>
105 <ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
106 <Link>
107 <KeyFile>$(LinkKeyFile)</KeyFile>
108 <DelaySign>$(LinkDelaySign)</DelaySign>
109 </Link>
110 </ItemDefinitionGroup>
111</Project>
diff --git a/src/ext/VisualStudio/README.md b/src/ext/VisualStudio/README.md
new file mode 100644
index 00000000..76fbd4ce
--- /dev/null
+++ b/src/ext/VisualStudio/README.md
@@ -0,0 +1,2 @@
1# VisualStudio.wixext
2WixToolset.VisualStudio.wixext - Visual Studio WiX Toolset Extension
diff --git a/src/ext/VisualStudio/VisualStudio.wixext.sln b/src/ext/VisualStudio/VisualStudio.wixext.sln
new file mode 100644
index 00000000..9d6a8356
--- /dev/null
+++ b/src/ext/VisualStudio/VisualStudio.wixext.sln
@@ -0,0 +1,73 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio Version 16
4VisualStudioVersion = 16.0.30611.23
5MinimumVisualStudioVersion = 15.0.26124.0
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vsca", "src\ca\vsca.vcxproj", "{45308B85-0628-4978-8FC8-6AD9E1AD5949}"
7EndProject
8Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "vs", "src\wixlib\vs.wixproj", "{14345C9D-8AF8-435A-BB1B-E067CE7EB321}"
9EndProject
10Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.VisualStudio.wixext", "src\wixext\WixToolset.VisualStudio.wixext.csproj", "{61BFD377-9DE1-48B4-8687-560DF68D6F3B}"
11EndProject
12Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.VisualStudio", "src\test\WixToolsetTest.VisualStudio\WixToolsetTest.VisualStudio.csproj", "{DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}"
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 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|Any CPU.ActiveCfg = Debug|Win32
25 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|Any CPU.Build.0 = Debug|Win32
26 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x64.ActiveCfg = Debug|Win32
27 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x86.ActiveCfg = Debug|Win32
28 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x86.Build.0 = Debug|Win32
29 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|Any CPU.ActiveCfg = Release|Win32
30 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x64.ActiveCfg = Release|Win32
31 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x86.ActiveCfg = Release|Win32
32 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x86.Build.0 = Release|Win32
33 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
34 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
35 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x64.ActiveCfg = Debug|Any CPU
36 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x64.Build.0 = Debug|Any CPU
37 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x86.ActiveCfg = Debug|Any CPU
38 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x86.Build.0 = Debug|Any CPU
39 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
40 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|Any CPU.Build.0 = Release|Any CPU
41 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x64.ActiveCfg = Release|Any CPU
42 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x64.Build.0 = Release|Any CPU
43 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x86.ActiveCfg = Release|Any CPU
44 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x86.Build.0 = Release|Any CPU
45 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|Any CPU.ActiveCfg = Debug|x86
46 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|Any CPU.Build.0 = Debug|x86
47 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x64.ActiveCfg = Debug|x86
48 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x86.ActiveCfg = Debug|x86
49 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x86.Build.0 = Debug|x86
50 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|Any CPU.ActiveCfg = Release|x86
51 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x64.ActiveCfg = Release|x86
52 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x86.ActiveCfg = Release|x86
53 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x86.Build.0 = Release|x86
54 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
55 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
56 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|x64.ActiveCfg = Debug|Any CPU
57 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|x64.Build.0 = Debug|Any CPU
58 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|x86.ActiveCfg = Debug|Any CPU
59 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Debug|x86.Build.0 = Debug|Any CPU
60 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
61 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|Any CPU.Build.0 = Release|Any CPU
62 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|x64.ActiveCfg = Release|Any CPU
63 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|x64.Build.0 = Release|Any CPU
64 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|x86.ActiveCfg = Release|Any CPU
65 {DD2BD0F7-1E4A-4D11-954C-3505323C4E1B}.Release|x86.Build.0 = Release|Any CPU
66 EndGlobalSection
67 GlobalSection(SolutionProperties) = preSolution
68 HideSolutionNode = FALSE
69 EndGlobalSection
70 GlobalSection(ExtensibilityGlobals) = postSolution
71 SolutionGuid = {E4566A6B-47D0-4EA0-989A-D763AC39105D}
72 EndGlobalSection
73EndGlobal
diff --git a/src/ext/VisualStudio/appveyor.cmd b/src/ext/VisualStudio/appveyor.cmd
new file mode 100644
index 00000000..847809c3
--- /dev/null
+++ b/src/ext/VisualStudio/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.VisualStudio\WixToolsetTest.VisualStudio.csproj || exit /b
11
12:: Test
13dotnet test -c %_C% --no-build src\test\WixToolsetTest.VisualStudio || exit /b
14
15:: Pack
16msbuild -p:Configuration=%_C% -p:NoBuild=true -t:Pack src\wixext\WixToolset.VisualStudio.wixext.csproj || exit /b
17
18@popd
19@endlocal
diff --git a/src/ext/VisualStudio/appveyor.yml b/src/ext/VisualStudio/appveyor.yml
new file mode 100644
index 00000000..c53cc9cc
--- /dev/null
+++ b/src/ext/VisualStudio/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/VisualStudio/ca/dllmain.cpp b/src/ext/VisualStudio/ca/dllmain.cpp
new file mode 100644
index 00000000..35ae6d1c
--- /dev/null
+++ b/src/ext/VisualStudio/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 custom actions
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/VisualStudio/ca/precomp.h b/src/ext/VisualStudio/ca/precomp.h
new file mode 100644
index 00000000..3edad7ed
--- /dev/null
+++ b/src/ext/VisualStudio/ca/precomp.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#include <windows.h>
6#include <msiquery.h>
7
8#define MAXUINT USHRT_MAX
9#include <Setup.Configuration.h>
10
11#include "wcautil.h"
12#include "fileutil.h"
13#include "strutil.h"
diff --git a/src/ext/VisualStudio/ca/vsca.cpp b/src/ext/VisualStudio/ca/vsca.cpp
new file mode 100644
index 00000000..54a54a34
--- /dev/null
+++ b/src/ext/VisualStudio/ca/vsca.cpp
@@ -0,0 +1,510 @@
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
5typedef HRESULT (WINAPI *PFN_PROCESS_INSTANCE)(
6 __in_opt ISetupInstance* pInstance,
7 __in DWORD64 qwVersion,
8 __in BOOL fComplete
9 );
10
11struct VS_INSTANCE
12{
13 DWORD64 qwMinVersion;
14 DWORD64 qwMaxVersion;
15 PFN_PROCESS_INSTANCE pfnProcessInstance;
16};
17
18struct VS_COMPONENT_PROPERTY
19{
20 LPCWSTR pwzComponent;
21 LPCWSTR pwzProperty;
22};
23
24static HRESULT InstanceInProducts(
25 __in ISetupInstance* pInstance,
26 __in DWORD cProducts,
27 __in LPCWSTR* rgwzProducts
28 );
29
30static HRESULT InstanceIsGreater(
31 __in_opt ISetupInstance* pPreviousInstance,
32 __in DWORD64 qwPreviousVersion,
33 __in ISetupInstance* pCurrentInstance,
34 __in DWORD64 qwCurrentVersion
35 );
36
37static HRESULT ProcessInstance(
38 __in ISetupInstance* pInstance,
39 __in LPCWSTR wzProperty,
40 __in DWORD cComponents,
41 __in VS_COMPONENT_PROPERTY* rgComponents
42 );
43
44static HRESULT ProcessVS2017(
45 __in_opt ISetupInstance* pInstance,
46 __in DWORD64 qwVersion,
47 __in BOOL fComplete
48 );
49
50static HRESULT ProcessVS2019(
51 __in_opt ISetupInstance* pInstance,
52 __in DWORD64 qwVersion,
53 __in BOOL fComplete
54 );
55
56static HRESULT SetPropertyForComponent(
57 __in DWORD cComponents,
58 __in VS_COMPONENT_PROPERTY* rgComponents,
59 __in LPCWSTR wzComponent
60 );
61
62static VS_INSTANCE vrgInstances[] =
63{
64 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 },
65 { FILEMAKEVERSION(16, 0, 0, 0), FILEMAKEVERSION(16, 0xffff, 0xffff, 0xffff), ProcessVS2019 },
66};
67
68/******************************************************************
69 FindInstances - entry point for VS custom action to find instances
70
71*******************************************************************/
72extern "C" UINT __stdcall FindInstances(
73 __in MSIHANDLE hInstall
74 )
75{
76 HRESULT hr = S_OK;
77 UINT er = ERROR_SUCCESS;
78 BOOL fComInitialized = FALSE;
79 ISetupConfiguration* pConfiguration = NULL;
80 ISetupHelper* pHelper = NULL;
81 IEnumSetupInstances* pEnumInstances = NULL;
82 ISetupInstance* rgpInstances[1] = {};
83 ISetupInstance* pInstance = NULL;
84 ULONG cInstancesFetched = 0;
85 BSTR bstrVersion = NULL;
86 DWORD64 qwVersion = 0;
87
88 hr = WcaInitialize(hInstall, "VSFindInstances");
89 ExitOnFailure(hr, "Failed to initialize custom action.");
90
91 hr = ::CoInitialize(NULL);
92 ExitOnFailure(hr, "Failed to initialize COM.");
93
94 fComInitialized = TRUE;
95
96 hr = ::CoCreateInstance(__uuidof(SetupConfiguration), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pConfiguration));
97 if (REGDB_E_CLASSNOTREG != hr)
98 {
99 ExitOnFailure(hr, "Failed to initialize setup configuration class.");
100 }
101 else
102 {
103 WcaLog(LOGMSG_VERBOSE, "Setup configuration not registered; assuming no instances installed.");
104
105 hr = S_OK;
106 ExitFunction();
107 }
108
109 hr = pConfiguration->QueryInterface(IID_PPV_ARGS(&pHelper));
110 if (FAILED(hr))
111 {
112 WcaLog(LOGMSG_VERBOSE, "Setup configuration helpers not implemented; assuming Visual Studio 2017.");
113
114 qwVersion = FILEMAKEVERSION(15, 0, 0, 0);
115 hr = S_OK;
116 }
117
118 hr = pConfiguration->EnumInstances(&pEnumInstances);
119 ExitOnFailure(hr, "Failed to get instance enumerator.");
120
121 do
122 {
123 hr = pEnumInstances->Next(1, rgpInstances, &cInstancesFetched);
124 if (SUCCEEDED(hr) && cInstancesFetched)
125 {
126 pInstance = rgpInstances[0];
127 if (pInstance)
128 {
129 if (pHelper)
130 {
131 hr = pInstance->GetInstallationVersion(&bstrVersion);
132 ExitOnFailure(hr, "Failed to get installation version.");
133
134 hr = pHelper->ParseVersion(bstrVersion, &qwVersion);
135 ExitOnFailure(hr, "Failed to parse installation version.");
136 }
137
138 for (DWORD i = 0; i < countof(vrgInstances); ++i)
139 {
140 const VS_INSTANCE* pElem = &vrgInstances[i];
141
142 if (pElem->qwMinVersion <= qwVersion && qwVersion <= pElem->qwMaxVersion)
143 {
144 hr = pElem->pfnProcessInstance(pInstance, qwVersion, FALSE);
145 ExitOnFailure(hr, "Failed to process instance.");
146 }
147 }
148 }
149
150 ReleaseNullBSTR(bstrVersion);
151 ReleaseNullObject(pInstance);
152 }
153 } while (SUCCEEDED(hr) && cInstancesFetched);
154
155 // Complete all registered processing functions.
156 for (DWORD i = 0; i < countof(vrgInstances); ++i)
157 {
158 const VS_INSTANCE* pElem = &vrgInstances[i];
159
160 hr = pElem->pfnProcessInstance(NULL, 0, TRUE);
161 ExitOnFailure(hr, "Failed to process latest instance.");
162 }
163
164LExit:
165 ReleaseBSTR(bstrVersion);
166 ReleaseObject(pInstance);
167 ReleaseObject(pEnumInstances);
168 ReleaseObject(pHelper);
169 ReleaseObject(pConfiguration);
170
171 if (fComInitialized)
172 {
173 ::CoUninitialize();
174 }
175
176 if (FAILED(hr))
177 {
178 er = ERROR_INSTALL_FAILURE;
179 }
180
181 return WcaFinalize(er);
182}
183
184static HRESULT InstanceInProducts(
185 __in ISetupInstance* pInstance,
186 __in DWORD cProducts,
187 __in LPCWSTR* rgwzProducts
188 )
189{
190 HRESULT hr = S_OK;
191 ISetupInstance2* pInstance2 = NULL;
192 ISetupPackageReference* pProduct = NULL;
193 BSTR bstrId = NULL;
194
195 hr = pInstance->QueryInterface(IID_PPV_ARGS(&pInstance2));
196 if (FAILED(hr))
197 {
198 // Older implementations shipped when only VS SKUs were supported.
199 WcaLog(LOGMSG_VERBOSE, "Could not query instance for product information; assuming supported product.");
200
201 hr = S_OK;
202 ExitFunction();
203 }
204
205 hr = pInstance2->GetProduct(&pProduct);
206 ExitOnFailure(hr, "Failed to get product package reference.");
207
208 hr = pProduct->GetId(&bstrId);
209 ExitOnFailure(hr, "Failed to get product package ID.");
210
211 for (DWORD i = 0; i < cProducts; ++i)
212 {
213 const LPCWSTR wzProduct = rgwzProducts[i];
214
215 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, bstrId, -1, wzProduct, -1))
216 {
217 hr = S_OK;
218 ExitFunction();
219 }
220 }
221
222 hr = S_FALSE;
223
224LExit:
225 ReleaseBSTR(bstrId);
226 ReleaseObject(pProduct);
227 ReleaseObject(pInstance2);
228
229 return hr;
230}
231
232static HRESULT InstanceIsGreater(
233 __in_opt ISetupInstance* pPreviousInstance,
234 __in DWORD64 qwPreviousVersion,
235 __in ISetupInstance* pCurrentInstance,
236 __in DWORD64 qwCurrentVersion
237 )
238{
239 HRESULT hr = S_OK;
240 FILETIME ftPreviousInstance = {};
241 FILETIME ftCurrentInstance = {};
242
243 if (qwPreviousVersion != qwCurrentVersion)
244 {
245 return qwPreviousVersion < qwCurrentVersion ? S_OK : S_FALSE;
246 }
247
248 hr = pPreviousInstance->GetInstallDate(&ftPreviousInstance);
249 ExitOnFailure(hr, "Failed to get previous install date.");
250
251 hr = pCurrentInstance->GetInstallDate(&ftCurrentInstance);
252 ExitOnFailure(hr, "Failed to get current install date.");
253
254 return 0 > ::CompareFileTime(&ftPreviousInstance, &ftCurrentInstance) ? S_OK : S_FALSE;
255
256LExit:
257 return hr;
258}
259
260static HRESULT ProcessInstance(
261 __in ISetupInstance* pInstance,
262 __in LPCWSTR wzProperty,
263 __in DWORD cComponents,
264 __in VS_COMPONENT_PROPERTY* rgComponents
265 )
266{
267 HRESULT hr = S_OK;
268 ISetupInstance2* pInstance2 = NULL;
269 BSTR bstrPath = NULL;
270 LPSAFEARRAY psaPackages = NULL;
271 LONG lPackageIndex = 0;
272 LONG clMaxPackages = 0;
273 ISetupPackageReference** rgpPackages = NULL;
274 ISetupPackageReference* pPackage = NULL;
275 BSTR bstrPackageId = NULL;
276
277 hr = pInstance->GetInstallationPath(&bstrPath);
278 ExitOnFailure(hr, "Failed to get installation path.");
279
280 hr = WcaSetProperty(wzProperty, bstrPath);
281 ExitOnFailure(hr, "Failed to set installation path property: %ls", wzProperty);
282
283 hr = pInstance->QueryInterface(IID_PPV_ARGS(&pInstance2));
284 if (FAILED(hr))
285 {
286 // Older implementation did not expose installed components.
287 hr = S_OK;
288 ExitFunction();
289 }
290
291 hr = pInstance2->GetPackages(&psaPackages);
292 ExitOnFailure(hr, "Failed to get packages from instance.");
293
294 hr = ::SafeArrayGetLBound(psaPackages, 1, &lPackageIndex);
295 ExitOnFailure(hr, "Failed to get lower bound of packages array.");
296
297 hr = ::SafeArrayGetUBound(psaPackages, 1, &clMaxPackages);
298 ExitOnFailure(hr, "Failed to get upper bound of packages array.");
299
300 // Faster access to single dimension SAFEARRAY elements.
301 hr = ::SafeArrayAccessData(psaPackages, reinterpret_cast<LPVOID*>(&rgpPackages));
302 ExitOnFailure(hr, "Failed to access packages array.")
303
304 for (; lPackageIndex <= clMaxPackages; ++lPackageIndex)
305 {
306 pPackage = rgpPackages[lPackageIndex];
307
308 if (pPackage)
309 {
310 hr = pPackage->GetId(&bstrPackageId);
311 ExitOnFailure(hr, "Failed to get package ID.");
312
313 hr = SetPropertyForComponent(cComponents, rgComponents, bstrPackageId);
314 ExitOnFailure(hr, "Failed to set property for component: %ls", bstrPackageId);
315
316 ReleaseNullBSTR(bstrPackageId);
317 }
318 }
319
320LExit:
321 ReleaseBSTR(bstrPackageId);
322
323 if (rgpPackages)
324 {
325 ::SafeArrayUnaccessData(psaPackages);
326 }
327
328 if (psaPackages)
329 {
330 // This will Release() all objects in the array.
331 ::SafeArrayDestroy(psaPackages);
332 }
333
334 ReleaseObject(pInstance2);
335 ReleaseBSTR(bstrPath);
336
337 return hr;
338}
339
340static HRESULT ProcessVS2017(
341 __in_opt ISetupInstance* pInstance,
342 __in DWORD64 qwVersion,
343 __in BOOL fComplete
344 )
345{
346 static ISetupInstance* pLatest = NULL;
347 static DWORD64 qwLatest = 0;
348
349 static LPCWSTR rgwzProducts[] =
350 {
351 L"Microsoft.VisualStudio.Product.Community",
352 L"Microsoft.VisualStudio.Product.Professional",
353 L"Microsoft.VisualStudio.Product.Enterprise",
354 };
355
356 // TODO: Consider making table-driven with these defaults per-version for easy customization.
357 static VS_COMPONENT_PROPERTY rgComponents[] =
358 {
359 { L"Microsoft.VisualStudio.Component.FSharp", L"VS2017_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" },
360 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2017_IDE_VB_PROJECTSYSTEM_INSTALLED" },
361 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2017_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" },
362 { L"Microsoft.VisualStudio.Component.TestTools.Core", L"VS2017_IDE_VSTS_TESTSYSTEM_INSTALLED" },
363 { L"Microsoft.VisualStudio.Component.VC.CoreIde", L"VS2017_IDE_VC_PROJECTSYSTEM_INSTALLED" },
364 { L"Microsoft.VisualStudio.Component.Web", L"VS2017_IDE_VWD_PROJECTSYSTEM_INSTALLED" },
365 { L"Microsoft.VisualStudio.PackageGroup.DslRuntime", L"VS2017_IDE_MODELING_PROJECTSYSTEM_INSTALLED" },
366 };
367
368 HRESULT hr = S_OK;
369
370 if (fComplete)
371 {
372 if (pLatest)
373 {
374 hr = ProcessInstance(pLatest, L"VS2017_ROOT_FOLDER", countof(rgComponents), rgComponents);
375 ExitOnFailure(hr, "Failed to process VS2017 instance.");
376 }
377 }
378 else if (pInstance)
379 {
380 hr = InstanceInProducts(pInstance, countof(rgwzProducts), rgwzProducts);
381 ExitOnFailure(hr, "Failed to compare product IDs.");
382
383 if (S_FALSE == hr)
384 {
385 ExitFunction();
386 }
387
388 hr = InstanceIsGreater(pLatest, qwLatest, pInstance, qwVersion);
389 ExitOnFailure(hr, "Failed to compare instances.");
390
391 if (S_FALSE == hr)
392 {
393 ExitFunction();
394 }
395
396 ReleaseNullObject(pLatest);
397
398 pLatest = pInstance;
399 qwLatest = qwVersion;
400
401 // Caller will do a final Release() otherwise.
402 pLatest->AddRef();
403 }
404
405LExit:
406 if (fComplete)
407 {
408 ReleaseObject(pLatest);
409 }
410
411 return hr;
412}
413
414static HRESULT ProcessVS2019(
415 __in_opt ISetupInstance* pInstance,
416 __in DWORD64 qwVersion,
417 __in BOOL fComplete
418 )
419{
420 static ISetupInstance* pLatest = NULL;
421 static DWORD64 qwLatest = 0;
422
423 static LPCWSTR rgwzProducts[] =
424 {
425 L"Microsoft.VisualStudio.Product.Community",
426 L"Microsoft.VisualStudio.Product.Professional",
427 L"Microsoft.VisualStudio.Product.Enterprise",
428 };
429
430 // TODO: Consider making table-driven with these defaults per-version for easy customization.
431 static VS_COMPONENT_PROPERTY rgComponents[] =
432 {
433 { L"Microsoft.VisualStudio.Component.FSharp", L"VS2019_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" },
434 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2019_IDE_VB_PROJECTSYSTEM_INSTALLED" },
435 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" },
436 { L"Microsoft.VisualStudio.PackageGroup.TestTools.Core", L"VS2019_IDE_VSTS_TESTSYSTEM_INSTALLED" },
437 { L"Microsoft.VisualStudio.Component.VC.CoreIde", L"VS2019_IDE_VC_PROJECTSYSTEM_INSTALLED" },
438 { L"Microsoft.VisualStudio.Component.Web", L"VS2019_IDE_VWD_PROJECTSYSTEM_INSTALLED" },
439 { L"Microsoft.VisualStudio.PackageGroup.DslRuntime", L"VS2019_IDE_MODELING_PROJECTSYSTEM_INSTALLED" },
440 };
441
442 HRESULT hr = S_OK;
443
444 if (fComplete)
445 {
446 if (pLatest)
447 {
448 hr = ProcessInstance(pLatest, L"VS2019_ROOT_FOLDER", countof(rgComponents), rgComponents);
449 ExitOnFailure(hr, "Failed to process VS2019 instance.");
450 }
451 }
452 else if (pInstance)
453 {
454 hr = InstanceInProducts(pInstance, countof(rgwzProducts), rgwzProducts);
455 ExitOnFailure(hr, "Failed to compare product IDs.");
456
457 if (S_FALSE == hr)
458 {
459 ExitFunction();
460 }
461
462 hr = InstanceIsGreater(pLatest, qwLatest, pInstance, qwVersion);
463 ExitOnFailure(hr, "Failed to compare instances.");
464
465 if (S_FALSE == hr)
466 {
467 ExitFunction();
468 }
469
470 ReleaseNullObject(pLatest);
471
472 pLatest = pInstance;
473 qwLatest = qwVersion;
474
475 // Caller will do a final Release() otherwise.
476 pLatest->AddRef();
477 }
478
479LExit:
480 if (fComplete)
481 {
482 ReleaseObject(pLatest);
483 }
484
485 return hr;
486}
487
488static HRESULT SetPropertyForComponent(
489 __in DWORD cComponents,
490 __in VS_COMPONENT_PROPERTY* rgComponents,
491 __in LPCWSTR wzComponent
492 )
493{
494 HRESULT hr = S_OK;
495
496 // For small arrays, faster looping through than hashing. There may also be duplicates like with VS2017.
497 for (DWORD i = 0; i < cComponents; ++i)
498 {
499 const VS_COMPONENT_PROPERTY* pComponent = &rgComponents[i];
500
501 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, pComponent->pwzComponent, -1, wzComponent, -1))
502 {
503 hr = WcaSetIntProperty(pComponent->pwzProperty, 1);
504 ExitOnFailure(hr, "Failed to set property: %ls", pComponent->pwzProperty);
505 }
506 }
507
508LExit:
509 return hr;
510}
diff --git a/src/ext/VisualStudio/ca/vsca.def b/src/ext/VisualStudio/ca/vsca.def
new file mode 100644
index 00000000..fd2db98e
--- /dev/null
+++ b/src/ext/VisualStudio/ca/vsca.def
@@ -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
4LIBRARY "vsca"
5
6EXPORTS
7 FindInstances
diff --git a/src/ext/VisualStudio/ca/vsca.vcxproj b/src/ext/VisualStudio/ca/vsca.vcxproj
new file mode 100644
index 00000000..f4fbcc46
--- /dev/null
+++ b/src/ext/VisualStudio/ca/vsca.vcxproj
@@ -0,0 +1,58 @@
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="15.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 </ItemGroup>
15
16 <PropertyGroup Label="Globals">
17 <ProjectGuid>{45308B85-0628-4978-8FC8-6AD9E1AD5949}</ProjectGuid>
18 <ConfigurationType>DynamicLibrary</ConfigurationType>
19 <TargetName>vsca</TargetName>
20 <PlatformToolset>v142</PlatformToolset>
21 <CharacterSet>Unicode</CharacterSet>
22 <ProjectModuleDefinitionFile>vsca.def</ProjectModuleDefinitionFile>
23 <Description>WiX Toolset VS CustomAction</Description>
24 <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
25 </PropertyGroup>
26
27 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
28 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
29
30 <PropertyGroup>
31 <ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
32 </PropertyGroup>
33
34 <ItemGroup>
35 <ClCompile Include="dllmain.cpp">
36 <PrecompiledHeader>Create</PrecompiledHeader>
37 </ClCompile>
38 <ClCompile Include="vsca.cpp" />
39 </ItemGroup>
40
41 <ItemGroup>
42 <ClInclude Include="precomp.h" />
43 </ItemGroup>
44
45 <ItemGroup>
46 <None Include="vsca.def" />
47 </ItemGroup>
48
49 <ItemGroup>
50 <PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Native" Version="1.14.114" />
51 <PackageReference Include="WixToolset.Dutil" Version="4.0.65" />
52 <PackageReference Include="WixToolset.WcaUtil" Version="4.0.18" />
53 <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
54 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" />
55 </ItemGroup>
56
57 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
58</Project>
diff --git a/src/ext/VisualStudio/nuget.config b/src/ext/VisualStudio/nuget.config
new file mode 100644
index 00000000..6fb99260
--- /dev/null
+++ b/src/ext/VisualStudio/nuget.config
@@ -0,0 +1,17 @@
1<?xml version="1.0" encoding="utf-8"?>
2<configuration>
3 <packageSources>
4 <clear />
5 <add key="wixtoolset-burn" value="https://ci.appveyor.com/nuget/wixtoolset-burn" />
6 <add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" />
7 <add key="wixtoolset-core-native" value="https://ci.appveyor.com/nuget/wixtoolset-core-native" />
8 <add key="wixtoolset-data" value="https://ci.appveyor.com/nuget/wixtoolset-data" />
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-extensibility" value="https://ci.appveyor.com/nuget/wixtoolset-extensibility" />
12 <add key="wixtoolset-wcautil" value="https://ci.appveyor.com/nuget/wixtoolset-wcautil" />
13 <add key="wixtoolset-tools" value="https://ci.appveyor.com/nuget/wixtoolset-tools" />
14 <add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
15 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
16 </packageSources>
17</configuration> \ No newline at end of file
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.en-us.wxl b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs
new file mode 100644
index 00000000..c2196807
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs
@@ -0,0 +1,17 @@
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 <PropertyRef Id="VS2017DEVENV" />
6
7 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
8 <ComponentGroupRef Id="ProductComponents" />
9 </Feature>
10 </Package>
11
12 <Fragment>
13 <StandardDirectory Id="ProgramFilesFolder">
14 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
15 </StandardDirectory>
16 </Fragment>
17</Wix>
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/PackageComponents.wxs b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/PackageComponents.wxs
new file mode 100644
index 00000000..c8c72cc0
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/PackageComponents.wxs
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:vs="http://wixtoolset.org/schemas/v4/wxs/vs">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Name="fake.vsix" Source="example.txt">
8 <vs:VsixPackage PackageId="ExampleVsix" />
9 </File>
10
11 </Component>
12 </ComponentGroup>
13 </Fragment>
14</Wix>
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/example.txt b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs
new file mode 100644
index 00000000..306962e3
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs
@@ -0,0 +1,45 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.VisualStudio
4{
5 using System.Linq;
6 using WixBuildTools.TestSupport;
7 using WixToolset.Core.TestPackage;
8 using WixToolset.VisualStudio;
9 using Xunit;
10
11 public class VisualStudioExtensionFixture
12 {
13 [Fact]
14 public void CanBuildUsingVsixPackage()
15 {
16 var folder = TestData.Get(@"TestData\UsingVsixPackage");
17 var build = new Builder(folder, typeof(VSExtensionFactory), new[] { folder });
18
19 var results = build.BuildAndQuery(Build, "CustomAction");
20 Assert.Equal(new[]
21 {
22 "CustomAction:SetVS2010Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2010_VSIX_INSTALLER_PATH]\t",
23 "CustomAction:SetVS2012Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2012_VSIX_INSTALLER_PATH]\t",
24 "CustomAction:SetVS2013Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2013_VSIX_INSTALLER_PATH]\t",
25 "CustomAction:SetVS2015Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2015_VSIX_INSTALLER_PATH]\t",
26 "CustomAction:vimLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3122\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\" /admin\t",
27 "CustomAction:viuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1074\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\"\t",
28 "CustomAction:vrmLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3442\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t",
29 "CustomAction:vruMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1394\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t",
30 "CustomAction:VSFindInstances\t257\tVSCA\tFindInstances\t",
31 "CustomAction:vumLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3186\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t",
32 "CustomAction:vuuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1138\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t",
33 "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
34 "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
35 "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
36 }, results);
37 }
38
39 private static void Build(string[] args)
40 {
41 var result = WixRunner.Execute(args)
42 .AssertSuccess();
43 }
44 }
45}
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj
new file mode 100644
index 00000000..9172569f
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj
@@ -0,0 +1,38 @@
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 <IsPackable>false</IsPackable>
8 </PropertyGroup>
9
10 <PropertyGroup>
11 <NoWarn>NU1701</NoWarn>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
16 </ItemGroup>
17
18 <ItemGroup>
19 <ProjectReference Include="..\..\wixext\WixToolset.VisualStudio.wixext.csproj" />
20 </ItemGroup>
21
22 <ItemGroup>
23 <PackageReference Include="WixToolset.Core" Version="4.0.*" />
24 <PackageReference Include="WixToolset.Core.Burn" Version="4.0.*" />
25 <PackageReference Include="WixToolset.Core.WindowsInstaller" Version="4.0.*" />
26 <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" />
27 </ItemGroup>
28
29 <ItemGroup>
30 <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
31 </ItemGroup>
32
33 <ItemGroup>
34 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
35 <PackageReference Include="xunit" Version="2.4.1" />
36 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
37 </ItemGroup>
38</Project>
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.v3.ncrunchproject b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.v3.ncrunchproject
new file mode 100644
index 00000000..7b5b2139
--- /dev/null
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.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/VisualStudio/wix.snk b/src/ext/VisualStudio/wix.snk
new file mode 100644
index 00000000..3908a66a
--- /dev/null
+++ b/src/ext/VisualStudio/wix.snk
Binary files differ
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpFileSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpFileSymbol.cs
new file mode 100644
index 00000000..8078f4ab
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpFileSymbol.cs
@@ -0,0 +1,95 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpFile = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpFile.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.HelpFileName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.LangID), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.HxSFileRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.HxIFileRef), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.HxQFileRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.HxRFileRef), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(HelpFileSymbolFields.SamplesFileRef), IntermediateFieldType.String),
21 },
22 typeof(HelpFileSymbol));
23 }
24}
25
26namespace WixToolset.VisualStudio.Symbols
27{
28 using WixToolset.Data;
29
30 public enum HelpFileSymbolFields
31 {
32 HelpFileName,
33 LangID,
34 HxSFileRef,
35 HxIFileRef,
36 HxQFileRef,
37 HxRFileRef,
38 SamplesFileRef,
39 }
40
41 public class HelpFileSymbol : IntermediateSymbol
42 {
43 public HelpFileSymbol() : base(VSSymbolDefinitions.HelpFile, null, null)
44 {
45 }
46
47 public HelpFileSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpFile, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[HelpFileSymbolFields index] => this.Fields[(int)index];
52
53 public string HelpFileName
54 {
55 get => this.Fields[(int)HelpFileSymbolFields.HelpFileName].AsString();
56 set => this.Set((int)HelpFileSymbolFields.HelpFileName, value);
57 }
58
59 public int? LangID
60 {
61 get => this.Fields[(int)HelpFileSymbolFields.LangID].AsNullableNumber();
62 set => this.Set((int)HelpFileSymbolFields.LangID, value);
63 }
64
65 public string HxSFileRef
66 {
67 get => this.Fields[(int)HelpFileSymbolFields.HxSFileRef].AsString();
68 set => this.Set((int)HelpFileSymbolFields.HxSFileRef, value);
69 }
70
71 public string HxIFileRef
72 {
73 get => this.Fields[(int)HelpFileSymbolFields.HxIFileRef].AsString();
74 set => this.Set((int)HelpFileSymbolFields.HxIFileRef, value);
75 }
76
77 public string HxQFileRef
78 {
79 get => this.Fields[(int)HelpFileSymbolFields.HxQFileRef].AsString();
80 set => this.Set((int)HelpFileSymbolFields.HxQFileRef, value);
81 }
82
83 public string HxRFileRef
84 {
85 get => this.Fields[(int)HelpFileSymbolFields.HxRFileRef].AsString();
86 set => this.Set((int)HelpFileSymbolFields.HxRFileRef, value);
87 }
88
89 public string SamplesFileRef
90 {
91 get => this.Fields[(int)HelpFileSymbolFields.SamplesFileRef].AsString();
92 set => this.Set((int)HelpFileSymbolFields.SamplesFileRef, value);
93 }
94 }
95} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpFileToNamespaceSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpFileToNamespaceSymbol.cs
new file mode 100644
index 00000000..f18d6701
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpFileToNamespaceSymbol.cs
@@ -0,0 +1,55 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpFileToNamespace = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpFileToNamespace.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpFileToNamespaceSymbolFields.HelpFileRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpFileToNamespaceSymbolFields.HelpNamespaceRef), IntermediateFieldType.String),
16 },
17 typeof(HelpFileToNamespaceSymbol));
18 }
19}
20
21namespace WixToolset.VisualStudio.Symbols
22{
23 using WixToolset.Data;
24
25 public enum HelpFileToNamespaceSymbolFields
26 {
27 HelpFileRef,
28 HelpNamespaceRef,
29 }
30
31 public class HelpFileToNamespaceSymbol : IntermediateSymbol
32 {
33 public HelpFileToNamespaceSymbol() : base(VSSymbolDefinitions.HelpFileToNamespace, null, null)
34 {
35 }
36
37 public HelpFileToNamespaceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpFileToNamespace, sourceLineNumber, id)
38 {
39 }
40
41 public IntermediateField this[HelpFileToNamespaceSymbolFields index] => this.Fields[(int)index];
42
43 public string HelpFileRef
44 {
45 get => this.Fields[(int)HelpFileToNamespaceSymbolFields.HelpFileRef].AsString();
46 set => this.Set((int)HelpFileToNamespaceSymbolFields.HelpFileRef, value);
47 }
48
49 public string HelpNamespaceRef
50 {
51 get => this.Fields[(int)HelpFileToNamespaceSymbolFields.HelpNamespaceRef].AsString();
52 set => this.Set((int)HelpFileToNamespaceSymbolFields.HelpNamespaceRef, value);
53 }
54 }
55} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpFilterSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpFilterSymbol.cs
new file mode 100644
index 00000000..9deb47d0
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpFilterSymbol.cs
@@ -0,0 +1,55 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpFilter = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpFilter.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpFilterSymbolFields.Description), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpFilterSymbolFields.QueryString), IntermediateFieldType.String),
16 },
17 typeof(HelpFilterSymbol));
18 }
19}
20
21namespace WixToolset.VisualStudio.Symbols
22{
23 using WixToolset.Data;
24
25 public enum HelpFilterSymbolFields
26 {
27 Description,
28 QueryString,
29 }
30
31 public class HelpFilterSymbol : IntermediateSymbol
32 {
33 public HelpFilterSymbol() : base(VSSymbolDefinitions.HelpFilter, null, null)
34 {
35 }
36
37 public HelpFilterSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpFilter, sourceLineNumber, id)
38 {
39 }
40
41 public IntermediateField this[HelpFilterSymbolFields index] => this.Fields[(int)index];
42
43 public string Description
44 {
45 get => this.Fields[(int)HelpFilterSymbolFields.Description].AsString();
46 set => this.Set((int)HelpFilterSymbolFields.Description, value);
47 }
48
49 public string QueryString
50 {
51 get => this.Fields[(int)HelpFilterSymbolFields.QueryString].AsString();
52 set => this.Set((int)HelpFilterSymbolFields.QueryString, value);
53 }
54 }
55} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpFilterToNamespaceSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpFilterToNamespaceSymbol.cs
new file mode 100644
index 00000000..f3d21289
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpFilterToNamespaceSymbol.cs
@@ -0,0 +1,55 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpFilterToNamespace = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpFilterToNamespace.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpFilterToNamespaceSymbolFields.HelpFilterRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpFilterToNamespaceSymbolFields.HelpNamespaceRef), IntermediateFieldType.String),
16 },
17 typeof(HelpFilterToNamespaceSymbol));
18 }
19}
20
21namespace WixToolset.VisualStudio.Symbols
22{
23 using WixToolset.Data;
24
25 public enum HelpFilterToNamespaceSymbolFields
26 {
27 HelpFilterRef,
28 HelpNamespaceRef,
29 }
30
31 public class HelpFilterToNamespaceSymbol : IntermediateSymbol
32 {
33 public HelpFilterToNamespaceSymbol() : base(VSSymbolDefinitions.HelpFilterToNamespace, null, null)
34 {
35 }
36
37 public HelpFilterToNamespaceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpFilterToNamespace, sourceLineNumber, id)
38 {
39 }
40
41 public IntermediateField this[HelpFilterToNamespaceSymbolFields index] => this.Fields[(int)index];
42
43 public string HelpFilterRef
44 {
45 get => this.Fields[(int)HelpFilterToNamespaceSymbolFields.HelpFilterRef].AsString();
46 set => this.Set((int)HelpFilterToNamespaceSymbolFields.HelpFilterRef, value);
47 }
48
49 public string HelpNamespaceRef
50 {
51 get => this.Fields[(int)HelpFilterToNamespaceSymbolFields.HelpNamespaceRef].AsString();
52 set => this.Set((int)HelpFilterToNamespaceSymbolFields.HelpNamespaceRef, value);
53 }
54 }
55} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpNamespaceSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpNamespaceSymbol.cs
new file mode 100644
index 00000000..8d2c2f80
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpNamespaceSymbol.cs
@@ -0,0 +1,63 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpNamespace = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpNamespace.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpNamespaceSymbolFields.NamespaceName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpNamespaceSymbolFields.CollectionFileRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(HelpNamespaceSymbolFields.Description), IntermediateFieldType.String),
17 },
18 typeof(HelpNamespaceSymbol));
19 }
20}
21
22namespace WixToolset.VisualStudio.Symbols
23{
24 using WixToolset.Data;
25
26 public enum HelpNamespaceSymbolFields
27 {
28 NamespaceName,
29 CollectionFileRef,
30 Description,
31 }
32
33 public class HelpNamespaceSymbol : IntermediateSymbol
34 {
35 public HelpNamespaceSymbol() : base(VSSymbolDefinitions.HelpNamespace, null, null)
36 {
37 }
38
39 public HelpNamespaceSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpNamespace, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[HelpNamespaceSymbolFields index] => this.Fields[(int)index];
44
45 public string NamespaceName
46 {
47 get => this.Fields[(int)HelpNamespaceSymbolFields.NamespaceName].AsString();
48 set => this.Set((int)HelpNamespaceSymbolFields.NamespaceName, value);
49 }
50
51 public string CollectionFileRef
52 {
53 get => this.Fields[(int)HelpNamespaceSymbolFields.CollectionFileRef].AsString();
54 set => this.Set((int)HelpNamespaceSymbolFields.CollectionFileRef, value);
55 }
56
57 public string Description
58 {
59 get => this.Fields[(int)HelpNamespaceSymbolFields.Description].AsString();
60 set => this.Set((int)HelpNamespaceSymbolFields.Description, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/HelpPluginSymbol.cs b/src/ext/VisualStudio/wixext/Symbols/HelpPluginSymbol.cs
new file mode 100644
index 00000000..a452fbd5
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/HelpPluginSymbol.cs
@@ -0,0 +1,79 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.VisualStudio.Symbols;
7
8 public static partial class VSSymbolDefinitions
9 {
10 public static readonly IntermediateSymbolDefinition HelpPlugin = new IntermediateSymbolDefinition(
11 VSSymbolDefinitionType.HelpPlugin.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(HelpPluginSymbolFields.HelpNamespaceRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(HelpPluginSymbolFields.ParentHelpNamespaceRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(HelpPluginSymbolFields.HxTFileRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(HelpPluginSymbolFields.HxAFileRef), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(HelpPluginSymbolFields.ParentHxTFileRef), IntermediateFieldType.String),
19 },
20 typeof(HelpPluginSymbol));
21 }
22}
23
24namespace WixToolset.VisualStudio.Symbols
25{
26 using WixToolset.Data;
27
28 public enum HelpPluginSymbolFields
29 {
30 HelpNamespaceRef,
31 ParentHelpNamespaceRef,
32 HxTFileRef,
33 HxAFileRef,
34 ParentHxTFileRef,
35 }
36
37 public class HelpPluginSymbol : IntermediateSymbol
38 {
39 public HelpPluginSymbol() : base(VSSymbolDefinitions.HelpPlugin, null, null)
40 {
41 }
42
43 public HelpPluginSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(VSSymbolDefinitions.HelpPlugin, sourceLineNumber, id)
44 {
45 }
46
47 public IntermediateField this[HelpPluginSymbolFields index] => this.Fields[(int)index];
48
49 public string HelpNamespaceRef
50 {
51 get => this.Fields[(int)HelpPluginSymbolFields.HelpNamespaceRef].AsString();
52 set => this.Set((int)HelpPluginSymbolFields.HelpNamespaceRef, value);
53 }
54
55 public string ParentHelpNamespaceRef
56 {
57 get => this.Fields[(int)HelpPluginSymbolFields.ParentHelpNamespaceRef].AsString();
58 set => this.Set((int)HelpPluginSymbolFields.ParentHelpNamespaceRef, value);
59 }
60
61 public string HxTFileRef
62 {
63 get => this.Fields[(int)HelpPluginSymbolFields.HxTFileRef].AsString();
64 set => this.Set((int)HelpPluginSymbolFields.HxTFileRef, value);
65 }
66
67 public string HxAFileRef
68 {
69 get => this.Fields[(int)HelpPluginSymbolFields.HxAFileRef].AsString();
70 set => this.Set((int)HelpPluginSymbolFields.HxAFileRef, value);
71 }
72
73 public string ParentHxTFileRef
74 {
75 get => this.Fields[(int)HelpPluginSymbolFields.ParentHxTFileRef].AsString();
76 set => this.Set((int)HelpPluginSymbolFields.ParentHxTFileRef, value);
77 }
78 }
79} \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixext/Symbols/VSSymbolDefinitions.cs b/src/ext/VisualStudio/wixext/Symbols/VSSymbolDefinitions.cs
new file mode 100644
index 00000000..cea6a2b6
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/Symbols/VSSymbolDefinitions.cs
@@ -0,0 +1,59 @@
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.VisualStudio
4{
5 using System;
6 using WixToolset.Data;
7
8 public enum VSSymbolDefinitionType
9 {
10 HelpFile,
11 HelpFileToNamespace,
12 HelpFilter,
13 HelpFilterToNamespace,
14 HelpNamespace,
15 HelpPlugin,
16 }
17
18 public static partial class VSSymbolDefinitions
19 {
20 public static readonly Version Version = new Version("4.0.0");
21
22 public static IntermediateSymbolDefinition ByName(string name)
23 {
24 if (!Enum.TryParse(name, out VSSymbolDefinitionType type))
25 {
26 return null;
27 }
28
29 return ByType(type);
30 }
31
32 public static IntermediateSymbolDefinition ByType(VSSymbolDefinitionType type)
33 {
34 switch (type)
35 {
36 case VSSymbolDefinitionType.HelpFile:
37 return VSSymbolDefinitions.HelpFile;
38
39 case VSSymbolDefinitionType.HelpFileToNamespace:
40 return VSSymbolDefinitions.HelpFileToNamespace;
41
42 case VSSymbolDefinitionType.HelpFilter:
43 return VSSymbolDefinitions.HelpFilter;
44
45 case VSSymbolDefinitionType.HelpFilterToNamespace:
46 return VSSymbolDefinitions.HelpFilterToNamespace;
47
48 case VSSymbolDefinitionType.HelpNamespace:
49 return VSSymbolDefinitions.HelpNamespace;
50
51 case VSSymbolDefinitionType.HelpPlugin:
52 return VSSymbolDefinitions.HelpPlugin;
53
54 default:
55 throw new ArgumentOutOfRangeException(nameof(type));
56 }
57 }
58 }
59}
diff --git a/src/ext/VisualStudio/wixext/VSCompiler.cs b/src/ext/VisualStudio/wixext/VSCompiler.cs
new file mode 100644
index 00000000..65f0f97d
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSCompiler.cs
@@ -0,0 +1,828 @@
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.VisualStudio
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.Xml.Linq;
9 using WixToolset.Data;
10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Extensibility;
13 using WixToolset.VisualStudio.Symbols;
14
15 /// <summary>
16 /// The compiler for the WiX Toolset Visual Studio Extension.
17 /// </summary>
18 public sealed class VSCompiler : BaseCompilerExtension
19 {
20 internal const int MsidbCustomActionTypeExe = 0x00000002; // Target = command line args
21 internal const int MsidbCustomActionTypeProperty = 0x00000030; // Source = full path to executable
22 internal const int MsidbCustomActionTypeContinue = 0x00000040; // ignore action return status; continue running
23 internal const int MsidbCustomActionTypeRollback = 0x00000100; // in conjunction with InScript: queue in Rollback script
24 internal const int MsidbCustomActionTypeInScript = 0x00000400; // queue for execution within script
25 internal const int MsidbCustomActionTypeNoImpersonate = 0x00000800; // queue for not impersonating
26
27 public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/vs";
28
29 public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
30 {
31 switch (parentElement.Name.LocalName)
32 {
33 case "Component":
34 switch (element.Name.LocalName)
35 {
36 case "VsixPackage":
37 this.ParseVsixPackageElement(intermediate, section, element, context["ComponentId"], null);
38 break;
39 default:
40 this.ParseHelper.UnexpectedElement(parentElement, element);
41 break;
42 }
43 break;
44 case "File":
45 switch (element.Name.LocalName)
46 {
47 case "HelpCollection":
48 this.ParseHelpCollectionElement(intermediate, section, element, context["FileId"]);
49 break;
50 case "HelpFile":
51 this.ParseHelpFileElement(intermediate, section, element, context["FileId"]);
52 break;
53 case "VsixPackage":
54 this.ParseVsixPackageElement(intermediate, section, element, context["ComponentId"], context["FileId"]);
55 break;
56 default:
57 this.ParseHelper.UnexpectedElement(parentElement, element);
58 break;
59 }
60 break;
61 case "Fragment":
62 case "Module":
63 case "Package":
64 switch (element.Name.LocalName)
65 {
66 case "HelpCollectionRef":
67 this.ParseHelpCollectionRefElement(intermediate, section, element);
68 break;
69 case "HelpFilter":
70 this.ParseHelpFilterElement(intermediate, section, element);
71 break;
72 default:
73 this.ParseHelper.UnexpectedElement(parentElement, element);
74 break;
75 }
76 break;
77 default:
78 this.ParseHelper.UnexpectedElement(parentElement, element);
79 break;
80 }
81 }
82
83 private void ParseHelpCollectionRefElement(Intermediate intermediate, IntermediateSection section, XElement element)
84 {
85 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
86 Identifier id = null;
87
88 foreach (var attrib in element.Attributes())
89 {
90 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
91 {
92 switch (attrib.Name.LocalName)
93 {
94 case "Id":
95 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
96 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, VSSymbolDefinitions.HelpNamespace, id.Id);
97 break;
98 default:
99 this.ParseHelper.UnexpectedAttribute(element, attrib);
100 break;
101 }
102 }
103 else
104 {
105 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
106 }
107 }
108
109 if (null == id)
110 {
111 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id"));
112 }
113
114 foreach (var child in element.Elements())
115 {
116 if (this.Namespace == child.Name.Namespace)
117 {
118 switch (child.Name.LocalName)
119 {
120 case "HelpFileRef":
121 this.ParseHelpFileRefElement(intermediate, section, child, id);
122 break;
123 default:
124 this.ParseHelper.UnexpectedElement(element, child);
125 break;
126 }
127 }
128 else
129 {
130 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, element, child);
131 }
132 }
133 }
134
135 private void ParseHelpCollectionElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId)
136 {
137 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
138 Identifier id = null;
139 string description = null;
140 string name = null;
141 var suppressCAs = YesNoType.No;
142
143 foreach (var attrib in element.Attributes())
144 {
145 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
146 {
147 switch (attrib.Name.LocalName)
148 {
149 case "Id":
150 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
151 break;
152 case "Description":
153 description = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
154 break;
155 case "Name":
156 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
157 break;
158 case "SuppressCustomActions":
159 suppressCAs = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
160 break;
161 default:
162 this.ParseHelper.UnexpectedAttribute(element, attrib);
163 break;
164 }
165 }
166 else
167 {
168 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
169 }
170 }
171
172 if (null == id)
173 {
174 id = this.ParseHelper.CreateIdentifier("vshc", fileId, description, name);
175 }
176
177 if (null == description)
178 {
179 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Description"));
180 }
181
182 if (null == name)
183 {
184 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Name"));
185 }
186
187 foreach (var child in element.Elements())
188 {
189 if (this.Namespace == child.Name.Namespace)
190 {
191 switch (child.Name.LocalName)
192 {
193 case "HelpFileRef":
194 this.ParseHelpFileRefElement(intermediate, section, child, id);
195 break;
196 case "HelpFilterRef":
197 this.ParseHelpFilterRefElement(intermediate, section, child, id);
198 break;
199 case "PlugCollectionInto":
200 this.ParsePlugCollectionIntoElement(intermediate, section, child, id);
201 break;
202 default:
203 this.ParseHelper.UnexpectedElement(element, child);
204 break;
205 }
206 }
207 else
208 {
209 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, element, child);
210 }
211 }
212
213 if (!this.Messaging.EncounteredError)
214 {
215 section.AddSymbol(new HelpNamespaceSymbol(sourceLineNumbers, id)
216 {
217 NamespaceName = name,
218 CollectionFileRef = fileId,
219 Description = description,
220 });
221
222 if (YesNoType.No == suppressCAs)
223 {
224 this.AddReferenceToRegisterMicrosoftHelp(section, sourceLineNumbers);
225 }
226 }
227 }
228
229 private void ParseHelpFileElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId)
230 {
231 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
232 Identifier id = null;
233 string name = null;
234 var language = CompilerConstants.IntegerNotSet;
235 string hxi = null;
236 string hxq = null;
237 string hxr = null;
238 string samples = null;
239 var suppressCAs = YesNoType.No;
240
241 foreach (var attrib in element.Attributes())
242 {
243 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
244 {
245 switch (attrib.Name.LocalName)
246 {
247 case "Id":
248 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
249 break;
250 case "AttributeIndex":
251 hxr = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
252 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, hxr);
253 break;
254 case "Index":
255 hxi = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
256 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, hxi);
257 break;
258 case "Language":
259 language = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue);
260 break;
261 case "Name":
262 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
263 break;
264 case "SampleLocation":
265 samples = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
266 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, samples);
267 break;
268 case "Search":
269 hxq = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
270 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, hxq);
271 break;
272 case "SuppressCustomActions":
273 suppressCAs = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
274 break;
275 default:
276 this.ParseHelper.UnexpectedAttribute(element, attrib);
277 break;
278 }
279 }
280 else
281 {
282 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
283 }
284 }
285
286 if (null == id)
287 {
288 id = this.ParseHelper.CreateIdentifier("vshf", fileId, name, language.ToString(CultureInfo.InvariantCulture.NumberFormat));
289 }
290
291 if (null == name)
292 {
293 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Name"));
294 }
295
296 // Uninstall will always fail silently, leaving file registered, if Language is not set
297 if (CompilerConstants.IntegerNotSet == language)
298 {
299 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Language"));
300 }
301
302 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
303
304 if (!this.Messaging.EncounteredError)
305 {
306 section.AddSymbol(new HelpFileSymbol(sourceLineNumbers, id)
307 {
308 HelpFileName = name,
309 LangID = language,
310 HxSFileRef = fileId,
311 HxIFileRef = hxi,
312 HxQFileRef = hxq,
313 HxRFileRef = hxr,
314 SamplesFileRef = samples,
315 });
316
317 if (YesNoType.No == suppressCAs)
318 {
319 this.AddReferenceToRegisterMicrosoftHelp(section, sourceLineNumbers);
320 }
321 }
322 }
323
324 private void ParseHelpFileRefElement(Intermediate intermediate, IntermediateSection section, XElement element, Identifier collectionId)
325 {
326 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
327 Identifier id = null;
328
329 foreach (var attrib in element.Attributes())
330 {
331 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
332 {
333 switch (attrib.Name.LocalName)
334 {
335 case "Id":
336 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
337 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, VSSymbolDefinitions.HelpFile, id.Id);
338 break;
339 default:
340 this.ParseHelper.UnexpectedAttribute(element, attrib);
341 break;
342 }
343 }
344 else
345 {
346 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
347 }
348 }
349
350 if (null == id)
351 {
352 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id"));
353 }
354
355 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
356
357 if (!this.Messaging.EncounteredError)
358 {
359 section.AddSymbol(new HelpFileToNamespaceSymbol(sourceLineNumbers, id)
360 {
361 HelpFileRef = id.Id,
362 HelpNamespaceRef = collectionId.Id,
363 });
364 }
365 }
366
367 private void ParseHelpFilterElement(Intermediate intermediate, IntermediateSection section, XElement element)
368 {
369 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
370 Identifier id = null;
371 string filterDefinition = null;
372 string name = null;
373 var suppressCAs = YesNoType.No;
374
375 foreach (var attrib in element.Attributes())
376 {
377 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
378 {
379 switch (attrib.Name.LocalName)
380 {
381 case "Id":
382 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
383 break;
384 case "FilterDefinition":
385 filterDefinition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
386 break;
387 case "Name":
388 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
389 break;
390 case "SuppressCustomActions":
391 suppressCAs = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
392 break;
393 default:
394 this.ParseHelper.UnexpectedAttribute(element, attrib);
395 break;
396 }
397 }
398 else
399 {
400 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
401 }
402 }
403
404 if (null == id)
405 {
406 id = this.ParseHelper.CreateIdentifier("hfl", name, filterDefinition);
407 }
408
409 if (null == name)
410 {
411 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Name"));
412 }
413
414 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
415
416 if (!this.Messaging.EncounteredError)
417 {
418 section.AddSymbol(new HelpFilterSymbol(sourceLineNumbers, id)
419 {
420 Description = name,
421 QueryString = filterDefinition,
422 });
423
424 if (YesNoType.No == suppressCAs)
425 {
426 this.AddReferenceToRegisterMicrosoftHelp(section, sourceLineNumbers);
427 }
428 }
429 }
430
431 private void ParseHelpFilterRefElement(Intermediate intermediate, IntermediateSection section, XElement element, Identifier collectionId)
432 {
433 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
434 Identifier id = null;
435
436 foreach (var attrib in element.Attributes())
437 {
438 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
439 {
440 switch (attrib.Name.LocalName)
441 {
442 case "Id":
443 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
444 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, VSSymbolDefinitions.HelpFilter, id.Id);
445 break;
446 default:
447 this.ParseHelper.UnexpectedAttribute(element, attrib);
448 break;
449 }
450 }
451 else
452 {
453 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
454 }
455 }
456
457 if (null == id)
458 {
459 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id"));
460 }
461
462 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
463
464 if (!this.Messaging.EncounteredError)
465 {
466 section.AddSymbol(new HelpFilterToNamespaceSymbol(sourceLineNumbers, id)
467 {
468 HelpFilterRef = id.Id,
469 HelpNamespaceRef = collectionId.Id,
470 });
471 }
472 }
473
474 private void ParsePlugCollectionIntoElement(Intermediate intermediate, IntermediateSection section, XElement element, Identifier parentId)
475 {
476 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
477 string hxa = null;
478 string hxt = null;
479 string hxtParent = null;
480 string namespaceParent = null;
481 string feature = null;
482 var suppressExternalNamespaces = YesNoType.No;
483
484 foreach (var attrib in element.Attributes())
485 {
486 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
487 {
488 switch (attrib.Name.LocalName)
489 {
490 case "Attributes":
491 hxa = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
492 break;
493 case "TableOfContents":
494 hxt = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
495 break;
496 case "TargetCollection":
497 namespaceParent = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
498 break;
499 case "TargetTableOfContents":
500 hxtParent = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
501 break;
502 case "TargetFeature":
503 feature = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
504 break;
505 case "SuppressExternalNamespaces":
506 suppressExternalNamespaces = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
507 break;
508 default:
509 this.ParseHelper.UnexpectedAttribute(element, attrib);
510 break;
511 }
512 }
513 else
514 {
515 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
516 }
517 }
518
519 var pluginVS05 = namespaceParent.Equals("MS_VSIPCC_v80", StringComparison.Ordinal);
520 var pluginVS08 = namespaceParent.Equals("MS.VSIPCC.v90", StringComparison.Ordinal);
521
522 if (null == namespaceParent)
523 {
524 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "TargetCollection"));
525 }
526
527 if (null == feature && (pluginVS05 || pluginVS08) && YesNoType.No == suppressExternalNamespaces)
528 {
529 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "TargetFeature"));
530 }
531
532 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
533
534 if (!this.Messaging.EncounteredError)
535 {
536 section.AddSymbol(new HelpPluginSymbol(sourceLineNumbers, parentId)
537 {
538 HelpNamespaceRef = parentId.Id,
539 ParentHelpNamespaceRef = namespaceParent,
540 HxTFileRef = hxt,
541 HxAFileRef = hxa,
542 ParentHxTFileRef = hxtParent,
543 });
544
545 if (pluginVS05)
546 {
547 if (YesNoType.No == suppressExternalNamespaces)
548 {
549 // Bring in the help 2 base namespace components for VS 2005
550 this.ParseHelper.CreateComplexReference(section, sourceLineNumbers, ComplexReferenceParentType.Feature, feature, String.Empty,
551 ComplexReferenceChildType.ComponentGroup, "Help2_VS2005_Namespace_Components", false);
552 // Reference CustomAction since nothing will happen without it
553 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "CA_HxMerge_VSIPCC_VSCC");
554 }
555 }
556 else if (pluginVS08)
557 {
558 if (YesNoType.No == suppressExternalNamespaces)
559 {
560 // Bring in the help 2 base namespace components for VS 2008
561 this.ParseHelper.CreateComplexReference(section, sourceLineNumbers, ComplexReferenceParentType.Feature, feature, String.Empty,
562 ComplexReferenceChildType.ComponentGroup, "Help2_VS2008_Namespace_Components", false);
563 // Reference CustomAction since nothing will happen without it
564 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "CA_ScheduleExtHelpPlugin_VSCC_VSIPCC");
565 }
566 }
567 else
568 {
569 // Reference the parent namespace to enforce the foreign key relationship
570 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, VSSymbolDefinitions.HelpNamespace, namespaceParent);
571 }
572 }
573 }
574
575 private void ParseVsixPackageElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string fileId)
576 {
577 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
578 var propertyId = "VS_VSIX_INSTALLER_PATH";
579 string packageId = null;
580 var permanent = YesNoType.NotSet;
581 string target = null;
582 string targetVersion = null;
583 var vital = YesNoType.NotSet;
584
585 foreach (var attrib in element.Attributes())
586 {
587 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
588 {
589 switch (attrib.Name.LocalName)
590 {
591 case "File":
592 if (String.IsNullOrEmpty(fileId))
593 {
594 fileId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
595 }
596 else
597 {
598 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "File", "File"));
599 }
600 break;
601 case "PackageId":
602 packageId = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
603 break;
604 case "Permanent":
605 permanent = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
606 break;
607 case "Target":
608 target = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
609 switch (target.ToLowerInvariant())
610 {
611 case "integrated":
612 case "integratedshell":
613 target = "IntegratedShell";
614 break;
615 case "professional":
616 target = "Pro";
617 break;
618 case "premium":
619 target = "Premium";
620 break;
621 case "ultimate":
622 target = "Ultimate";
623 break;
624 case "vbexpress":
625 target = "VBExpress";
626 break;
627 case "vcexpress":
628 target = "VCExpress";
629 break;
630 case "vcsexpress":
631 target = "VCSExpress";
632 break;
633 case "vwdexpress":
634 target = "VWDExpress";
635 break;
636 }
637 break;
638 case "TargetVersion":
639 targetVersion = this.ParseHelper.GetAttributeVersionValue(sourceLineNumbers, attrib);
640 break;
641 case "Vital":
642 vital = this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib);
643 break;
644 case "VsixInstallerPathProperty":
645 propertyId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
646 break;
647 default:
648 this.ParseHelper.UnexpectedAttribute(element, attrib);
649 break;
650 }
651 }
652 else
653 {
654 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
655 }
656 }
657
658 if (String.IsNullOrEmpty(fileId))
659 {
660 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "File"));
661 }
662
663 if (String.IsNullOrEmpty(packageId))
664 {
665 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "PackageId"));
666 }
667
668 if (!String.IsNullOrEmpty(target) && String.IsNullOrEmpty(targetVersion))
669 {
670 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "TargetVersion", "Target"));
671 }
672 else if (String.IsNullOrEmpty(target) && !String.IsNullOrEmpty(targetVersion))
673 {
674 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Target", "TargetVersion"));
675 }
676
677 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
678
679 if (!this.Messaging.EncounteredError)
680 {
681 // Ensure there is a reference to the AppSearch Property that will find the VsixInstaller.exe.
682 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.Property, propertyId);
683
684 // Ensure there is a reference to the package file (even if we are a child under it).
685 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.File, fileId);
686
687 var cmdlinePrefix = "/q ";
688
689 if (!String.IsNullOrEmpty(target))
690 {
691 cmdlinePrefix = String.Format("{0} /skuName:{1} /skuVersion:{2}", cmdlinePrefix, target, targetVersion);
692 }
693
694 var installAfter = "WriteRegistryValues"; // by default, come after the registry key registration.
695
696 var installNamePerUser = this.ParseHelper.CreateIdentifier("viu", componentId, fileId, "per-user", target, targetVersion);
697 var installNamePerMachine = this.ParseHelper.CreateIdentifier("vim", componentId, fileId, "per-machine", target, targetVersion);
698 var installCmdLinePerUser = String.Format("{0} \"[#{1}]\"", cmdlinePrefix, fileId);
699 var installCmdLinePerMachine = String.Concat(installCmdLinePerUser, " /admin");
700 var installConditionPerUser = String.Format("NOT ALLUSERS AND ${0}=3", componentId); // only execute if the Component being installed.
701 var installConditionPerMachine = String.Format("ALLUSERS AND ${0}=3", componentId); // only execute if the Component being installed.
702 var installPerUserCA = new CustomActionSymbol(sourceLineNumbers, installNamePerUser)
703 {
704 ExecutionType = CustomActionExecutionType.Deferred,
705 Impersonate = true,
706 };
707 var installPerMachineCA = new CustomActionSymbol(sourceLineNumbers, installNamePerMachine)
708 {
709 ExecutionType = CustomActionExecutionType.Deferred,
710 Impersonate = false,
711 };
712
713 // If the package is not vital, mark the install action as continue.
714 if (vital == YesNoType.No)
715 {
716 installPerUserCA.IgnoreResult = true;
717 installPerMachineCA.IgnoreResult = true;
718 }
719 else // the package is vital so ensure there is a rollback action scheduled.
720 {
721 var rollbackNamePerUser = this.ParseHelper.CreateIdentifier("vru", componentId, fileId, "per-user", target, targetVersion);
722 var rollbackNamePerMachine = this.ParseHelper.CreateIdentifier("vrm", componentId, fileId, "per-machine", target, targetVersion);
723 var rollbackCmdLinePerUser = String.Concat(cmdlinePrefix, " /u:\"", packageId, "\"");
724 var rollbackCmdLinePerMachine = String.Concat(rollbackCmdLinePerUser, " /admin");
725 var rollbackConditionPerUser = String.Format("NOT ALLUSERS AND NOT Installed AND ${0}=2 AND ?{0}>2", componentId); // NOT Installed && Component being installed but not installed already.
726 var rollbackConditionPerMachine = String.Format("ALLUSERS AND NOT Installed AND ${0}=2 AND ?{0}>2", componentId); // NOT Installed && Component being installed but not installed already.
727 var rollbackPerUserCA = new CustomActionSymbol(sourceLineNumbers, rollbackNamePerUser)
728 {
729 ExecutionType = CustomActionExecutionType.Rollback,
730 IgnoreResult = true,
731 Impersonate = true,
732 };
733 var rollbackPerMachineCA = new CustomActionSymbol(sourceLineNumbers, rollbackNamePerMachine)
734 {
735 ExecutionType = CustomActionExecutionType.Rollback,
736 IgnoreResult = true,
737 Impersonate = false,
738 };
739
740 this.SchedulePropertyExeAction(section, sourceLineNumbers, rollbackNamePerUser, propertyId, rollbackCmdLinePerUser, rollbackPerUserCA, rollbackConditionPerUser, null, installAfter);
741 this.SchedulePropertyExeAction(section, sourceLineNumbers, rollbackNamePerMachine, propertyId, rollbackCmdLinePerMachine, rollbackPerMachineCA, rollbackConditionPerMachine, null, rollbackNamePerUser.Id);
742
743 installAfter = rollbackNamePerMachine.Id;
744 }
745
746 this.SchedulePropertyExeAction(section, sourceLineNumbers, installNamePerUser, propertyId, installCmdLinePerUser, installPerUserCA, installConditionPerUser, null, installAfter);
747 this.SchedulePropertyExeAction(section, sourceLineNumbers, installNamePerMachine, propertyId, installCmdLinePerMachine, installPerMachineCA, installConditionPerMachine, null, installNamePerUser.Id);
748
749 // If not permanent, schedule the uninstall custom action.
750 if (permanent != YesNoType.Yes)
751 {
752 var uninstallNamePerUser = this.ParseHelper.CreateIdentifier("vuu", componentId, fileId, "per-user", target ?? String.Empty, targetVersion ?? String.Empty);
753 var uninstallNamePerMachine = this.ParseHelper.CreateIdentifier("vum", componentId, fileId, "per-machine", target ?? String.Empty, targetVersion ?? String.Empty);
754 var uninstallCmdLinePerUser = String.Concat(cmdlinePrefix, " /u:\"", packageId, "\"");
755 var uninstallCmdLinePerMachine = String.Concat(uninstallCmdLinePerUser, " /admin");
756 var uninstallConditionPerUser = String.Format("NOT ALLUSERS AND ${0}=2 AND ?{0}>2", componentId); // Only execute if component is being uninstalled.
757 var uninstallConditionPerMachine = String.Format("ALLUSERS AND ${0}=2 AND ?{0}>2", componentId); // Only execute if component is being uninstalled.
758 var uninstallPerUserCA = new CustomActionSymbol(sourceLineNumbers, uninstallNamePerUser)
759 {
760 ExecutionType = CustomActionExecutionType.Deferred,
761 IgnoreResult = true,
762 Impersonate = true,
763 };
764 var uninstallPerMachineCA = new CustomActionSymbol(sourceLineNumbers, uninstallNamePerMachine)
765 {
766 ExecutionType = CustomActionExecutionType.Deferred,
767 IgnoreResult = true,
768 Impersonate = false,
769 };
770
771 this.SchedulePropertyExeAction(section, sourceLineNumbers, uninstallNamePerUser, propertyId, uninstallCmdLinePerUser, uninstallPerUserCA, uninstallConditionPerUser, "InstallFinalize", null);
772 this.SchedulePropertyExeAction(section, sourceLineNumbers, uninstallNamePerMachine, propertyId, uninstallCmdLinePerMachine, uninstallPerMachineCA, uninstallConditionPerMachine, "InstallFinalize", null);
773 }
774 }
775 }
776
777 private void SchedulePropertyExeAction(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier name, string source, string cmdline, CustomActionSymbol caTemplate, string condition, string beforeAction, string afterAction)
778 {
779 const SequenceTable sequence = SequenceTable.InstallExecuteSequence;
780
781 caTemplate.SourceType = CustomActionSourceType.Property;
782 caTemplate.Source = source;
783 caTemplate.TargetType = CustomActionTargetType.Exe;
784 caTemplate.Target = cmdline;
785 section.AddSymbol(caTemplate);
786
787 section.AddSymbol(new WixActionSymbol(sourceLineNumbers, new Identifier(name.Access, sequence, name.Id))
788 {
789 SequenceTable = SequenceTable.InstallExecuteSequence,
790 Action = name.Id,
791 Condition = condition,
792 // no explicit sequence
793 Before = beforeAction,
794 After = afterAction,
795 Overridable = false,
796 });
797
798 if (null != beforeAction)
799 {
800 if (WindowsInstallerStandard.IsStandardAction(beforeAction))
801 {
802 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction);
803 }
804 else
805 {
806 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction);
807 }
808 }
809
810 if (null != afterAction)
811 {
812 if (WindowsInstallerStandard.IsStandardAction(afterAction))
813 {
814 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction);
815 }
816 else
817 {
818 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction);
819 }
820 }
821 }
822
823 private void AddReferenceToRegisterMicrosoftHelp(IntermediateSection section, SourceLineNumber sourceLineNumbers)
824 {
825 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8");
826 }
827 }
828}
diff --git a/src/ext/VisualStudio/wixext/VSDecompiler.cs b/src/ext/VisualStudio/wixext/VSDecompiler.cs
new file mode 100644
index 00000000..08dc364a
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSDecompiler.cs
@@ -0,0 +1,298 @@
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.VisualStudio
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 VS = WixToolset.Extensions.Serialize.VS;
13 using Wix = WixToolset.Data.Serialize;
14
15 /// <summary>
16 /// The decompiler for the WiX Toolset Visual Studio Extension.
17 /// </summary>
18 public sealed class VSDecompiler : DecompilerExtension
19 {
20 /// <summary>
21 /// Creates a decompiler for VS Extension.
22 /// </summary>
23 public VSDecompiler()
24 {
25 this.TableDefinitions = VSExtensionData.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 VSExtensionData.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 "HelpFile":
47 this.DecompileHelpFileTable(table);
48 break;
49 case "HelpFileToNamespace":
50 this.DecompileHelpFileToNamespaceTable(table);
51 break;
52 case "HelpFilter":
53 this.DecompileHelpFilterTable(table);
54 break;
55 case "HelpFilterToNamespace":
56 this.DecompileHelpFilterToNamespaceTable(table);
57 break;
58 case "HelpNamespace":
59 this.DecompileHelpNamespaceTable(table);
60 break;
61 case "HelpPlugin":
62 this.DecompileHelpPluginTable(table);
63 break;
64 default:
65 base.DecompileTable(table);
66 break;
67 }
68 }
69
70 /// <summary>
71 /// Decompile the HelpFile table.
72 /// </summary>
73 /// <param name="table">The table to decompile.</param>
74 private void DecompileHelpFileTable(Table table)
75 {
76 foreach (Row row in table.Rows)
77 {
78 VS.HelpFile helpFile = new VS.HelpFile();
79
80 helpFile.Id = (string)row[0];
81
82 helpFile.Name = (string)row[1];
83
84 if (null != row[2])
85 {
86 helpFile.Language = (int)row[2];
87 }
88
89 if (null != row[4])
90 {
91 helpFile.Index = (string)row[4];
92 }
93
94 if (null != row[5])
95 {
96 helpFile.Search = (string)row[5];
97 }
98
99 if (null != row[6])
100 {
101 helpFile.AttributeIndex = (string)row[6];
102 }
103
104 if (null != row[7])
105 {
106 helpFile.SampleLocation = (string)row[7];
107 }
108
109 if (this.Core.RootElement is Wix.Module)
110 {
111 helpFile.SuppressCustomActions = VS.YesNoType.yes;
112 }
113
114 Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[3]);
115 if (null != file)
116 {
117 file.AddChild(helpFile);
118 }
119 else
120 {
121 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_HxS", (string)row[3], "File"));
122 }
123 }
124 }
125
126 /// <summary>
127 /// Decompile the HelpFileToNamespace table.
128 /// </summary>
129 /// <param name="table">The table to decompile.</param>
130 private void DecompileHelpFileToNamespaceTable(Table table)
131 {
132 foreach (Row row in table.Rows)
133 {
134 VS.HelpFileRef helpFileRef = new VS.HelpFileRef();
135
136 helpFileRef.Id = (string)row[0];
137
138 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
139 if (null != helpCollection)
140 {
141 helpCollection.AddChild(helpFileRef);
142 }
143 else
144 {
145 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
146 }
147 }
148 }
149
150 /// <summary>
151 /// Decompile the HelpFilter table.
152 /// </summary>
153 /// <param name="table">The table to decompile.</param>
154 private void DecompileHelpFilterTable(Table table)
155 {
156 foreach (Row row in table.Rows)
157 {
158 VS.HelpFilter helpFilter = new VS.HelpFilter();
159
160 helpFilter.Id = (string)row[0];
161
162 helpFilter.Name = (string)row[1];
163
164 if (null != row[2])
165 {
166 helpFilter.FilterDefinition = (string)row[2];
167 }
168
169 if (this.Core.RootElement is Wix.Module)
170 {
171 helpFilter.SuppressCustomActions = VS.YesNoType.yes;
172 }
173
174 this.Core.RootElement.AddChild(helpFilter);
175 }
176 }
177
178 /// <summary>
179 /// Decompile the HelpFilterToNamespace table.
180 /// </summary>
181 /// <param name="table">The table to decompile.</param>
182 private void DecompileHelpFilterToNamespaceTable(Table table)
183 {
184 foreach (Row row in table.Rows)
185 {
186 VS.HelpFilterRef helpFilterRef = new VS.HelpFilterRef();
187
188 helpFilterRef.Id = (string)row[0];
189
190 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
191 if (null != helpCollection)
192 {
193 helpCollection.AddChild(helpFilterRef);
194 }
195 else
196 {
197 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
198 }
199 }
200 }
201
202 /// <summary>
203 /// Decompile the HelpNamespace table.
204 /// </summary>
205 /// <param name="table">The table to decompile.</param>
206 private void DecompileHelpNamespaceTable(Table table)
207 {
208 foreach (Row row in table.Rows)
209 {
210 VS.HelpCollection helpCollection = new VS.HelpCollection();
211
212 helpCollection.Id = (string)row[0];
213
214 helpCollection.Name = (string)row[1];
215
216 if (null != row[3])
217 {
218 helpCollection.Description = (string)row[3];
219 }
220
221 if (this.Core.RootElement is Wix.Module)
222 {
223 helpCollection.SuppressCustomActions = VS.YesNoType.yes;
224 }
225
226 Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[2]);
227 if (null != file)
228 {
229 file.AddChild(helpCollection);
230 }
231 else if (0 != String.Compare(helpCollection.Id, "MS_VSIPCC_v80", StringComparison.Ordinal) &&
232 0 != String.Compare(helpCollection.Id, "MS.VSIPCC.v90", StringComparison.Ordinal))
233 {
234 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_Collection", (string)row[2], "File"));
235 }
236 this.Core.IndexElement(row, helpCollection);
237 }
238 }
239
240 /// <summary>
241 /// Decompile the HelpPlugin table.
242 /// </summary>
243 /// <param name="table">The table to decompile.</param>
244 private void DecompileHelpPluginTable(Table table)
245 {
246 foreach (Row row in table.Rows)
247 {
248 VS.PlugCollectionInto plugCollectionInto = new VS.PlugCollectionInto();
249
250 plugCollectionInto.TargetCollection = (string)row[1];
251
252 if (null != row[2])
253 {
254 plugCollectionInto.TableOfContents = (string)row[2];
255 }
256
257 if (null != row[3])
258 {
259 plugCollectionInto.Attributes = (string)row[3];
260 }
261
262 if (null != row[4])
263 {
264 plugCollectionInto.TargetTableOfContents = (string)row[4];
265 }
266
267 if (this.Core.RootElement is Wix.Module)
268 {
269 plugCollectionInto.SuppressExternalNamespaces = VS.YesNoType.yes;
270 }
271
272 //we cannot do this work because we cannot get the FeatureComponent table
273 //plugCollectionInto.TargetFeature = DecompileHelpComponents();
274
275 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[0]);
276 if (null != helpCollection)
277 {
278 helpCollection.AddChild(plugCollectionInto);
279 }
280 else
281 {
282 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[0], "HelpNamespace"));
283 }
284 }
285 }
286 //private string DecompileHelpComponents()
287 //{
288 // throw new NotImplementedException();
289 // //Find both known compontents from FeatureComponents table and build feature list
290
291 // //remove components from FeatureComponents
292
293 // //return a space delimited list of features that mapped to our help components
294 // return String.Empty;
295 //}
296 }
297#endif
298}
diff --git a/src/ext/VisualStudio/wixext/VSExtensionData.cs b/src/ext/VisualStudio/wixext/VSExtensionData.cs
new file mode 100644
index 00000000..51199d2c
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSExtensionData.cs
@@ -0,0 +1,27 @@
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.VisualStudio
4{
5 using WixToolset.Data;
6 using WixToolset.Extensibility;
7
8 public sealed class VSExtensionData : BaseExtensionData
9 {
10 /// <summary>
11 /// Gets the default culture.
12 /// </summary>
13 /// <value>The default culture.</value>
14 public override string DefaultCulture => "en-US";
15
16 public override bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
17 {
18 symbolDefinition = VSSymbolDefinitions.ByName(name);
19 return symbolDefinition != null;
20 }
21
22 public override Intermediate GetLibrary(ISymbolDefinitionCreator symbolDefinitions)
23 {
24 return Intermediate.Load(typeof(VSExtensionData).Assembly, "WixToolset.VisualStudio.vs.wixlib", symbolDefinitions);
25 }
26 }
27}
diff --git a/src/ext/VisualStudio/wixext/VSExtensionFactory.cs b/src/ext/VisualStudio/wixext/VSExtensionFactory.cs
new file mode 100644
index 00000000..c6e0cc31
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSExtensionFactory.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.VisualStudio
4{
5 using System;
6 using System.Collections.Generic;
7 using WixToolset.Extensibility;
8
9 public class VSExtensionFactory : BaseExtensionFactory
10 {
11 protected override IReadOnlyCollection<Type> ExtensionTypes => new[]
12 {
13 typeof(VSCompiler),
14 typeof(VSExtensionData),
15 typeof(VSWindowsInstallerBackendBinderExtension),
16 };
17 }
18}
diff --git a/src/ext/VisualStudio/wixext/VSTableDefinitions.cs b/src/ext/VisualStudio/wixext/VSTableDefinitions.cs
new file mode 100644
index 00000000..0c3ca907
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSTableDefinitions.cs
@@ -0,0 +1,97 @@
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.VisualStudio
4{
5 using WixToolset.Data.WindowsInstaller;
6
7 public static class VSTableDefinitions
8 {
9 public static readonly TableDefinition HelpFile = new TableDefinition(
10 "HelpFile",
11 VSSymbolDefinitions.HelpFile,
12 new[]
13 {
14 new ColumnDefinition("HelpFileKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary Key for HelpFile Table (required).", modularizeType: ColumnModularizeType.Column),
15 new ColumnDefinition("HelpFileName", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Internal Microsoft Help ID for this HelpFile (required)."),
16 new ColumnDefinition("LangID", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Language, description: "Language ID for content file (optional)."),
17 new ColumnDefinition("File_HxS", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxS (Title) file (required).", modularizeType: ColumnModularizeType.Column),
18 new ColumnDefinition("File_HxI", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxI (Index) file (optional).", modularizeType: ColumnModularizeType.Column),
19 new ColumnDefinition("File_HxQ", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxQ (Query) file (optional).", modularizeType: ColumnModularizeType.Column),
20 new ColumnDefinition("File_HxR", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxR (Attributes) file (optional).", modularizeType: ColumnModularizeType.Column),
21 new ColumnDefinition("File_Samples", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for a file that is in the 'root' of the samples directory for this HelpFile (optional).", modularizeType: ColumnModularizeType.Column),
22 },
23 symbolIdIsPrimaryKey: true
24 );
25
26 public static readonly TableDefinition HelpFileToNamespace = new TableDefinition(
27 "HelpFileToNamespace",
28 VSSymbolDefinitions.HelpFileToNamespace,
29 new[]
30 {
31 new ColumnDefinition("HelpFile_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpFile", keyColumn: 1, description: "Foreign key into HelpFile table (required).", modularizeType: ColumnModularizeType.Column),
32 new ColumnDefinition("HelpNamespace_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpNamespace", keyColumn: 1, description: "Foreign key into HelpNamespace table (required)."),
33 },
34 symbolIdIsPrimaryKey: false
35 );
36
37 public static readonly TableDefinition HelpFilter = new TableDefinition(
38 "HelpFilter",
39 VSSymbolDefinitions.HelpFilter,
40 new[]
41 {
42 new ColumnDefinition("FilterKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary Key for HelpFilter (required).", modularizeType: ColumnModularizeType.Column),
43 new ColumnDefinition("Description", ColumnType.Localized, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Friendly name for Filter (required)."),
44 new ColumnDefinition("QueryString", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Query String for Help Filter (optional)."),
45 },
46 symbolIdIsPrimaryKey: true
47 );
48
49 public static readonly TableDefinition HelpFilterToNamespace = new TableDefinition(
50 "HelpFilterToNamespace",
51 VSSymbolDefinitions.HelpFilterToNamespace,
52 new[]
53 {
54 new ColumnDefinition("HelpFilter_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpFilter", keyColumn: 1, description: "Foreign key into HelpFilter table (required).", modularizeType: ColumnModularizeType.Column),
55 new ColumnDefinition("HelpNamespace_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpNamespace", keyColumn: 1, description: "Foreign key into HelpNamespace table (required)."),
56 },
57 symbolIdIsPrimaryKey: false
58 );
59
60 public static readonly TableDefinition HelpNamespace = new TableDefinition(
61 "HelpNamespace",
62 VSSymbolDefinitions.HelpNamespace,
63 new[]
64 {
65 new ColumnDefinition("NamespaceKey", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary Key for HelpNamespace (required)."),
66 new ColumnDefinition("NamespaceName", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Internal Microsoft Help ID for this Namespace (required)."),
67 new ColumnDefinition("File_Collection", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxC (Collection) file (required).", modularizeType: ColumnModularizeType.Column),
68 new ColumnDefinition("Description", ColumnType.Localized, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Friendly name for Namespace (optional)."),
69 },
70 symbolIdIsPrimaryKey: true
71 );
72
73 public static readonly TableDefinition HelpPlugin = new TableDefinition(
74 "HelpPlugin",
75 VSSymbolDefinitions.HelpPlugin,
76 new[]
77 {
78 new ColumnDefinition("HelpNamespace_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpNamespace", keyColumn: 1, description: "Foreign key into HelpNamespace table for the child namespace that will be plugged into the parent namespace (required)."),
79 new ColumnDefinition("HelpNamespace_Parent", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "HelpNamespace", keyColumn: 1, description: "Foreign key into HelpNamespace table for the parent namespace into which the child will be inserted (required)."),
80 new ColumnDefinition("File_HxT", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxT file of child namespace (optional).", modularizeType: ColumnModularizeType.Column),
81 new ColumnDefinition("File_HxA", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxA (Attributes) file of child namespace (optional).", modularizeType: ColumnModularizeType.Column),
82 new ColumnDefinition("File_ParentHxT", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "File", keyColumn: 1, description: "Key for HxT file of parent namespace that now includes the new child namespace (optional).", modularizeType: ColumnModularizeType.Column),
83 },
84 symbolIdIsPrimaryKey: false
85 );
86
87 public static readonly TableDefinition[] All = new[]
88 {
89 HelpFile,
90 HelpFileToNamespace,
91 HelpFilter,
92 HelpFilterToNamespace,
93 HelpNamespace,
94 HelpPlugin,
95 };
96 }
97}
diff --git a/src/ext/VisualStudio/wixext/VSWindowsInstallerBackendBinderExtension.cs b/src/ext/VisualStudio/wixext/VSWindowsInstallerBackendBinderExtension.cs
new file mode 100644
index 00000000..d0d8648c
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/VSWindowsInstallerBackendBinderExtension.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.VisualStudio
4{
5 using System.Collections.Generic;
6 using WixToolset.Data.WindowsInstaller;
7 using WixToolset.Extensibility;
8
9 public class VSWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension
10 {
11 public override IReadOnlyCollection<TableDefinition> TableDefinitions => VSTableDefinitions.All;
12 }
13}
diff --git a/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.csproj b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.csproj
new file mode 100644
index 00000000..20282720
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.csproj
@@ -0,0 +1,30 @@
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 <RootNamespace>WixToolset.VisualStudio</RootNamespace>
8 <Description>WiX Toolset Visual Studio Extension</Description>
9 <Title>WiX Toolset VS Extension</Title>
10 <IsTool>true</IsTool>
11 <IncludeSymbols>true</IncludeSymbols>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <EmbeddedResource Include="$(OutputPath)..\vs.wixlib" />
16 </ItemGroup>
17
18 <ItemGroup>
19 <ProjectReference Include="..\wixlib\vs.wixproj" ReferenceOutputAssembly="false" Condition=" '$(NCrunch)'=='' " />
20 </ItemGroup>
21
22 <ItemGroup>
23 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" />
24 </ItemGroup>
25
26 <ItemGroup>
27 <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="all" />
28 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="all" />
29 </ItemGroup>
30</Project>
diff --git a/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.nuspec b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.nuspec
new file mode 100644
index 00000000..51c9708e
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.nuspec
@@ -0,0 +1,23 @@
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="x86\*.pdb" target="pdbs\x86" />
22 </files>
23</package>
diff --git a/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.targets b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.targets
new file mode 100644
index 00000000..4542375f
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.targets
@@ -0,0 +1,8 @@
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 <ItemGroup>
6 <WixExtension Include="$(MSBuildThisFileDirectory)..\tools\WixToolset.VisualStudio.wixext.dll" />
7 </ItemGroup>
8</Project>
diff --git a/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.v3.ncrunchproject b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.v3.ncrunchproject
new file mode 100644
index 00000000..56556a9f
--- /dev/null
+++ b/src/ext/VisualStudio/wixext/WixToolset.VisualStudio.wixext.v3.ncrunchproject
@@ -0,0 +1,7 @@
1<ProjectConfiguration>
2 <Settings>
3 <AdditionalFilesToIncludeForProject>
4 <Value>..\..\build\Debug\vs.wixlib</Value>
5 </AdditionalFilesToIncludeForProject>
6 </Settings>
7</ProjectConfiguration> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/HTML_Help_Registration__RTL_X86.wxs b/src/ext/VisualStudio/wixlib/HTML_Help_Registration__RTL_X86.wxs
new file mode 100644
index 00000000..2bdb810a
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/HTML_Help_Registration__RTL_X86.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">
4 <Fragment>
5 <DirectoryRef Id="CommonFilesFolder">
6 <Directory Id="MSShared" Name="Microsoft Shared">
7 <Directory Id="DevHelp" Name="DevHelp">
8 <Directory Id="VSIPCC" Name="VSIPCC">
9 </Directory>
10 </Directory>
11 </Directory>
12 </DirectoryRef>
13 </Fragment>
14
15 <Fragment Id="HTML_Help_Registration_">
16 <Binary Id="BIN_File_46002" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_46002.dll" />
17 <Binary Id="BIN_File_46001" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_46001.dll" />
18 <Binary Id="BIN_File_107602" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_107602.dll" />
19 <!-- We are stuck using GUID'ed ids here because they were hardcoded in the Help2 dlls-->
20 <CustomAction Id="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="BeginTransaction" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
21 <CustomAction Id="CA_RegisterPlugIn.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RegisterPlugIn2" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
22 <CustomAction Id="CA_CommitHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="CommitTransaction" Return="ignore" Execute="commit" Impersonate="no" BinaryRef="BIN_File_46001" />
23 <CustomAction Id="CA_CommitHelpTransactionNoRB.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="CommitTransaction" Return="ignore" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
24 <CustomAction Id="CA_ExportTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="ExportTempHxDs" BinaryRef="BIN_File_46002" />
25 <CustomAction Id="CA_RegisterNamespace.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RegisterNamespace2" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
26 <CustomAction Id="CA_RollbackTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RemoveTempHxDs" Execute="rollback" Impersonate="no" BinaryRef="BIN_File_46001" />
27 <CustomAction Id="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RegisterMicrosoftHelp" Return="ignore" BinaryRef="BIN_File_46002" />
28 <CustomAction Id="CA_RegisterHelpFile.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RegisterHelpFile" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
29 <CustomAction Id="CA_RegisterFilter.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RegisterFilter2" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
30 <CustomAction Id="CA_RemoveNamespace.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RemoveNamespace" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
31 <CustomAction Id="CA_RemoveTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RemoveTempHxDs" Return="ignore" BinaryRef="BIN_File_46001" />
32 <!-- This isn't actually executed, but the Help2 dlls use it to find the key for the binary file-->
33 <CustomAction Id="CA_DummyForHXDS_DLL.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="Bogus" BinaryRef="BIN_File_107602" />
34 <CustomAction Id="CA_RollbackHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RollbackTransaction" Execute="rollback" Impersonate="no" BinaryRef="BIN_File_46001" />
35 <CustomAction Id="CA_RemoveHelpFile.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="RemoveHelpFile" Execute="deferred" Impersonate="no" BinaryRef="BIN_File_46001" />
36 <CustomAction Id="CA_UnRegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" DllEntry="UnRegisterMicrosoftHelp" Return="ignore" BinaryRef="BIN_File_46002" />
37
38 <InstallExecuteSequence>
39 <Custom Action="CA_ExportTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" Before="ProcessComponents" />
40
41 <Custom Action="CA_RollbackHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" Before="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" />
42 <Custom Action="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" After="RemoveFiles" />
43 <Custom Action="CA_UnRegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" After="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" />
44
45 <Custom Action="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" After="InstallFiles" />
46
47 <Custom Action="CA_CommitHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" Before="InstallFinalize" Condition="( NOT RollbackDisabled )" />
48 <Custom Action="CA_CommitHelpTransactionNoRB.3643236F_FC70_11D3_A536_0090278A1BB8" Before="InstallFinalize" Condition="( RollbackDisabled )" />
49 <Custom Action="CA_RemoveTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" After="InstallFinalize" />
50 </InstallExecuteSequence>
51
52 <CustomTable Id="HelpPlugin">
53 <Column Id="HelpNamespace_" Type="string" Width="72" PrimaryKey="yes" />
54 <Column Id="HelpNamespace_Parent" Type="string" Width="72" PrimaryKey="yes" />
55 <Column Id="File_HxT" Nullable="yes" Type="string" Width="72" />
56 <Column Id="File_HxA" Nullable="yes" Type="string" Width="72" />
57 <Column Id="File_ParentHxT" Nullable="yes" Type="string" Width="72" />
58 </CustomTable>
59
60 <CustomTable Id="HelpNamespace">
61 <Column Id="NamespaceKey" Type="string" Width="72" PrimaryKey="yes" />
62 <Column Id="NamespaceName" Type="string" Width="0" />
63 <Column Id="File_Collection" Type="string" Width="72" />
64 <Column Id="Description" Nullable="yes" Localizable="yes" Type="string" Width="0" />
65 </CustomTable>
66 </Fragment>
67</Wix>
diff --git a/src/ext/VisualStudio/wixlib/Redist/BIN_File_107602.dll b/src/ext/VisualStudio/wixlib/Redist/BIN_File_107602.dll
new file mode 100644
index 00000000..aef2cf29
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/Redist/BIN_File_107602.dll
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/Redist/BIN_File_46001.dll b/src/ext/VisualStudio/wixlib/Redist/BIN_File_46001.dll
new file mode 100644
index 00000000..9e470267
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/Redist/BIN_File_46001.dll
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/Redist/BIN_File_46002.dll b/src/ext/VisualStudio/wixlib/Redist/BIN_File_46002.dll
new file mode 100644
index 00000000..ae9c30dd
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/Redist/BIN_File_46002.dll
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/VS11.wxs b/src/ext/VisualStudio/wixlib/VS11.wxs
new file mode 100644
index 00000000..d3f31843
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS11.wxs
@@ -0,0 +1,205 @@
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 <Fragment>
6 <Property Id="VS11_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS11DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS11ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS11_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS11DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS11ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS11_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS11ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw">
24 <DirectorySearch Id="VS11XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS11XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS11_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS11DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS11ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS11_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVs11BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS11_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS11RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS11DEVENV" Secure="yes">
53 <RegistrySearch Id="VS11DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS11Setup" Property="VS11DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS11DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS11Setup" Before="InstallFinalize" Overridable="yes" Condition="VS11DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS11InstallVSTemplates" Property="VS11DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS11DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS11InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS11DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# project system is installed as a part of -->
76 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
77 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
78 <!-- C# language tools were installed as a part of VS 11 setup. -->
79 <Fragment>
80 <Property Id="VS11_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
81 <RegistrySearch Id="SearchForVCS11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC#" Name="ProductDir" Type="raw" />
82 </Property>
83 </Fragment>
84
85 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
86 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
87 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
88 <!-- Basic language tools were installed as a part of VS 11 setup. -->
89 <Fragment>
90 <Property Id="VS11_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
91 <RegistrySearch Id="SearchForVB11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VB" Name="ProductDir" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- Indicates whether the Visual Web Developer 11 Express IDE component is installed. -->
96 <!-- If this property is set, that means Visual Web Developer 11 Express Edition is -->
97 <!-- installed on the system. -->
98 <Fragment>
99 <Property Id="VWD11EXPRESS_IDE" Secure="yes">
100 <ComponentSearch Id="SearchForVwdExpressIde11Component" Guid="92A0CBA0-BF39-422D-87FA-AB64564CD136" Type="file">
101 <FileSearch Id="VwdExpressIde11" Name="vwdexpress.exe" />
102 </ComponentSearch>
103 </Property>
104 </Fragment>
105 <!-- Custom action definition to run vwdexpress.exe /setup -->
106 <Fragment>
107 <CustomAction Id="VWD11Setup" Property="VWD11EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
108 <PropertyRef Id="VWD11EXPRESS_IDE" />
109 <InstallExecuteSequence>
110 <Custom Action="VWD11Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD11EXPRESS_IDE" />
111 </InstallExecuteSequence>
112 </Fragment>
113 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
114 <Fragment>
115 <CustomAction Id="VWD11InstallVSTemplates" Property="VWD11EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
116 <PropertyRef Id="VWD11EXPRESS_IDE" />
117 <InstallExecuteSequence>
118 <Custom Action="VWD11InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD11EXPRESS_IDE" />
119 </InstallExecuteSequence>
120 </Fragment>
121
122 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
123 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
124 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
125 <!-- Web Developer language tools were installed as a part of VS 11 setup. -->
126 <Fragment>
127 <Property Id="VS11_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
128 <ComponentSearch Id="SearchForVWD11ProjectSystemUnderVSSetup" Guid="03E73DF8-BED3-44BB-BE2E-BAC10FAE723E" />
129 <ComponentSearch Id="SearchForVWD11ProjectSystemUnderVWDSetup" Guid="3D7D4A9F-E3D7-4F13-9907-AF4F3CD75D33" Type="directory" />
130 </Property>
131 </Fragment>
132
133 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
134 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
135 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
136 <!-- C++ language tools were installed as a part of VS 11 setup. -->
137 <Fragment>
138 <Property Id="VS11_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
139 <RegistrySearch Id="SearchForVC11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC" Name="ProductDir" Type="raw" />
140 </Property>
141 </Fragment>
142
143 <!-- Indicates whether the Visual Studio 11 Team Test project system is installed -->
144 <Fragment>
145 <Property Id="VS11_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
146 <RegistrySearch Id="SearchForVSTS11TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
147 </Property>
148 </Fragment>
149
150 <!-- Indicates whether the Visual Studio 11 Database project system is installed -->
151 <Fragment>
152 <Property Id="VS11_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
153 <ComponentSearch Id="SearchForVS11DBSystemUnderVSSetup" Guid="E781FFA7-55F5-4E8C-9275-7B7EF035B13B" />
154 </Property>
155 </Fragment>
156
157 <!-- Indicates whether the WiX project system is installed for VS11 -->
158 <Fragment>
159 <Property Id="VS11_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
160 <!-- Component search for the .pkgdef file for VS11 -->
161 <ComponentSearch Id="SearchForVS11WixSystemUnderVSSetup" Guid="55489E7A-7DCA-5228-975E-39C51BE332D9" />
162 </Property>
163 </Fragment>
164
165 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
166 <Fragment>
167 <Property Id="VS11_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
168 <RegistrySearch Id="SearchForVSTS11ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
169 </Property>
170 </Fragment>
171
172 <!-- Indicates whether the Visual Studio F# project system is installed -->
173 <Fragment>
174 <Property Id="VS11_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
175 <RegistrySearch Id="SearchForVSTS11FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#" Name="ProductDir" Type="raw" />
176 </Property>
177 </Fragment>
178
179 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
180 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
181 <!-- on the system. -->
182 <Fragment>
183 <Property Id="VS11WINEXPRESS_IDE" Secure="yes">
184 <ComponentSearch Id="SearchForVS11WinExpressIdeComponent" Guid="A7A5FD99-1DFE-4AA8-A563-4DF5E0DD89E1" Type="file">
185 <FileSearch Id="VS11WinExpressIde" Name="vswinexpress.exe" />
186 </ComponentSearch>
187 </Property>
188 </Fragment>
189 <!-- Custom action definition to run vswinexpress.exe /setup -->
190 <Fragment>
191 <CustomAction Id="VS11WinExpressSetup" Property="VS11WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
192 <PropertyRef Id="VS11WINEXPRESS_IDE" />
193 <InstallExecuteSequence>
194 <Custom Action="VS11WinExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS11WINEXPRESS_IDE" />
195 </InstallExecuteSequence>
196 </Fragment>
197 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
198 <Fragment>
199 <CustomAction Id="VS11WinExpressInstallVSTemplates" Property="VS11WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
200 <PropertyRef Id="VS11WINEXPRESS_IDE" />
201 <InstallExecuteSequence>
202 <Custom Action="VS11WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS11WINEXPRESS_IDE" />
203 </InstallExecuteSequence>
204 </Fragment>
205</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS14.wxs b/src/ext/VisualStudio/wixlib/VS14.wxs
new file mode 100644
index 00000000..83449802
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS14.wxs
@@ -0,0 +1,186 @@
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 <Fragment>
6 <Property Id="VS14_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS14DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS14ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS14_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS14DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS14ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS14_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS14ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw">
24 <DirectorySearch Id="VS14XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS14XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS14_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS14DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS14ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS14_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVS14BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS14_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS14RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS14DEVENV" Secure="yes">
53 <RegistrySearch Id="VS14DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS14Setup" Property="VS14DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS14DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS14Setup" Before="InstallFinalize" Overridable="yes" Condition="VS14DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS14InstallVSTemplates" Property="VS14DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS14DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS14InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS14DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# project system is installed as a part of -->
76 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
77 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
78 <!-- C# language tools were installed as a part of VS 14 setup. -->
79 <Fragment>
80 <Property Id="VS14_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
81 <RegistrySearch Id="SearchForVCS14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC#" Name="ProductDir" Type="raw" />
82 </Property>
83 </Fragment>
84
85 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
86 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
87 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
88 <!-- Basic language tools were installed as a part of VS 14 setup. -->
89 <Fragment>
90 <Property Id="VS14_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
91 <RegistrySearch Id="SearchForVB14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VB" Name="ProductDir" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- Indicates whether the Visual Web Developer 14 Express IDE component is installed. -->
96 <!-- If this property is set, that means Visual Web Developer 14 Express Edition is -->
97 <!-- installed on the system. -->
98 <Fragment>
99 <Property Id="VWD14EXPRESS_IDE" Secure="yes">
100 <RegistrySearch Id="VWD14ExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
101 </Property>
102 </Fragment>
103 <!-- Custom action definition to run vwdexpress.exe /setup -->
104 <Fragment>
105 <CustomAction Id="VWD14Setup" Property="VWD14EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
106 <PropertyRef Id="VWD14EXPRESS_IDE" />
107 <InstallExecuteSequence>
108 <Custom Action="VWD14Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD14EXPRESS_IDE" />
109 </InstallExecuteSequence>
110 </Fragment>
111 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
112 <Fragment>
113 <CustomAction Id="VWD14InstallVSTemplates" Property="VWD14EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
114 <PropertyRef Id="VWD14EXPRESS_IDE" />
115 <InstallExecuteSequence>
116 <Custom Action="VWD14InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD14EXPRESS_IDE" />
117 </InstallExecuteSequence>
118 </Fragment>
119
120 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
121 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
122 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
123 <!-- Web Developer language tools were installed as a part of VS 14 setup. -->
124 <Fragment>
125 <Property Id="VS14_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
126 <ComponentSearch Id="SearchForVWD14ProjectSystemUnderVSSetup" Guid="274EB373-6B78-5EBD-8A6C-6D8094E58ECB" />
127 <ComponentSearch Id="SearchForVWD14ProjectSystemUnderVWDSetup" Guid="71EBDA4A-4A15-426F-95C4-4FC051FD7AA4" Type="directory" />
128 </Property>
129 </Fragment>
130
131 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
132 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
133 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
134 <!-- C++ language tools were installed as a part of VS 14 setup. -->
135 <Fragment>
136 <Property Id="VS14_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
137 <RegistrySearch Id="SearchForVC14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC" Name="ProductDir" Type="raw" />
138 </Property>
139 </Fragment>
140
141 <!-- Indicates whether the Visual Studio 14 Team Test project system is installed -->
142 <Fragment>
143 <Property Id="VS14_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
144 <RegistrySearch Id="SearchForVSTS14TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
145 </Property>
146 </Fragment>
147
148 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
149 <Fragment>
150 <Property Id="VS14_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
151 <RegistrySearch Id="SearchForVSTS14ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
152 </Property>
153 </Fragment>
154
155 <!-- Indicates whether the Visual Studio F# project system is installed -->
156 <Fragment>
157 <Property Id="VS14_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
158 <RegistrySearch Id="SearchForVSTS14FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\F#" Name="ProductDir" Type="raw" />
159 </Property>
160 </Fragment>
161
162 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
163 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
164 <!-- on the system. -->
165 <Fragment>
166 <Property Id="VS14WINEXPRESS_IDE" Secure="yes">
167 <RegistrySearch Id="VS14WinExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VSWinExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
168 </Property>
169 </Fragment>
170 <!-- Custom action definition to run vswinexpress.exe /setup -->
171 <Fragment>
172 <CustomAction Id="VS14WinExpressSetup" Property="VS14WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
173 <PropertyRef Id="VS14WINEXPRESS_IDE" />
174 <InstallExecuteSequence>
175 <Custom Action="VS14WinExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS14WINEXPRESS_IDE" />
176 </InstallExecuteSequence>
177 </Fragment>
178 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
179 <Fragment>
180 <CustomAction Id="VS14WinExpressInstallVSTemplates" Property="VS14WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
181 <PropertyRef Id="VS14WINEXPRESS_IDE" />
182 <InstallExecuteSequence>
183 <Custom Action="VS14WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS14WINEXPRESS_IDE" />
184 </InstallExecuteSequence>
185 </Fragment>
186</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2003.wxs b/src/ext/VisualStudio/wixlib/VS2003.wxs
new file mode 100644
index 00000000..1e5d36d9
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2003.wxs
@@ -0,0 +1,27 @@
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 <!-- Visual Studio 2003 .NET -->
6 <Fragment>
7 <Property Id="VS2003DEVENV" Secure="yes">
8 <RegistrySearch Id="VS2003DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS" Name="EnvironmentPath" Type="raw" />
9 </Property>
10 </Fragment>
11
12 <Fragment>
13 <CustomAction Id="VS2003Setup" Property="VS2003DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
14 <PropertyRef Id="VS2003DEVENV" />
15
16 <InstallExecuteSequence>
17 <Custom Action="VS2003Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2003DEVENV" />
18 </InstallExecuteSequence>
19 </Fragment>
20
21 <!-- Indicates whether or not the J# redistributable package 1.1 is installed. -->
22 <Fragment>
23 <Property Id="JSHARP_REDIST_11_INSTALLED" Secure="yes">
24 <RegistrySearch Id="JSharpRedist11RegKey" Root="HKLM" Key="Software\Microsoft\Visual JSharp Setup\Redist\v1.1.4322" Name="Install" Type="raw" />
25 </Property>
26 </Fragment>
27</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2005.wxs b/src/ext/VisualStudio/wixlib/VS2005.wxs
new file mode 100644
index 00000000..ef538099
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2005.wxs
@@ -0,0 +1,369 @@
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 <!-- Visual Studio 2005 -->
6 <Fragment>
7 <Property Id="VS2005DEVENV" Secure="yes">
8 <RegistrySearch Id="VS2005DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
9 </Property>
10 </Fragment>
11
12 <Fragment>
13 <Property Id="VS2005_ITEMTEMPLATES_DIR" Secure="yes">
14 <RegistrySearch Id="VS2005DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw">
15 <DirectorySearch Id="VS2005ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
16 </RegistrySearch>
17 </Property>
18 </Fragment>
19
20 <Fragment>
21 <Property Id="VS2005_PROJECTTEMPLATES_DIR" Secure="yes">
22 <RegistrySearch Id="VS2005DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw">
23 <DirectorySearch Id="VS2005ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
24 </RegistrySearch>
25 </Property>
26 </Fragment>
27
28 <Fragment>
29 <Property Id="VS2005_SCHEMAS_DIR" Secure="yes">
30 <RegistrySearch Id="VS2005ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="8.0" Type="raw">
31 <DirectorySearch Id="VS2005XmlPathSearch" Path="Xml" Depth="1">
32 <DirectorySearch Id="VS2005XmlSchemasPathSearch" Path="Schemas" Depth="1" />
33 </DirectorySearch>
34 </RegistrySearch>
35 </Property>
36 </Fragment>
37
38 <Fragment>
39 <Property Id="VS2005PROJECTAGGREGATOR2" Secure="yes">
40 <ComponentSearch Id="VS2005ProjectAggregator2Search" Guid="B0BB80E0-5CCC-474E-A75E-05DC1AE073BC" />
41 </Property>
42 </Fragment>
43
44 <Fragment>
45 <CustomAction Id="VS2005Setup" Property="VS2005DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
46 <PropertyRef Id="VS2005DEVENV" />
47
48 <InstallExecuteSequence>
49 <Custom Action="VS2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2005DEVENV" />
50 </InstallExecuteSequence>
51 </Fragment>
52
53 <Fragment>
54 <CustomAction Id="VS2005InstallVSTemplates" Property="VS2005DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
55 <PropertyRef Id="VS2005DEVENV" />
56
57 <InstallExecuteSequence>
58 <Custom Action="VS2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2005DEVENV" />
59 </InstallExecuteSequence>
60 </Fragment>
61
62 <!-- Location of the Visual Studio 2005 root installation directory. -->
63 <Fragment>
64 <Property Id="VS2005_ROOT_FOLDER" Secure="yes">
65 <RegistrySearch Id="SearchForVS2005RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="8.0" Type="raw" />
66 </Property>
67 </Fragment>
68
69 <!-- Indicates whether the Visual C# 2005 Express IDE component is installed. -->
70 <!-- If this property is set, that means Visual C# 2005 Express Edition is -->
71 <!-- installed on the system. -->
72 <Fragment>
73 <Property Id="VCSHARP2005EXPRESS_IDE" Secure="yes">
74 <ComponentSearch Id="SearchForVcsExpressIde2005Component" Guid="E8A67F23-21D0-4E7B-BBD3-54E2D505BED8" Type="file">
75 <FileSearch Id="VcsExpressIde2005" Name="vcsexpress.exe" />
76 </ComponentSearch>
77 </Property>
78 </Fragment>
79
80 <!-- Custom action definition to run vcsexpress.exe /setup -->
81 <Fragment>
82 <CustomAction Id="VCSHARP2005Setup" Property="VCSHARP2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
83 <PropertyRef Id="VCSHARP2005EXPRESS_IDE" />
84
85 <InstallExecuteSequence>
86 <Custom Action="VCSHARP2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP2005EXPRESS_IDE" />
87 </InstallExecuteSequence>
88 </Fragment>
89
90 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
91 <Fragment>
92 <CustomAction Id="VCSHARP2005InstallVSTemplates" Property="VCSHARP2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
93 <PropertyRef Id="VCSHARP2005EXPRESS_IDE" />
94
95 <InstallExecuteSequence>
96 <Custom Action="VCSHARP2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP2005EXPRESS_IDE" />
97 </InstallExecuteSequence>
98 </Fragment>
99
100 <!-- Indicates whether the Visual C# project system is installed as a part of -->
101 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
102 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
103 <!-- C# language tools were installed as a part of VS 2005 setup. -->
104 <Fragment>
105 <Property Id="VS2005_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
106 <RegistrySearch Id="SearchForVCSProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
107 </Property>
108 </Fragment>
109
110 <!-- Indicates whether the Visual Basic 2005 Express IDE component is installed. -->
111 <!-- If this property is set, that means Visual Basic 2005 Express Edition is -->
112 <!-- installed on the system. -->
113 <Fragment>
114 <Property Id="VB2005EXPRESS_IDE" Secure="yes">
115 <ComponentSearch Id="SearchForVbExpressIde2005Component" Guid="FCDD3EF0-FFF4-4391-9467-AA48ADC7028F" Type="file">
116 <FileSearch Id="VbExpressIde2005" Name="vbexpress.exe" />
117 </ComponentSearch>
118 </Property>
119 </Fragment>
120
121 <!-- Custom action definition to run vbexpress.exe /setup -->
122 <Fragment>
123 <CustomAction Id="VB2005Setup" Property="VB2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
124 <PropertyRef Id="VB2005EXPRESS_IDE" />
125
126 <InstallExecuteSequence>
127 <Custom Action="VB2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VB2005EXPRESS_IDE" />
128 </InstallExecuteSequence>
129 </Fragment>
130
131 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
132 <Fragment>
133 <CustomAction Id="VB2005InstallVSTemplates" Property="VB2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
134 <PropertyRef Id="VB2005EXPRESS_IDE" />
135
136 <InstallExecuteSequence>
137 <Custom Action="VB2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VB2005EXPRESS_IDE" />
138 </InstallExecuteSequence>
139 </Fragment>
140
141 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
142 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
143 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
144 <!-- Basic language tools were installed as a part of VS 2005 setup. -->
145 <Fragment>
146 <Property Id="VS2005_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
147 <RegistrySearch Id="SearchForVBProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
148 </Property>
149 </Fragment>
150
151 <!-- Indicates whether the Visual Web Developer 2005 Express IDE component is installed. -->
152 <!-- If this property is set, that means Visual Web Developer 2005 Express Edition is -->
153 <!-- installed on the system. -->
154 <Fragment>
155 <Property Id="VWD2005EXPRESS_IDE" Secure="yes">
156 <ComponentSearch Id="SearchForVwdExpressIde2005Component" Guid="56B053EA-AEFA-490A-A537-5EA145574862" Type="file">
157 <FileSearch Id="VwdExpressIde2005" Name="vwdexpress.exe" />
158 </ComponentSearch>
159 </Property>
160 </Fragment>
161
162 <!-- Custom action definition to run vwdexpress.exe /setup -->
163 <Fragment>
164 <CustomAction Id="VWD2005Setup" Property="VWD2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
165 <PropertyRef Id="VWD2005EXPRESS_IDE" />
166
167 <InstallExecuteSequence>
168 <Custom Action="VWD2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD2005EXPRESS_IDE" />
169 </InstallExecuteSequence>
170 </Fragment>
171
172 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
173 <Fragment>
174 <CustomAction Id="VWD2005InstallVSTemplates" Property="VWD2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
175 <PropertyRef Id="VWD2005EXPRESS_IDE" />
176
177 <InstallExecuteSequence>
178 <Custom Action="VWD2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD2005EXPRESS_IDE" />
179 </InstallExecuteSequence>
180 </Fragment>
181
182 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
183 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
184 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
185 <!-- Web Developer language tools were installed as a part of VS 2005 setup. -->
186 <Fragment>
187 <Property Id="VS2005_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
188 <RegistrySearch Id="SearchForVWDProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
189 </Property>
190 </Fragment>
191
192 <!-- Indicates whether the Visual C++ 2005 Express IDE component is installed. -->
193 <!-- If this property is set, that means Visual C++ 2005 Express Edition is -->
194 <!-- installed on the system. -->
195 <Fragment>
196 <Property Id="VC2005EXPRESS_IDE" Secure="yes">
197 <ComponentSearch Id="SearchForVcExpressIde2005Component" Guid="83D8DFB7-73ED-4C83-9606-805F4CD7E1EE" Type="file">
198 <FileSearch Id="VcExpressIde2005" Name="vcexpress.exe" />
199 </ComponentSearch>
200 </Property>
201 </Fragment>
202
203 <!-- Custom action definition to run vcexpress.exe /setup -->
204 <Fragment>
205 <CustomAction Id="VC2005Setup" Property="VC2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
206 <PropertyRef Id="VC2005EXPRESS_IDE" />
207
208 <InstallExecuteSequence>
209 <Custom Action="VC2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VC2005EXPRESS_IDE" />
210 </InstallExecuteSequence>
211 </Fragment>
212
213 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
214 <Fragment>
215 <CustomAction Id="VC2005InstallVSTemplates" Property="VC2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
216 <PropertyRef Id="VC2005EXPRESS_IDE" />
217
218 <InstallExecuteSequence>
219 <Custom Action="VC2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VC2005EXPRESS_IDE" />
220 </InstallExecuteSequence>
221 </Fragment>
222
223 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
224 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
225 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
226 <!-- C++ language tools were installed as a part of VS 2005 setup. -->
227 <Fragment>
228 <Property Id="VS2005_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
229 <RegistrySearch Id="SearchForVCProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
230 </Property>
231 </Fragment>
232
233 <!-- Indicates whether the Visual J# 2005 Express IDE component is installed. -->
234 <!-- If this property is set, that means Visual J# 2005 Express Edition is -->
235 <!-- installed on the system. -->
236 <Fragment>
237 <Property Id="VJSHARP2005EXPRESS_IDE" Secure="yes">
238 <ComponentSearch Id="SearchForVjsExpressIde2005Component" Guid="7077FCC9-C3E4-437E-83ED-D5D7D8D9BB6C" Type="file">
239 <FileSearch Id="VjsExpressIde2005" Name="vjsexpress.exe" />
240 </ComponentSearch>
241 </Property>
242 </Fragment>
243
244 <!-- Custom action definition to run vjsexpress.exe /setup -->
245 <Fragment>
246 <CustomAction Id="VJSHARP2005Setup" Property="VJSHARP2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
247 <PropertyRef Id="VJSHARP2005EXPRESS_IDE" />
248
249 <InstallExecuteSequence>
250 <Custom Action="VJSHARP2005Setup" Before="InstallFinalize" Overridable="yes" Condition="VJSHARP2005EXPRESS_IDE" />
251 </InstallExecuteSequence>
252 </Fragment>
253
254 <!-- Custom action definition to run vjsexpress.exe /InstallVSTemplates -->
255 <Fragment>
256 <CustomAction Id="VJSHARP2005InstallVSTemplates" Property="VJSHARP2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
257 <PropertyRef Id="VJSHARP2005EXPRESS_IDE" />
258
259 <InstallExecuteSequence>
260 <Custom Action="VJSHARP2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VJSHARP2005EXPRESS_IDE" />
261 </InstallExecuteSequence>
262 </Fragment>
263
264 <!-- Indicates whether the Visual J# project system is installed as a part of -->
265 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
266 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
267 <!-- J# language tools were installed as a part of VS 2005 setup. -->
268 <Fragment>
269 <Property Id="VS2005_IDE_VJSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
270 <RegistrySearch Id="SearchForVJSProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}" Name="DefaultProjectExtension" Type="raw" />
271 </Property>
272 </Fragment>
273
274 <!-- Indicates whether the Visual Studio Code Name "Orcas" Development Tools -->
275 <!-- for .NET Framework 3.0 add-in is installed for Visual Studio 2005. -->
276 <Fragment>
277 <Property Id="VSEXTENSIONS_FOR_NETFX30_INSTALLED" Secure="yes">
278 <ComponentSearch Id="SearchForVSExtensionsForNetfx30RootComponent" Guid="72616A39-A8E6-4187-BC32-0950598B4499" Type="file" />
279 </Property>
280 </Fragment>
281
282 <!-- Indicates whether the Visual Studio Team Test project system is installed -->
283 <Fragment>
284 <Property Id="VS2005_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
285 <RegistrySearch Id="SearchForVSTSTestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
286 </Property>
287 </Fragment>
288
289 <!-- Indicates whether the Web Application Project is installed as a part of -->
290 <!-- Visual Studio 2005 standard or higher. This project type is installed -->
291 <!-- as a standalone package and as a part of Visual Studio 2005 SP1. -->
292 <Fragment>
293 <Property Id="VS2005_WAP_PROJECT_INSTALLED" Secure="yes">
294 <RegistrySearch Id="SearchForVS2005WAPProject" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{349c5850-65df-11da-9384-00065b846f21}" Name="ProductName" Type="raw" />
295 </Property>
296 </Fragment>
297
298 <!-- Indicates the service pack level for Visual Studio 2005 standard edition -->
299 <!-- and higher. -->
300 <Fragment>
301 <Property Id="VS2005_SP_LEVEL" Secure="yes">
302 <RegistrySearch Id="SearchForVS2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VS\Servicing\8.0" Name="SP" Type="raw" />
303 </Property>
304 </Fragment>
305
306 <!-- Indicates the service pack level for Visual Basic 2005 Express Edition. -->
307 <Fragment>
308 <Property Id="VB2005EXPRESS_SP_LEVEL" Secure="yes">
309 <RegistrySearch Id="SearchForVBExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VB\Servicing\8.0" Name="SP" Type="raw" />
310 </Property>
311 </Fragment>
312
313 <!-- Indicates the service pack level for Visual C++ 2005 Express Edition. -->
314 <Fragment>
315 <Property Id="VC2005EXPRESS_SP_LEVEL" Secure="yes">
316 <RegistrySearch Id="SearchForVCExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VC\Servicing\8.0" Name="SP" Type="raw" />
317 </Property>
318 </Fragment>
319
320 <!-- Indicates the service pack level for Visual C# 2005 Express Edition. -->
321 <Fragment>
322 <Property Id="VCSHARP2005EXPRESS_SP_LEVEL" Secure="yes">
323 <RegistrySearch Id="SearchForVCSharpExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VCS\Servicing\8.0" Name="SP" Type="raw" />
324 </Property>
325 </Fragment>
326
327 <!-- Indicates the service pack level for Visual J# 2005 Express Edition. -->
328 <Fragment>
329 <Property Id="VJSHARP2005EXPRESS_SP_LEVEL" Secure="yes">
330 <RegistrySearch Id="SearchForVJSharpExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VJS\Servicing\8.0" Name="SP" Type="raw" />
331 </Property>
332 </Fragment>
333
334 <!-- Indicates the service pack level for Visual Web Developer 2005 Express -->
335 <!-- Edition. -->
336 <Fragment>
337 <Property Id="VWD2005EXPRESS_SP_LEVEL" Secure="yes">
338 <RegistrySearch Id="SearchForVWDExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VNS\Servicing\8.0" Name="SP" Type="raw" />
339 </Property>
340 </Fragment>
341
342 <!-- Indicates the service pack level for Visual Studio 2005 Team Foundation. -->
343 <Fragment>
344 <Property Id="VSTF2005_SP_LEVEL" Secure="yes">
345 <RegistrySearch Id="SearchForVSTF2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VSTF\Servicing\8.0" Name="SP" Type="raw" />
346 </Property>
347 </Fragment>
348
349 <!-- Indicates whether or not the Document Explorer 2005 runtime components are installed. -->
350 <Fragment>
351 <Property Id="DEXPLORE_2005_INSTALLED" Secure="yes">
352 <RegistrySearch Id="Dexplore2005RegKey" Root="HKLM" Key="Software\Microsoft\DExplore\v2.0.50727\1033" Name="Install" Type="raw" />
353 </Property>
354 </Fragment>
355
356 <!-- Indicates whether or not the J# redistributable package 2.0 first edition is installed. -->
357 <Fragment>
358 <Property Id="JSHARP_REDIST_20_INSTALLED" Secure="yes">
359 <RegistrySearch Id="JSharpRedist20RegKey" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual J# 2.0 Redistributable Package" Name="UninstallPath" Type="raw" />
360 </Property>
361 </Fragment>
362
363 <!-- Indicates whether or not the J# redistributable package 2.0 second edition is installed. -->
364 <Fragment>
365 <Property Id="JSHARP_REDIST_20SE_INSTALLED" Secure="yes">
366 <RegistrySearch Id="JSharpRedist20SERegKey" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual J# 2.0 Redistributable Package - SE" Name="UninstallPath" Type="raw" />
367 </Property>
368 </Fragment>
369</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2008.wxs b/src/ext/VisualStudio/wixlib/VS2008.wxs
new file mode 100644
index 00000000..43bf1d1e
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2008.wxs
@@ -0,0 +1,299 @@
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 <!-- Visual Studio 2008 -->
6 <Fragment>
7 <Property Id="VS90DEVENV" Secure="yes">
8 <RegistrySearch Id="VS90DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
9 </Property>
10 </Fragment>
11
12 <Fragment>
13 <Property Id="VS90_ITEMTEMPLATES_DIR" Secure="yes">
14 <RegistrySearch Id="VS90DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw">
15 <DirectorySearch Id="VS90ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
16 </RegistrySearch>
17 </Property>
18 </Fragment>
19
20 <Fragment>
21 <Property Id="VS90_PROJECTTEMPLATES_DIR" Secure="yes">
22 <RegistrySearch Id="VS90DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw">
23 <DirectorySearch Id="VS90ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
24 </RegistrySearch>
25 </Property>
26 </Fragment>
27
28 <Fragment>
29 <Property Id="VS90_SCHEMAS_DIR" Secure="yes">
30 <RegistrySearch Id="VS90ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="9.0" Type="raw">
31 <DirectorySearch Id="VS90XmlPathSearch" Path="Xml" Depth="1">
32 <DirectorySearch Id="VS90XmlSchemasPathSearch" Path="Schemas" Depth="1" />
33 </DirectorySearch>
34 </RegistrySearch>
35 </Property>
36 </Fragment>
37
38 <Fragment>
39 <CustomAction Id="VS90Setup" Property="VS90DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
40 <PropertyRef Id="VS90DEVENV" />
41
42 <InstallExecuteSequence>
43 <Custom Action="VS90Setup" Before="InstallFinalize" Overridable="yes" Condition="VS90DEVENV" />
44 </InstallExecuteSequence>
45 </Fragment>
46
47 <Fragment>
48 <CustomAction Id="VS90InstallVSTemplates" Property="VS90DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
49 <PropertyRef Id="VS90DEVENV" />
50
51 <InstallExecuteSequence>
52 <Custom Action="VS90InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS90DEVENV" />
53 </InstallExecuteSequence>
54 </Fragment>
55
56 <!-- Location of the Visual Studio 2008 root installation directory. -->
57 <Fragment>
58 <Property Id="VS90_ROOT_FOLDER" Secure="yes">
59 <RegistrySearch Id="SearchForVS90RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="9.0" Type="raw" />
60 </Property>
61 </Fragment>
62
63 <!-- Indicates whether the Visual C# 2008 Express IDE component is installed. -->
64 <!-- If this property is set, that means Visual C# 2008 Express Edition is -->
65 <!-- installed on the system. -->
66 <Fragment>
67 <Property Id="VCSHARP90EXPRESS_IDE" Secure="yes">
68 <ComponentSearch Id="SearchForVcsExpressIde90Component" Guid="EF0BC34E-6AAE-47C0-8FEC-7E00C2638209" Type="file">
69 <FileSearch Id="VcsExpressIde90" Name="vcsexpress.exe" />
70 </ComponentSearch>
71 </Property>
72 </Fragment>
73
74 <!-- Custom action definition to run vcsexpress.exe /setup -->
75 <Fragment>
76 <CustomAction Id="VCSHARP90Setup" Property="VCSHARP90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
77 <PropertyRef Id="VCSHARP90EXPRESS_IDE" />
78
79 <InstallExecuteSequence>
80 <Custom Action="VCSHARP90Setup" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP90EXPRESS_IDE" />
81 </InstallExecuteSequence>
82 </Fragment>
83
84 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
85 <Fragment>
86 <CustomAction Id="VCSHARP90InstallVSTemplates" Property="VCSHARP90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
87 <PropertyRef Id="VCSHARP90EXPRESS_IDE" />
88
89 <InstallExecuteSequence>
90 <Custom Action="VCSHARP90InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP90EXPRESS_IDE" />
91 </InstallExecuteSequence>
92 </Fragment>
93
94 <!-- Indicates whether the Visual C# project system is installed as a part of -->
95 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
96 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
97 <!-- C# language tools were installed as a part of VS 2008 setup. -->
98 <Fragment>
99 <Property Id="VS90_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
100 <RegistrySearch Id="SearchForVCS90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
101 </Property>
102 </Fragment>
103
104 <!-- Indicates whether the Visual Basic 2008 Express IDE component is installed. -->
105 <!-- If this property is set, that means Visual Basic 2008 Express Edition is -->
106 <!-- installed on the system. -->
107 <Fragment>
108 <Property Id="VB90EXPRESS_IDE" Secure="yes">
109 <ComponentSearch Id="SearchForVbExpressIde90Component" Guid="010A50C6-8604-4BA2-8CA1-4EC3A5B861B2" Type="file">
110 <FileSearch Id="VbExpressIde90" Name="vbexpress.exe" />
111 </ComponentSearch>
112 </Property>
113 </Fragment>
114
115 <!-- Custom action definition to run vbexpress.exe /setup -->
116 <Fragment>
117 <CustomAction Id="VB90Setup" Property="VB90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
118 <PropertyRef Id="VB90EXPRESS_IDE" />
119
120 <InstallExecuteSequence>
121 <Custom Action="VB90Setup" Before="InstallFinalize" Overridable="yes" Condition="VB90EXPRESS_IDE" />
122 </InstallExecuteSequence>
123 </Fragment>
124
125 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
126 <Fragment>
127 <CustomAction Id="VB90InstallVSTemplates" Property="VB90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
128 <PropertyRef Id="VB90EXPRESS_IDE" />
129
130 <InstallExecuteSequence>
131 <Custom Action="VB90InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VB90EXPRESS_IDE" />
132 </InstallExecuteSequence>
133 </Fragment>
134
135 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
136 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
137 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
138 <!-- Basic language tools were installed as a part of VS 2008 setup. -->
139 <Fragment>
140 <Property Id="VS90_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
141 <RegistrySearch Id="SearchForVB90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
142 </Property>
143 </Fragment>
144
145 <!-- Indicates whether the Visual Web Developer 2008 Express IDE component is installed. -->
146 <!-- If this property is set, that means Visual Web Developer 2008 Express Edition is -->
147 <!-- installed on the system. -->
148 <Fragment>
149 <Property Id="VWD90EXPRESS_IDE" Secure="yes">
150 <ComponentSearch Id="SearchForVwdExpressIde90Component" Guid="C7F516CB-CB5C-41B7-9CB4-33927C4DD206" Type="file">
151 <FileSearch Id="VwdExpressIde90" Name="vwdexpress.exe" />
152 </ComponentSearch>
153 </Property>
154 </Fragment>
155
156 <!-- Custom action definition to run vwdexpress.exe /setup -->
157 <Fragment>
158 <CustomAction Id="VWD90Setup" Property="VWD90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
159 <PropertyRef Id="VWD90EXPRESS_IDE" />
160
161 <InstallExecuteSequence>
162 <Custom Action="VWD90Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD90EXPRESS_IDE" />
163 </InstallExecuteSequence>
164 </Fragment>
165
166 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
167 <Fragment>
168 <CustomAction Id="VWD90InstallVSTemplates" Property="VWD90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
169 <PropertyRef Id="VWD90EXPRESS_IDE" />
170
171 <InstallExecuteSequence>
172 <Custom Action="VWD90InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD90EXPRESS_IDE" />
173 </InstallExecuteSequence>
174 </Fragment>
175
176 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
177 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
178 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
179 <!-- Web Developer language tools were installed as a part of VS 2008 setup. -->
180 <Fragment>
181 <Property Id="VS90_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
182 <RegistrySearch Id="SearchForVWD90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
183 </Property>
184 </Fragment>
185
186 <!-- Indicates whether the Visual C++ 2008 Express IDE component is installed. -->
187 <!-- If this property is set, that means Visual C++ 2008 Express Edition is -->
188 <!-- installed on the system. -->
189 <Fragment>
190 <Property Id="VC90EXPRESS_IDE" Secure="yes">
191 <ComponentSearch Id="SearchForVcExpressIde90Component" Guid="147EB31D-8042-4E8F-A3EC-D32C04ED652A" Type="file">
192 <FileSearch Id="VcExpressIde90" Name="vcexpress.exe" />
193 </ComponentSearch>
194 </Property>
195 </Fragment>
196
197 <!-- Custom action definition to run vcexpress.exe /setup -->
198 <Fragment>
199 <CustomAction Id="VC90Setup" Property="VC90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
200 <PropertyRef Id="VC90EXPRESS_IDE" />
201
202 <InstallExecuteSequence>
203 <Custom Action="VC90Setup" Before="InstallFinalize" Overridable="yes" Condition="VC90EXPRESS_IDE" />
204 </InstallExecuteSequence>
205 </Fragment>
206
207 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
208 <Fragment>
209 <CustomAction Id="VC90InstallVSTemplates" Property="VC90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
210 <PropertyRef Id="VC90EXPRESS_IDE" />
211
212 <InstallExecuteSequence>
213 <Custom Action="VC90InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VC90EXPRESS_IDE" />
214 </InstallExecuteSequence>
215 </Fragment>
216
217 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
218 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
219 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
220 <!-- C++ language tools were installed as a part of VS 2008 setup. -->
221 <Fragment>
222 <Property Id="VS90_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
223 <RegistrySearch Id="SearchForVC90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
224 </Property>
225 </Fragment>
226
227 <!-- Indicates whether the Visual Studio Team Test project system is installed -->
228 <Fragment>
229 <Property Id="VS90_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
230 <RegistrySearch Id="SearchForVSTS90TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
231 </Property>
232 </Fragment>
233
234 <!-- Location of the Visual Studio 2008 bootstrapper package install location -->
235 <Fragment>
236 <Property Id="VS90_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
237 <RegistrySearch Id="SearchForVs90BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\3.5" Name="Path" Type="raw" />
238 </Property>
239 </Fragment>
240
241 <!-- Indicates whether the Visual Studio 2008 SP1 version of devenv.exe is -->
242 <!-- installed on the system. -->
243 <Fragment>
244 <Property Id="VS90_SP1" Secure="yes">
245 <RegistrySearch Id="VS90DevEnvDirectorySearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
246 <DirectorySearch Id="VS90DevEnvFilePathSearch">
247 <FileSearch Id="VS90DevEnvFileVersionSearch" Name="devenv.exe" MinVersion="9.0.30729.0" />
248 </DirectorySearch>
249 </RegistrySearch>
250 </Property>
251 </Fragment>
252
253 <!-- Indicates whether the Visual Studio 2008 SP1 version of vbexpress.exe is -->
254 <!-- installed on the system. -->
255 <Fragment>
256 <Property Id="VB90EXPRESS_SP1" Secure="yes">
257 <ComponentSearch Id="SearchForVbExpressIde90Component" Guid="010A50C6-8604-4BA2-8CA1-4EC3A5B861B2" Type="file">
258 <FileSearch Id="VB90ExpressFileVersionSearch" Name="vbexpress.exe" MinVersion="9.0.30729.0" />
259 </ComponentSearch>
260 </Property>
261 </Fragment>
262
263 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcexpress.exe is -->
264 <!-- installed on the system. -->
265 <Fragment>
266 <Property Id="VC90EXPRESS_SP1" Secure="yes">
267 <ComponentSearch Id="SearchForVcExpressIde90Component" Guid="147EB31D-8042-4E8F-A3EC-D32C04ED652A" Type="file">
268 <FileSearch Id="VC90ExpressFileVersionSearch" Name="vcexpress.exe" MinVersion="9.0.30729.0" />
269 </ComponentSearch>
270 </Property>
271 </Fragment>
272
273 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcsexpress.exe is -->
274 <!-- installed on the system. -->
275 <Fragment>
276 <Property Id="VCS90EXPRESS_SP1" Secure="yes">
277 <ComponentSearch Id="SearchForVcsExpressIde90Component" Guid="EF0BC34E-6AAE-47C0-8FEC-7E00C2638209" Type="file">
278 <FileSearch Id="VCS90ExpressFileVersionSearch" Name="vcsexpress.exe" MinVersion="9.0.30729.0" />
279 </ComponentSearch>
280 </Property>
281 </Fragment>
282
283 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcsexpress.exe is -->
284 <!-- installed on the system. -->
285 <Fragment>
286 <Property Id="VWD90EXPRESS_SP1" Secure="yes">
287 <ComponentSearch Id="SearchForVwdExpressIde90Component" Guid="C7F516CB-CB5C-41B7-9CB4-33927C4DD206" Type="file">
288 <FileSearch Id="VWD90ExpressFileVersionSearch" Name="vwdexpress.exe" MinVersion="9.0.30729.0" />
289 </ComponentSearch>
290 </Property>
291 </Fragment>
292
293 <!-- Indicates whether or not the Document Explorer 2008 runtime components are installed. -->
294 <Fragment>
295 <Property Id="DEXPLORE_2008_INSTALLED" Secure="yes">
296 <RegistrySearch Id="Dexplore2008RegKey" Root="HKLM" Key="Software\Microsoft\DExplore\v9.0.21022\1033" Name="Install" Type="raw" />
297 </Property>
298 </Fragment>
299</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2010.wxs b/src/ext/VisualStudio/wixlib/VS2010.wxs
new file mode 100644
index 00000000..6c940b86
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2010.wxs
@@ -0,0 +1,312 @@
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 <Fragment>
6 <Property Id="VS2010_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS2010DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS2010ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS2010_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS2010DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS2010ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2010_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS2010ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="10.0" Type="raw">
24 <DirectorySearch Id="VS2010XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS2010XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS2010_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS2010DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS2010ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS2010_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVs2010BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS2010_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS2010RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="10.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS2010DEVENV" Secure="yes">
53 <RegistrySearch Id="VS2010DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS2010Setup" Property="VS2010DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS2010DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2010DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS2010InstallVSTemplates" Property="VS2010DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS2010DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2010DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# 2010 Express IDE component is installed. -->
76 <!-- If this property is set, that means Visual C# 2010 Express Edition is -->
77 <!-- installed on the system. -->
78 <Fragment>
79 <Property Id="VCSHARP2010EXPRESS_IDE" Secure="yes">
80 <ComponentSearch Id="SearchForVcsExpressIde2010Component" Guid="A4945167-D8A4-4B10-9B78-99C2CDC243EC" Type="file">
81 <FileSearch Id="VcsExpressIde2010" Name="vcsexpress.exe" />
82 </ComponentSearch>
83 </Property>
84 </Fragment>
85
86 <!-- Custom action definition to run vcsexpress.exe /setup -->
87 <Fragment>
88 <CustomAction Id="VCSHARP2010Setup" Property="VCSHARP2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
89 <PropertyRef Id="VCSHARP2010EXPRESS_IDE" />
90
91 <InstallExecuteSequence>
92 <Custom Action="VCSHARP2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP2010EXPRESS_IDE" />
93 </InstallExecuteSequence>
94 </Fragment>
95
96 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
97 <Fragment>
98 <CustomAction Id="VCSHARP2010InstallVSTemplates" Property="VCSHARP2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
99 <PropertyRef Id="VCSHARP2010EXPRESS_IDE" />
100
101 <InstallExecuteSequence>
102 <Custom Action="VCSHARP2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VCSHARP2010EXPRESS_IDE" />
103 </InstallExecuteSequence>
104 </Fragment>
105
106 <!-- Indicates whether the Visual C# project system is installed as a part of -->
107 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
108 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
109 <!-- C# language tools were installed as a part of VS 2010 setup. -->
110 <Fragment>
111 <Property Id="VS2010_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
112 <RegistrySearch Id="SearchForVCS2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
113 </Property>
114 </Fragment>
115
116 <!-- Indicates whether the Visual Basic 2010 Express IDE component is installed. -->
117 <!-- If this property is set, that means Visual Basic 2010 Express Edition is -->
118 <!-- installed on the system. -->
119 <Fragment>
120 <Property Id="VB2010EXPRESS_IDE" Secure="yes">
121 <ComponentSearch Id="SearchForVbExpressIde2010Component" Guid="3EDEF607-9E3A-4A64-BFE1-104979CF2899" Type="file">
122 <FileSearch Id="VbExpressIde2010" Name="vbexpress.exe" />
123 </ComponentSearch>
124 </Property>
125 </Fragment>
126
127 <!-- Custom action definition to run vbexpress.exe /setup -->
128 <Fragment>
129 <CustomAction Id="VB2010Setup" Property="VB2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
130 <PropertyRef Id="VB2010EXPRESS_IDE" />
131
132 <InstallExecuteSequence>
133 <Custom Action="VB2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VB2010EXPRESS_IDE" />
134 </InstallExecuteSequence>
135 </Fragment>
136
137 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
138 <Fragment>
139 <CustomAction Id="VB2010InstallVSTemplates" Property="VB2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
140 <PropertyRef Id="VB2010EXPRESS_IDE" />
141
142 <InstallExecuteSequence>
143 <Custom Action="VB2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VB2010EXPRESS_IDE" />
144 </InstallExecuteSequence>
145 </Fragment>
146
147 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
148 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
149 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
150 <!-- Basic language tools were installed as a part of VS 2010 setup. -->
151 <Fragment>
152 <Property Id="VS2010_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
153 <RegistrySearch Id="SearchForVB2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
154 </Property>
155 </Fragment>
156
157 <!-- Indicates whether the Visual Web Developer 2010 Express IDE component is installed. -->
158 <!-- If this property is set, that means Visual Web Developer 2010 Express Edition is -->
159 <!-- installed on the system. -->
160 <Fragment>
161 <Property Id="VWD2010EXPRESS_IDE" Secure="yes">
162 <ComponentSearch Id="SearchForVwdExpressIde2010Component" Guid="771B6CF7-C8D2-4D85-BACD-ED01600256DC" Type="file">
163 <FileSearch Id="VwdExpressIde2010" Name="vwdexpress.exe" />
164 </ComponentSearch>
165 </Property>
166 </Fragment>
167
168 <!-- Custom action definition to run vwdexpress.exe /setup -->
169 <Fragment>
170 <CustomAction Id="VWD2010Setup" Property="VWD2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
171 <PropertyRef Id="VWD2010EXPRESS_IDE" />
172
173 <InstallExecuteSequence>
174 <Custom Action="VWD2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD2010EXPRESS_IDE" />
175 </InstallExecuteSequence>
176 </Fragment>
177
178 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
179 <Fragment>
180 <CustomAction Id="VWD2010InstallVSTemplates" Property="VWD2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
181 <PropertyRef Id="VWD2010EXPRESS_IDE" />
182
183 <InstallExecuteSequence>
184 <Custom Action="VWD2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD2010EXPRESS_IDE" />
185 </InstallExecuteSequence>
186 </Fragment>
187
188 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
189 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
190 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
191 <!-- Web Developer language tools were installed as a part of VS 2010 setup. -->
192 <Fragment>
193 <Property Id="VS2010_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
194 <RegistrySearch Id="SearchForVWD2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
195 </Property>
196 </Fragment>
197
198 <!-- Indicates whether the Visual C++ 2010 Express IDE component is installed. -->
199 <!-- If this property is set, that means Visual C++ 2010 Express Edition is -->
200 <!-- installed on the system. -->
201 <Fragment>
202 <Property Id="VC2010EXPRESS_IDE" Secure="yes">
203 <ComponentSearch Id="SearchForVcExpressIde2010Component" Guid="B455E8D3-90CB-47F6-AB7B-9B31E5DE6266" Type="file">
204 <FileSearch Id="VcExpressIde2010" Name="vcexpress.exe" />
205 </ComponentSearch>
206 </Property>
207 </Fragment>
208
209 <!-- Custom action definition to run vcexpress.exe /setup -->
210 <Fragment>
211 <CustomAction Id="VC2010Setup" Property="VC2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
212 <PropertyRef Id="VC2010EXPRESS_IDE" />
213
214 <InstallExecuteSequence>
215 <Custom Action="VC2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VC2010EXPRESS_IDE" />
216 </InstallExecuteSequence>
217 </Fragment>
218
219 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
220 <Fragment>
221 <CustomAction Id="VC2010InstallVSTemplates" Property="VC2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
222 <PropertyRef Id="VC2010EXPRESS_IDE" />
223
224 <InstallExecuteSequence>
225 <Custom Action="VC2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VC2010EXPRESS_IDE" />
226 </InstallExecuteSequence>
227 </Fragment>
228
229 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
230 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
231 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
232 <!-- C++ language tools were installed as a part of VS 2010 setup. -->
233 <Fragment>
234 <Property Id="VS2010_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
235 <RegistrySearch Id="SearchForVC2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
236 </Property>
237 </Fragment>
238
239 <!-- Indicates whether the Visual Studio 2010 Express for Windows Phone IDE component is -->
240 <!-- installed. If this property is set, that means Visual Studio 2010 Express for -->
241 <!-- Windows Phone is installed on the system. -->
242 <Fragment>
243 <Property Id="VPD2010EXPRESS_IDE" Secure="yes">
244 <ComponentSearch Id="SearchForVpdExpressIde2010Component" Guid="80C81DB2-E95B-4C03-A559-C664E8411DDF" Type="file">
245 <FileSearch Id="VpdExpressIde2010" Name="vpdexpress.exe" />
246 </ComponentSearch>
247 </Property>
248 </Fragment>
249
250 <!-- Custom action definition to run vpdexpress.exe /setup -->
251 <Fragment>
252 <CustomAction Id="VPD2010Setup" Property="VPD2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
253 <PropertyRef Id="VPD2010EXPRESS_IDE" />
254
255 <InstallExecuteSequence>
256 <Custom Action="VPD2010Setup" Before="InstallFinalize" Overridable="yes" Condition="VPD2010EXPRESS_IDE" />
257 </InstallExecuteSequence>
258 </Fragment>
259
260 <!-- Custom action definition to run vpdexpress.exe /InstallVSTemplates -->
261 <Fragment>
262 <CustomAction Id="VPD2010InstallVSTemplates" Property="VPD2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
263 <PropertyRef Id="VPD2010EXPRESS_IDE" />
264
265 <InstallExecuteSequence>
266 <Custom Action="VPD2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VPD2010EXPRESS_IDE" />
267 </InstallExecuteSequence>
268 </Fragment>
269
270 <!-- Indicates whether the Visual Studio 2010 Team Test project system is installed -->
271 <Fragment>
272 <Property Id="VS2010_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
273 <RegistrySearch Id="SearchForVSTS2010TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
274 </Property>
275 </Fragment>
276
277 <!-- Indicates whether the Visual Studio 2010 Database project system is installed -->
278 <Fragment>
279 <Property Id="VS2010_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
280 <RegistrySearch Id="SearchForVSTS2010DBSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{C8D11400-126E-41CD-887F-60BD40844F9E}" Name="Package" Type="raw" />
281 </Property>
282 </Fragment>
283
284 <!-- Indicates whether the Visual Studio 2010 Deployment project system (setup project) is installed -->
285 <Fragment>
286 <Property Id="VS2010_IDE_VSD_PROJECTSYSTEM_INSTALLED" Secure="yes">
287 <RegistrySearch Id="SearchForVSTS2010VSDSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{54435603-DBB4-11D2-8724-00A0C9A8B90C}" Name="Package" Type="raw" />
288 </Property>
289 </Fragment>
290
291 <!-- Indicates whether the WiX project system is installed for VS2010 -->
292 <Fragment>
293 <Property Id="VS2010_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
294 <!-- Component search for the .pkgdef file for VS2010 -->
295 <ComponentSearch Id="SearchForVS2010WixSystemUnderVSSetup" Guid="3C5BA30B-0713-5E28-8EEA-171E7A5E4864" Type="file" />
296 </Property>
297 </Fragment>
298
299 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
300 <Fragment>
301 <Property Id="VS2010_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
302 <RegistrySearch Id="SearchForVSTS2010ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
303 </Property>
304 </Fragment>
305
306 <!-- Indicates whether the Visual Studio F# project system is installed -->
307 <Fragment>
308 <Property Id="VS2010_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
309 <RegistrySearch Id="SearchForVSTS2010FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{f2a71f9b-5d33-465a-a702-920d77279786}" Name="Package" Type="raw" />
310 </Property>
311 </Fragment>
312</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2012.wxs b/src/ext/VisualStudio/wixlib/VS2012.wxs
new file mode 100644
index 00000000..513d8684
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2012.wxs
@@ -0,0 +1,255 @@
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 <Fragment>
6 <Property Id="VS2012_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS2012DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS2012ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS2012_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS2012DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS2012ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2012_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS2012ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw">
24 <DirectorySearch Id="VS2012XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS2012XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS2012_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS2012DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS2012ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS2012_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVs2012BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS2012_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS2012RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS2012DEVENV" Secure="yes">
53 <RegistrySearch Id="VS2012DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS2012Setup" Property="VS2012DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS2012DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS2012Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2012DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS2012InstallVSTemplates" Property="VS2012DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS2012DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2012DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# project system is installed as a part of -->
76 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
77 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
78 <!-- C# language tools were installed as a part of VS 2012 setup. -->
79 <Fragment>
80 <Property Id="VS2012_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
81 <RegistrySearch Id="SearchForVCS2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC#" Name="ProductDir" Type="raw" />
82 </Property>
83 </Fragment>
84
85 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
86 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
87 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
88 <!-- Basic language tools were installed as a part of VS 2012 setup. -->
89 <Fragment>
90 <Property Id="VS2012_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
91 <RegistrySearch Id="SearchForVB2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VB" Name="ProductDir" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- Indicates whether the Visual Web Developer 2012 Express IDE component is installed. -->
96 <!-- If this property is set, that means Visual Web Developer 2012 Express Edition is -->
97 <!-- installed on the system. -->
98 <Fragment>
99 <Property Id="VWD2012EXPRESS_IDE" Secure="yes">
100 <ComponentSearch Id="SearchForVwdExpressIde2012Component" Guid="92A0CBA0-BF39-422D-87FA-AB64564CD136" Type="file">
101 <FileSearch Id="VwdExpressIde2012" Name="vwdexpress.exe" />
102 </ComponentSearch>
103 </Property>
104 </Fragment>
105 <!-- Custom action definition to run vwdexpress.exe /setup -->
106 <Fragment>
107 <CustomAction Id="VWD2012Setup" Property="VWD2012EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
108 <PropertyRef Id="VWD2012EXPRESS_IDE" />
109 <InstallExecuteSequence>
110 <Custom Action="VWD2012Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD2012EXPRESS_IDE" />
111 </InstallExecuteSequence>
112 </Fragment>
113 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
114 <Fragment>
115 <CustomAction Id="VWD2012InstallVSTemplates" Property="VWD2012EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
116 <PropertyRef Id="VWD2012EXPRESS_IDE" />
117 <InstallExecuteSequence>
118 <Custom Action="VWD2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD2012EXPRESS_IDE" />
119 </InstallExecuteSequence>
120 </Fragment>
121
122 <!-- Indicates whether the Visual Studio 2012 Express IDE for Phone component is installed. -->
123 <Fragment>
124 <Property Id="VPD2012EXPRESS_IDE" Secure="yes">
125 <RegistrySearch Id="VPD2012ExpressForPhoneEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VPDExpress\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
126 </Property>
127 </Fragment>
128 <!-- Custom action definition to run VPDexpress.exe /setup -->
129 <Fragment>
130 <CustomAction Id="VPD2012Setup" Property="VPD2012EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
131 <PropertyRef Id="VPD2012EXPRESS_IDE" />
132 <InstallExecuteSequence>
133 <Custom Action="VPD2012Setup" Before="InstallFinalize" Overridable="yes" Condition="VPD2012EXPRESS_IDE" />
134 </InstallExecuteSequence>
135 </Fragment>
136 <!-- Custom action definition to run VPDexpress.exe /InstallVSTemplates -->
137 <Fragment>
138 <CustomAction Id="VPD2012InstallVSTemplates" Property="VPD2012EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
139 <PropertyRef Id="VPD2012EXPRESS_IDE" />
140 <InstallExecuteSequence>
141 <Custom Action="VPD2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VPD2012EXPRESS_IDE" />
142 </InstallExecuteSequence>
143 </Fragment>
144
145 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
146 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
147 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
148 <!-- Web Developer language tools were installed as a part of VS 2012 setup. -->
149 <Fragment>
150 <Property Id="VS2012_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
151 <ComponentSearch Id="SearchForVWD2012ProjectSystemUnderVSSetup" Guid="03E73DF8-BED3-44BB-BE2E-BAC10FAE723E" />
152 <ComponentSearch Id="SearchForVWD2012ProjectSystemUnderVWDSetup" Guid="3D7D4A9F-E3D7-4F13-9907-AF4F3CD75D33" Type="directory" />
153 </Property>
154 </Fragment>
155
156 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
157 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
158 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
159 <!-- C++ language tools were installed as a part of VS 2012 setup. -->
160 <Fragment>
161 <Property Id="VS2012_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
162 <RegistrySearch Id="SearchForVC2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC" Name="ProductDir" Type="raw" />
163 </Property>
164 </Fragment>
165
166 <!-- Indicates whether the Visual Studio 2012 Team Test project system is installed -->
167 <Fragment>
168 <Property Id="VS2012_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
169 <RegistrySearch Id="SearchForVSTS2012TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
170 </Property>
171 </Fragment>
172
173 <!-- Indicates whether the Visual Studio 2012 Database project system is installed -->
174 <Fragment>
175 <Property Id="VS2012_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
176 <ComponentSearch Id="SearchForVS2012DBSystemUnderVSSetup" Guid="E781FFA7-55F5-4E8C-9275-7B7EF035B13B" />
177 </Property>
178 </Fragment>
179
180 <!-- Indicates whether the WiX project system is installed for VS2012 -->
181 <Fragment>
182 <Property Id="VS2012_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
183 <!-- Component search for the .pkgdef file for VS2012 -->
184 <ComponentSearch Id="SearchForVS2012WixSystemUnderVSSetup" Guid="55489E7A-7DCA-5228-975E-39C51BE332D9" />
185 </Property>
186 </Fragment>
187
188 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
189 <Fragment>
190 <Property Id="VS2012_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
191 <RegistrySearch Id="SearchForVSTS2012ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
192 </Property>
193 </Fragment>
194
195 <!-- Indicates whether the Visual Studio F# project system is installed -->
196 <Fragment>
197 <Property Id="VS2012_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
198 <RegistrySearch Id="SearchForVSTS2012FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#" Name="ProductDir" Type="raw" />
199 </Property>
200 </Fragment>
201
202 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
203 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
204 <!-- on the system. -->
205 <Fragment>
206 <Property Id="VS2012WINEXPRESS_IDE" Secure="yes">
207 <ComponentSearch Id="SearchForVS2012WinExpressIdeComponent" Guid="A7A5FD99-1DFE-4AA8-A563-4DF5E0DD89E1" Type="file">
208 <FileSearch Id="VS2012WinExpressIde" Name="vswinexpress.exe" />
209 </ComponentSearch>
210 </Property>
211 </Fragment>
212 <!-- Custom action definition to run vswinexpress.exe /setup -->
213 <Fragment>
214 <CustomAction Id="VS2012WinExpressSetup" Property="VS2012WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
215 <PropertyRef Id="VS2012WINEXPRESS_IDE" />
216 <InstallExecuteSequence>
217 <Custom Action="VS2012WinExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS2012WINEXPRESS_IDE" />
218 </InstallExecuteSequence>
219 </Fragment>
220 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
221 <Fragment>
222 <CustomAction Id="VS2012WinExpressInstallVSTemplates" Property="VS2012WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
223 <PropertyRef Id="VS2012WINEXPRESS_IDE" />
224 <InstallExecuteSequence>
225 <Custom Action="VS2012WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2012WINEXPRESS_IDE" />
226 </InstallExecuteSequence>
227 </Fragment>
228
229 <!-- Indicates whether the Visual Studio Express for Windows Desktop IDE component is installed. -->
230 <!-- If this property is set, that means Visual Studio Express for Windows Desktop is installed -->
231 <!-- on the system. -->
232 <Fragment>
233 <Property Id="VS2012WDEXPRESS_IDE" Secure="yes">
234 <ComponentSearch Id="SearchForVS2012WDExpressIdeComponent" Guid="{55C6B9D6-A824-4AFC-8D08-20E581B6F42C}" Type="file">
235 <FileSearch Id="VS2012WDExpressIde" Name="WDExpress.exe" />
236 </ComponentSearch>
237 </Property>
238 </Fragment>
239 <!-- Custom action definition to run WDExpress.exe /setup -->
240 <Fragment>
241 <CustomAction Id="VS2012WDExpressSetup" Property="VS2012WDEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
242 <PropertyRef Id="VS2012WDEXPRESS_IDE" />
243 <InstallExecuteSequence>
244 <Custom Action="VS2012WDExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS2012WDEXPRESS_IDE" />
245 </InstallExecuteSequence>
246 </Fragment>
247 <!-- Custom action definition to run WDExpress.exe /InstallVSTemplates -->
248 <Fragment>
249 <CustomAction Id="VS2012WDExpressInstallVSTemplates" Property="VS2012WDEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
250 <PropertyRef Id="VS2012WDEXPRESS_IDE" />
251 <InstallExecuteSequence>
252 <Custom Action="VS2012WDExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2012WDEXPRESS_IDE" />
253 </InstallExecuteSequence>
254 </Fragment>
255</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2013.wxs b/src/ext/VisualStudio/wixlib/VS2013.wxs
new file mode 100644
index 00000000..6681b43f
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2013.wxs
@@ -0,0 +1,252 @@
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 <Fragment>
6 <Property Id="VS2013_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS2013DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS2013ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS2013_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS2013DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS2013ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2013_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS2013ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="12.0" Type="raw">
24 <DirectorySearch Id="VS2013XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS2013XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS2013_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS2013DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS2013ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS2013_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVS2013BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\12.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS2013_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS2013RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="12.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS2013DEVENV" Secure="yes">
53 <RegistrySearch Id="VS2013DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS2013Setup" Property="VS2013DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS2013DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS2013Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2013DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS2013InstallVSTemplates" Property="VS2013DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS2013DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2013DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# project system is installed as a part of -->
76 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
77 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
78 <!-- C# language tools were installed as a part of VS 2013 setup. -->
79 <Fragment>
80 <Property Id="VS2013_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
81 <RegistrySearch Id="SearchForVCS2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VC#" Name="ProductDir" Type="raw" />
82 </Property>
83 </Fragment>
84
85 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
86 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
87 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
88 <!-- Basic language tools were installed as a part of VS 2013 setup. -->
89 <Fragment>
90 <Property Id="VS2013_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
91 <RegistrySearch Id="SearchForVB2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VB" Name="ProductDir" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- Indicates whether the Visual Web Developer 2013 Express IDE component is installed. -->
96 <!-- If this property is set, that means Visual Web Developer 2013 Express Edition is -->
97 <!-- installed on the system. -->
98 <Fragment>
99 <Property Id="VWD2013EXPRESS_IDE" Secure="yes">
100 <ComponentSearch Id="SearchForVwdExpressIde2013Component" Guid="{04B98358-C73B-40F7-9946-AA80B316DA84}" Type="file">
101 <FileSearch Id="VwdExpressIde2013" Name="vwdexpress.exe" />
102 </ComponentSearch>
103 </Property>
104 </Fragment>
105 <!-- Custom action definition to run vwdexpress.exe /setup -->
106 <Fragment>
107 <CustomAction Id="VWD2013Setup" Property="VWD2013EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
108 <PropertyRef Id="VWD2013EXPRESS_IDE" />
109 <InstallExecuteSequence>
110 <Custom Action="VWD2013Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD2013EXPRESS_IDE" />
111 </InstallExecuteSequence>
112 </Fragment>
113 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
114 <Fragment>
115 <CustomAction Id="VWD2013InstallVSTemplates" Property="VWD2013EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
116 <PropertyRef Id="VWD2013EXPRESS_IDE" />
117 <InstallExecuteSequence>
118 <Custom Action="VWD2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD2013EXPRESS_IDE" />
119 </InstallExecuteSequence>
120 </Fragment>
121
122 <!-- Indicates whether the Visual Studio 2013 Express IDE for Phone component is installed. -->
123 <Fragment>
124 <Property Id="VPD2013EXPRESS_IDE" Secure="yes">
125 <RegistrySearch Id="VPD2013ExpressForPhoneEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VPDExpress\12.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
126 </Property>
127 </Fragment>
128 <!-- Custom action definition to run VPDexpress.exe /setup -->
129 <Fragment>
130 <CustomAction Id="VPD2013Setup" Property="VPD2013EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
131 <PropertyRef Id="VPD2013EXPRESS_IDE" />
132 <InstallExecuteSequence>
133 <Custom Action="VPD2013Setup" Before="InstallFinalize" Overridable="yes" Condition="VPD2013EXPRESS_IDE" />
134 </InstallExecuteSequence>
135 </Fragment>
136 <!-- Custom action definition to run VPDexpress.exe /InstallVSTemplates -->
137 <Fragment>
138 <CustomAction Id="VPD2013InstallVSTemplates" Property="VPD2013EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
139 <PropertyRef Id="VPD2013EXPRESS_IDE" />
140 <InstallExecuteSequence>
141 <Custom Action="VPD2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VPD2013EXPRESS_IDE" />
142 </InstallExecuteSequence>
143 </Fragment>
144
145 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
146 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
147 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
148 <!-- Web Developer language tools were installed as a part of VS 2013 setup. -->
149 <Fragment>
150 <Property Id="VS2013_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
151 <ComponentSearch Id="SearchForVWD2013ProjectSystemUnderVSSetup" Guid="{CDA2DE5A-F6F4-48D0-B9BA-58CFD381143C}" />
152 <ComponentSearch Id="SearchForVWD2013ProjectSystemUnderVWDSetup" Guid="{C6E8D1B3-85F3-4F3A-A6AE-4166F917C9FD}" Type="directory" />
153 </Property>
154 </Fragment>
155
156 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
157 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
158 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
159 <!-- C++ language tools were installed as a part of VS 2013 setup. -->
160 <Fragment>
161 <Property Id="VS2013_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
162 <RegistrySearch Id="SearchForVC2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VC" Name="ProductDir" Type="raw" />
163 </Property>
164 </Fragment>
165
166 <!-- Indicates whether the Visual Studio 2013 Team Test project system is installed -->
167 <Fragment>
168 <Property Id="VS2013_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
169 <RegistrySearch Id="SearchForVSTS2013TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
170 </Property>
171 </Fragment>
172
173 <!-- Indicates whether the Windows Installer XML project system is installed for VS2013 -->
174 <Fragment>
175 <Property Id="VS2013_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
176 <!-- Component search for the .pkgdef file for VS2013 -->
177 <ComponentSearch Id="SearchForVS2013WixSystemUnderVSSetup" Guid="{768F32E1-BAAB-5203-822D-3BD85F9BD26E}" />
178 </Property>
179 </Fragment>
180
181 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
182 <Fragment>
183 <Property Id="VS2013_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
184 <RegistrySearch Id="SearchForVSTS2013ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
185 </Property>
186 </Fragment>
187
188 <!-- Indicates whether the Visual Studio F# project system is installed -->
189 <Fragment>
190 <Property Id="VS2013_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
191 <RegistrySearch Id="SearchForVSTS2013FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\F#" Name="ProductDir" Type="raw" />
192 </Property>
193 </Fragment>
194
195 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
196 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
197 <!-- on the system. -->
198 <Fragment>
199 <Property Id="VS2013WINEXPRESS_IDE" Secure="yes">
200 <ComponentSearch Id="SearchForVS2013WinExpressIdeComponent" Guid="{5E7D5287-3ADA-4A8E-9953-C6B702BD1F01}" Type="file">
201 <FileSearch Id="VS2013WinExpressIde" Name="vswinexpress.exe" />
202 </ComponentSearch>
203 </Property>
204 </Fragment>
205
206 <!-- Custom action definition to run vswinexpress.exe /setup -->
207 <Fragment>
208 <CustomAction Id="VS2013WinExpressSetup" Property="VS2013WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
209 <PropertyRef Id="VS2013WINEXPRESS_IDE" />
210 <InstallExecuteSequence>
211 <Custom Action="VS2013WinExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS2013WINEXPRESS_IDE" />
212 </InstallExecuteSequence>
213 </Fragment>
214
215 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
216 <Fragment>
217 <CustomAction Id="VS2013WinExpressInstallVSTemplates" Property="VS2013WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
218 <PropertyRef Id="VS2013WINEXPRESS_IDE" />
219 <InstallExecuteSequence>
220 <Custom Action="VS2013WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2013WINEXPRESS_IDE" />
221 </InstallExecuteSequence>
222 </Fragment>
223
224 <!-- Indicates whether the Visual Studio Express for Windows Desktop IDE component is installed. -->
225 <!-- If this property is set, that means Visual Studio Express for Windows Desktop is installed -->
226 <!-- on the system. -->
227 <Fragment>
228 <Property Id="VS2013WDEXPRESS_IDE" Secure="yes">
229 <ComponentSearch Id="SearchForVS2013WDExpressIdeComponent" Guid="{6C65247B-900C-45AD-8ED8-3F20E668348E}" Type="file">
230 <FileSearch Id="VS2013WDExpressIde" Name="WDExpress.exe" />
231 </ComponentSearch>
232 </Property>
233 </Fragment>
234
235 <!-- Custom action definition to run WDExpress.exe /setup -->
236 <Fragment>
237 <CustomAction Id="VS2013WDExpressSetup" Property="VS2013WDEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
238 <PropertyRef Id="VS2013WDEXPRESS_IDE" />
239 <InstallExecuteSequence>
240 <Custom Action="VS2013WDExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS2013WDEXPRESS_IDE" />
241 </InstallExecuteSequence>
242 </Fragment>
243
244 <!-- Custom action definition to run WDExpress.exe /InstallVSTemplates -->
245 <Fragment>
246 <CustomAction Id="VS2013WDExpressInstallVSTemplates" Property="VS2013WDEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
247 <PropertyRef Id="VS2013WDEXPRESS_IDE" />
248 <InstallExecuteSequence>
249 <Custom Action="VS2013WDExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2013WDEXPRESS_IDE" />
250 </InstallExecuteSequence>
251 </Fragment>
252</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2015.wxs b/src/ext/VisualStudio/wixlib/VS2015.wxs
new file mode 100644
index 00000000..f14802e2
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2015.wxs
@@ -0,0 +1,186 @@
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 <Fragment>
6 <Property Id="VS2015_EXTENSIONS_DIR" Secure="yes">
7 <RegistrySearch Id="VS2015DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
8 <DirectorySearch Id="VS2015ExtensionsPathSearch" Path="Extensions" Depth="1" />
9 </RegistrySearch>
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS2015_PROJECTTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS2015DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
16 <DirectorySearch Id="VS2015ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2015_SCHEMAS_DIR" Secure="yes">
23 <RegistrySearch Id="VS2015ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw">
24 <DirectorySearch Id="VS2015XmlPathSearch" Path="Xml" Depth="1">
25 <DirectorySearch Id="VS2015XmlSchemasPathSearch" Path="Schemas" Depth="1" />
26 </DirectorySearch>
27 </RegistrySearch>
28 </Property>
29 </Fragment>
30
31 <Fragment>
32 <Property Id="VS2015_ITEMTEMPLATES_DIR" Secure="yes">
33 <RegistrySearch Id="VS2015DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
34 <DirectorySearch Id="VS2015ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS2015_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
41 <RegistrySearch Id="SearchForVS2015BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS2015_ROOT_FOLDER" Secure="yes">
47 <RegistrySearch Id="SearchForVS2015RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw" />
48 </Property>
49 </Fragment>
50
51 <Fragment>
52 <Property Id="VS2015DEVENV" Secure="yes">
53 <RegistrySearch Id="VS2015DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
54 </Property>
55 </Fragment>
56
57 <Fragment>
58 <CustomAction Id="VS2015Setup" Property="VS2015DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
59 <PropertyRef Id="VS2015DEVENV" />
60
61 <InstallExecuteSequence>
62 <Custom Action="VS2015Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2015DEVENV" />
63 </InstallExecuteSequence>
64 </Fragment>
65
66 <Fragment>
67 <CustomAction Id="VS2015InstallVSTemplates" Property="VS2015DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
68 <PropertyRef Id="VS2015DEVENV" />
69
70 <InstallExecuteSequence>
71 <Custom Action="VS2015InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2015DEVENV" />
72 </InstallExecuteSequence>
73 </Fragment>
74
75 <!-- Indicates whether the Visual C# project system is installed as a part of -->
76 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
77 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
78 <!-- C# language tools were installed as a part of VS 2015 setup. -->
79 <Fragment>
80 <Property Id="VS2015_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
81 <RegistrySearch Id="SearchForVCS2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC#" Name="ProductDir" Type="raw" />
82 </Property>
83 </Fragment>
84
85 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
86 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
87 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
88 <!-- Basic language tools were installed as a part of VS 2015 setup. -->
89 <Fragment>
90 <Property Id="VS2015_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
91 <RegistrySearch Id="SearchForVB2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VB" Name="ProductDir" Type="raw" />
92 </Property>
93 </Fragment>
94
95 <!-- Indicates whether the Visual Web Developer 2015 Express IDE component is installed. -->
96 <!-- If this property is set, that means Visual Web Developer 2015 Express Edition is -->
97 <!-- installed on the system. -->
98 <Fragment>
99 <Property Id="VWD2015EXPRESS_IDE" Secure="yes">
100 <RegistrySearch Id="VWD2015ExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
101 </Property>
102 </Fragment>
103 <!-- Custom action definition to run vwdexpress.exe /setup -->
104 <Fragment>
105 <CustomAction Id="VWD2015Setup" Property="VWD2015EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
106 <PropertyRef Id="VWD2015EXPRESS_IDE" />
107 <InstallExecuteSequence>
108 <Custom Action="VWD2015Setup" Before="InstallFinalize" Overridable="yes" Condition="VWD2015EXPRESS_IDE" />
109 </InstallExecuteSequence>
110 </Fragment>
111 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
112 <Fragment>
113 <CustomAction Id="VWD2015InstallVSTemplates" Property="VWD2015EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
114 <PropertyRef Id="VWD2015EXPRESS_IDE" />
115 <InstallExecuteSequence>
116 <Custom Action="VWD2015InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VWD2015EXPRESS_IDE" />
117 </InstallExecuteSequence>
118 </Fragment>
119
120 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
121 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
122 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
123 <!-- Web Developer language tools were installed as a part of VS 2015 setup. -->
124 <Fragment>
125 <Property Id="VS2015_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
126 <ComponentSearch Id="SearchForVWD2015ProjectSystemUnderVSSetup" Guid="274EB373-6B78-5EBD-8A6C-6D8094E58ECB" />
127 <ComponentSearch Id="SearchForVWD2015ProjectSystemUnderVWDSetup" Guid="71EBDA4A-4A15-426F-95C4-4FC051FD7AA4" Type="directory" />
128 </Property>
129 </Fragment>
130
131 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
132 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
133 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
134 <!-- C++ language tools were installed as a part of VS 2015 setup. -->
135 <Fragment>
136 <Property Id="VS2015_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
137 <RegistrySearch Id="SearchForVC2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC" Name="ProductDir" Type="raw" />
138 </Property>
139 </Fragment>
140
141 <!-- Indicates whether the Visual Studio 2015 Team Test project system is installed -->
142 <Fragment>
143 <Property Id="VS2015_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
144 <RegistrySearch Id="SearchForVSTS2015TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
145 </Property>
146 </Fragment>
147
148 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
149 <Fragment>
150 <Property Id="VS2015_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
151 <RegistrySearch Id="SearchForVSTS2015ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
152 </Property>
153 </Fragment>
154
155 <!-- Indicates whether the Visual Studio F# project system is installed -->
156 <Fragment>
157 <Property Id="VS2015_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
158 <RegistrySearch Id="SearchForVSTS2015FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\F#" Name="ProductDir" Type="raw" />
159 </Property>
160 </Fragment>
161
162 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
163 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
164 <!-- on the system. -->
165 <Fragment>
166 <Property Id="VS2015WINEXPRESS_IDE" Secure="yes">
167 <RegistrySearch Id="VS2015WinExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VSWinExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
168 </Property>
169 </Fragment>
170 <!-- Custom action definition to run vswinexpress.exe /setup -->
171 <Fragment>
172 <CustomAction Id="VS2015WinExpressSetup" Property="VS2015WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
173 <PropertyRef Id="VS2015WINEXPRESS_IDE" />
174 <InstallExecuteSequence>
175 <Custom Action="VS2015WinExpressSetup" Before="InstallFinalize" Overridable="yes" Condition="VS2015WINEXPRESS_IDE" />
176 </InstallExecuteSequence>
177 </Fragment>
178 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
179 <Fragment>
180 <CustomAction Id="VS2015WinExpressInstallVSTemplates" Property="VS2015WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
181 <PropertyRef Id="VS2015WINEXPRESS_IDE" />
182 <InstallExecuteSequence>
183 <Custom Action="VS2015WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2015WINEXPRESS_IDE" />
184 </InstallExecuteSequence>
185 </Fragment>
186</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2017.wxs b/src/ext/VisualStudio/wixlib/VS2017.wxs
new file mode 100644
index 00000000..5524361d
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2017.wxs
@@ -0,0 +1,142 @@
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 <Fragment>
6 <Property Id="VS2017_ROOT_FOLDER" Secure="yes" />
7
8 <!-- Currently supported only on x86 -->
9 <CustomActionRef Id="VSFindInstances" />
10 </Fragment>
11
12 <Fragment>
13 <PropertyRef Id="VS2017_ROOT_FOLDER" />
14 <Property Id="VS2017_IDE_DIR" Secure="yes">
15 <DirectorySearch Id="VS2017DirectorySearch" Path="[VS2017_ROOT_FOLDER]">
16 <DirectorySearch Id="VS2017EnvironmentDirectorySearch" Path="Common7\IDE" Depth="1" />
17 </DirectorySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2017_EXTENSIONS_DIR" Secure="yes">
23 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
24 <DirectorySearch Id="VS2017ExtensionsDirectorySearch" Path="Extensions" Depth="1" />
25 </DirectorySearchRef>
26 </Property>
27 </Fragment>
28
29 <Fragment>
30 <Property Id="VS2017_PROJECTTEMPLATES_DIR" Secure="yes">
31 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
32 <DirectorySearch Id="VS2017ProjectTemplatesDirectorySearch" Path="ProjectTemplates" Depth="1" />
33 </DirectorySearchRef>
34 </Property>
35 </Fragment>
36
37 <Fragment>
38 <PropertyRef Id="VS2017_ROOT_FOLDER" />
39 <Property Id="VS2017_SCHEMAS_DIR" Secure="yes">
40 <DirectorySearch Id="VS2017XmlDirectorySearch" Path="[VS2017_ROOT_FOLDER]\Xml" Depth="1">
41 <DirectorySearch Id="VS2017XmlSchemasDirectorySearch" Path="Schemas" Depth="1" />
42 </DirectorySearch>
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2017_ITEMTEMPLATES_DIR" Secure="yes">
48 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
49 <DirectorySearch Id="VS2017ItemTemplatesDirectorySearch" Path="ItemTemplates" Depth="1" />
50 </DirectorySearchRef>
51 </Property>
52 </Fragment>
53
54 <Fragment>
55 <PropertyRef Id="VS2017_ROOT_FOLDER" />
56 <Property Id="VS2017_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
57 <DirectorySearch Id="VS2017SDKDirectorySearch" Path="[VS2017_ROOT_FOLDER]\SDK" Depth="1">
58 <DirectorySearch Id="SearchForVS2017BootstrapperPackageDirectory" Path="Bootstrapper" Depth="1" />
59 </DirectorySearch>
60 </Property>
61 </Fragment>
62
63 <Fragment>
64 <Property Id="VS2017DEVENV" Secure="yes">
65 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
66 <FileSearch Id="VS2017DevEnvSearch" Name="devenv.exe" />
67 </DirectorySearchRef>
68 </Property>
69 </Fragment>
70
71 <Fragment>
72 <CustomAction Id="VS2017Setup" Property="VS2017DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
73 <PropertyRef Id="VS2017DEVENV" />
74
75 <InstallExecuteSequence>
76 <Custom Action="VS2017Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2017DEVENV" />
77 </InstallExecuteSequence>
78 </Fragment>
79
80 <Fragment>
81 <CustomAction Id="VS2017InstallVSTemplates" Property="VS2017DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
82 <PropertyRef Id="VS2017DEVENV" />
83
84 <InstallExecuteSequence>
85 <Custom Action="VS2017InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2017DEVENV" />
86 </InstallExecuteSequence>
87 </Fragment>
88
89 <!-- Indicates whether the Visual C# project system is installed as a part of -->
90 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
91 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
92 <!-- C# language tools were installed as a part of VS 2017 setup. -->
93 <Fragment>
94 <Property Id="VS2017_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
95 <CustomActionRef Id="VSFindInstances" />
96 </Fragment>
97
98 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
99 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
100 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
101 <!-- Basic language tools were installed as a part of VS 2017 setup. -->
102 <Fragment>
103 <Property Id="VS2017_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes" />
104 <CustomActionRef Id="VSFindInstances" />
105 </Fragment>
106
107 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
108 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
109 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
110 <!-- Web Developer language tools were installed as a part of VS 2017 setup. -->
111 <Fragment>
112 <Property Id="VS2017_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes" />
113 <CustomActionRef Id="VSFindInstances" />
114 </Fragment>
115
116 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
117 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
118 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
119 <!-- C++ language tools were installed as a part of VS 2017 setup. -->
120 <Fragment>
121 <Property Id="VS2017_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes" />
122 <CustomActionRef Id="VSFindInstances" />
123 </Fragment>
124
125 <!-- Indicates whether the Visual Studio 2017 Team Test project system is installed -->
126 <Fragment>
127 <Property Id="VS2017_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes" />
128 <CustomActionRef Id="VSFindInstances" />
129 </Fragment>
130
131 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
132 <Fragment>
133 <Property Id="VS2017_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes" />
134 <CustomActionRef Id="VSFindInstances" />
135 </Fragment>
136
137 <!-- Indicates whether the Visual Studio F# project system is installed -->
138 <Fragment>
139 <Property Id="VS2017_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
140 <CustomActionRef Id="VSFindInstances" />
141 </Fragment>
142</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VS2019.wxs b/src/ext/VisualStudio/wixlib/VS2019.wxs
new file mode 100644
index 00000000..0be63dec
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2019.wxs
@@ -0,0 +1,142 @@
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 <Fragment>
6 <Property Id="VS2019_ROOT_FOLDER" Secure="yes" />
7
8 <!-- Currently supported only on x86 -->
9 <CustomActionRef Id="VSFindInstances" />
10 </Fragment>
11
12 <Fragment>
13 <PropertyRef Id="VS2019_ROOT_FOLDER" />
14 <Property Id="VS2019_IDE_DIR" Secure="yes">
15 <DirectorySearch Id="VS2019DirectorySearch" Path="[VS2019_ROOT_FOLDER]">
16 <DirectorySearch Id="VS2019EnvironmentDirectorySearch" Path="Common7\IDE" Depth="1" />
17 </DirectorySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2019_EXTENSIONS_DIR" Secure="yes">
23 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
24 <DirectorySearch Id="VS2019ExtensionsDirectorySearch" Path="Extensions" Depth="1" />
25 </DirectorySearchRef>
26 </Property>
27 </Fragment>
28
29 <Fragment>
30 <Property Id="VS2019_PROJECTTEMPLATES_DIR" Secure="yes">
31 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
32 <DirectorySearch Id="VS2019ProjectTemplatesDirectorySearch" Path="ProjectTemplates" Depth="1" />
33 </DirectorySearchRef>
34 </Property>
35 </Fragment>
36
37 <Fragment>
38 <PropertyRef Id="VS2019_ROOT_FOLDER" />
39 <Property Id="VS2019_SCHEMAS_DIR" Secure="yes">
40 <DirectorySearch Id="VS2019XmlDirectorySearch" Path="[VS2019_ROOT_FOLDER]\Xml" Depth="1">
41 <DirectorySearch Id="VS2019XmlSchemasDirectorySearch" Path="Schemas" Depth="1" />
42 </DirectorySearch>
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2019_ITEMTEMPLATES_DIR" Secure="yes">
48 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
49 <DirectorySearch Id="VS2019ItemTemplatesDirectorySearch" Path="ItemTemplates" Depth="1" />
50 </DirectorySearchRef>
51 </Property>
52 </Fragment>
53
54 <Fragment>
55 <PropertyRef Id="VS2019_ROOT_FOLDER" />
56 <Property Id="VS2019_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
57 <DirectorySearch Id="VS2019SDKDirectorySearch" Path="[VS2019_ROOT_FOLDER]\SDK" Depth="1">
58 <DirectorySearch Id="SearchForVS2019BootstrapperPackageDirectory" Path="Bootstrapper" Depth="1" />
59 </DirectorySearch>
60 </Property>
61 </Fragment>
62
63 <Fragment>
64 <Property Id="VS2019DEVENV" Secure="yes">
65 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
66 <FileSearch Id="VS2019DevEnvSearch" Name="devenv.exe" />
67 </DirectorySearchRef>
68 </Property>
69 </Fragment>
70
71 <Fragment>
72 <CustomAction Id="VS2019Setup" Property="VS2019DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
73 <PropertyRef Id="VS2019DEVENV" />
74
75 <InstallExecuteSequence>
76 <Custom Action="VS2019Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2019DEVENV" />
77 </InstallExecuteSequence>
78 </Fragment>
79
80 <Fragment>
81 <CustomAction Id="VS2019InstallVSTemplates" Property="VS2019DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
82 <PropertyRef Id="VS2019DEVENV" />
83
84 <InstallExecuteSequence>
85 <Custom Action="VS2019InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2019DEVENV" />
86 </InstallExecuteSequence>
87 </Fragment>
88
89 <!-- Indicates whether the Visual C# project system is installed as a part of -->
90 <!-- Visual Studio 2019 standard or higher. If this property is set, that -->
91 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
92 <!-- C# language tools were installed as a part of VS 2019 setup. -->
93 <Fragment>
94 <Property Id="VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
95 <CustomActionRef Id="VSFindInstances" />
96 </Fragment>
97
98 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
99 <!-- Visual Studio 2019 standard or higher. If this property is set, that -->
100 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
101 <!-- Basic language tools were installed as a part of VS 2019 setup. -->
102 <Fragment>
103 <Property Id="VS2019_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes" />
104 <CustomActionRef Id="VSFindInstances" />
105 </Fragment>
106
107 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
108 <!-- Visual Studio 2019 standard or higher. If this property is set, that -->
109 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
110 <!-- Web Developer language tools were installed as a part of VS 2019 setup. -->
111 <Fragment>
112 <Property Id="VS2019_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes" />
113 <CustomActionRef Id="VSFindInstances" />
114 </Fragment>
115
116 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
117 <!-- Visual Studio 2019 standard or higher. If this property is set, that -->
118 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
119 <!-- C++ language tools were installed as a part of VS 2019 setup. -->
120 <Fragment>
121 <Property Id="VS2019_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes" />
122 <CustomActionRef Id="VSFindInstances" />
123 </Fragment>
124
125 <!-- Indicates whether the Visual Studio 2019 Team Test project system is installed -->
126 <Fragment>
127 <Property Id="VS2019_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes" />
128 <CustomActionRef Id="VSFindInstances" />
129 </Fragment>
130
131 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
132 <Fragment>
133 <Property Id="VS2019_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes" />
134 <CustomActionRef Id="VSFindInstances" />
135 </Fragment>
136
137 <!-- Indicates whether the Visual Studio F# project system is installed -->
138 <Fragment>
139 <Property Id="VS2019_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
140 <CustomActionRef Id="VSFindInstances" />
141 </Fragment>
142</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi b/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi
new file mode 100644
index 00000000..f9cd96f4
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi
@@ -0,0 +1,17 @@
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 xmlns="http://wixtoolset.org/schemas/v4/wxs">
4 <?include caSuffix.wxi ?>
5 <Fragment>
6 <CustomAction Id="VSFindInstances$(var.Suffix)" DllEntry="FindInstances" Execute="firstSequence" Return="check" SuppressModularization="yes" BinaryRef="VSCA$(var.Suffix)" />
7 <InstallExecuteSequence>
8 <Custom Action="VSFindInstances$(var.Suffix)" Before="AppSearch" Overridable="yes" />
9 </InstallExecuteSequence>
10 <InstallUISequence>
11 <Custom Action="VSFindInstances$(var.Suffix)" Before="AppSearch" Overridable="yes" />
12 </InstallUISequence>
13 </Fragment>
14 <Fragment>
15 <Binary Id="VSCA$(var.Suffix)" SourceFile="vsca.dll" />
16 </Fragment>
17</Include>
diff --git a/src/ext/VisualStudio/wixlib/VSExtension_x86.wxs b/src/ext/VisualStudio/wixlib/VSExtension_x86.wxs
new file mode 100644
index 00000000..288cf687
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VSExtension_x86.wxs
@@ -0,0 +1,8 @@
1<?xml version="1.0"?>
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=x86 ?>
7 <?include VSExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VsixPackage.wxs b/src/ext/VisualStudio/wixlib/VsixPackage.wxs
new file mode 100644
index 00000000..5937177b
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VsixPackage.wxs
@@ -0,0 +1,60 @@
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 <Fragment>
6 <Property Id="VS2010_VSIX_INSTALLER_PATH" Secure="yes">
7 <RegistrySearch Id="WixVS2010EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
8 <FileSearch Id="WixVS2010VsixInstaller" Name="VSIXInstaller.exe" />
9 </RegistrySearch>
10 </Property>
11
12 <Property Id="VS2012_VSIX_INSTALLER_PATH" Secure="yes">
13 <RegistrySearch Id="WixVS2012EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
14 <FileSearch Id="WixVS2012VsixInstaller" Name="VSIXInstaller.exe" />
15 </RegistrySearch>
16 </Property>
17
18 <Property Id="VS2013_VSIX_INSTALLER_PATH" Secure="yes">
19 <RegistrySearch Id="WixVS2013EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
20 <FileSearch Id="WixVS2013VsixInstaller" Name="VSIXInstaller.exe" />
21 </RegistrySearch>
22 </Property>
23
24 <!-- VS2015 is the latest VSIX at this point in time, so search for that by default. -->
25 <Property Id="VS2015_VSIX_INSTALLER_PATH" Secure="yes">
26 <RegistrySearch Id="WixVS2015EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
27 <FileSearch Id="WixVS2015VsixInstaller" Name="VSIXInstaller.exe" />
28 </RegistrySearch>
29 </Property>
30
31 <Property Id="VS_VSIX_INSTALLER_PATH" Secure="yes" />
32
33 <!-- VWD2012 registers differently than the rest of Visual Studio, so search for it in the case VS2012 is missing. -->
34 <Property Id="VWD2012_VSIX_INSTALL_ROOT">
35 <RegistrySearch Id="Vwd2012Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\11.0\Setup\VS" Name="ProductDir" Type="raw" />
36 </Property>
37
38 <!-- VWD2013 registers differently than the rest of Visual Studio, so search for it in the case VS2013 is missing. -->
39 <Property Id="VWD2013_VSIX_INSTALL_ROOT">
40 <RegistrySearch Id="Vwd2013Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\12.0\Setup\VS" Name="ProductDir" Type="raw" />
41 </Property>
42
43 <!-- VWD2015 registers differently than the rest of Visual Studio, so search for it in the case VS2015 is missing. -->
44 <Property Id="VWD2015_VSIX_INSTALL_ROOT">
45 <RegistrySearch Id="Vwd2015Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="ProductDir" Type="raw" />
46 </Property>
47
48 <!-- Use the latest VS- or VWD-installed VSIXInstaller.exe. -->
49 <SetProperty Action="SetVS2015Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2015_VSIX_INSTALLER_PATH]" Sequence="both" After="AppSearch" Condition="NOT VS_VSIX_INSTALLER_PATH AND VS2015_VSIX_INSTALLER_PATH" />
50 <SetProperty Action="Vwd2015VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2015_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2015Vsix" Condition="NOT VS_VSIX_INSTALLER_PATH AND VWD2015_VSIX_INSTALL_ROOT" />
51
52 <SetProperty Action="SetVS2013Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2013_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2015VsixWhenVSAbsent" Condition="NOT VS_VSIX_INSTALLER_PATH AND VS2013_VSIX_INSTALLER_PATH" />
53 <SetProperty Action="Vwd2013VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2013_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2013Vsix" Condition="NOT VS_VSIX_INSTALLER_PATH AND VWD2013_VSIX_INSTALL_ROOT" />
54
55 <SetProperty Action="SetVS2012Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2012_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2013VsixWhenVSAbsent" Condition="NOT VS_VSIX_INSTALLER_PATH AND VS2012_VSIX_INSTALLER_PATH" />
56 <SetProperty Action="Vwd2012VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2012_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2012Vsix" Condition="NOT VS_VSIX_INSTALLER_PATH AND VWD2012_VSIX_INSTALL_ROOT" />
57
58 <SetProperty Action="SetVS2010Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2010_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2012VsixWhenVSAbsent" Condition="NOT VS_VSIX_INSTALLER_PATH AND VS2010_VSIX_INSTALLER_PATH" />
59 </Fragment>
60</Wix>
diff --git a/src/ext/VisualStudio/wixlib/caSuffix.wxi b/src/ext/VisualStudio/wixlib/caSuffix.wxi
new file mode 100644
index 00000000..a56a2393
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/caSuffix.wxi
@@ -0,0 +1,28 @@
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<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?ifndef platform ?>
6 <?error Required value "platform" not defined in include caSuffix.wxi ?>
7 <?endif ?>
8
9 <?ifdef Suffix ?>
10 <?undef Suffix ?>
11 <?undef DeferredSuffix ?>
12 <?endif ?>
13
14 <?if $(var.platform)="x86" ?>
15 <?define Suffix="" ?>
16 <?define DeferredSuffix="" ?>
17 <?endif ?>
18
19 <?if $(var.platform)="x64" ?>
20 <?define Suffix="_x64" ?>
21 <?define DeferredSuffix="_64" ?>
22 <?endif ?>
23
24 <?if $(var.platform)="arm" ?>
25 <?define Suffix="_ARM" ?>
26 <?define DeferredSuffix="_ARM" ?>
27 <?endif ?>
28</Include>
diff --git a/src/ext/VisualStudio/wixlib/vs.v3.ncrunchproject b/src/ext/VisualStudio/wixlib/vs.v3.ncrunchproject
new file mode 100644
index 00000000..319cd523
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs.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/VisualStudio/wixlib/vs.wixproj b/src/ext/VisualStudio/wixlib/vs.wixproj
new file mode 100644
index 00000000..db3e2cff
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs.wixproj
@@ -0,0 +1,19 @@
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 <Cultures>en-us</Cultures>
10 </PropertyGroup>
11
12 <ItemGroup>
13 <ProjectReference Include="..\ca\vsca.vcxproj" Properties="Platform=x86" ReferenceOutputAssembly="false" />
14 </ItemGroup>
15
16 <ItemGroup>
17 <PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="All" />
18 </ItemGroup>
19</Project>
diff --git a/src/ext/VisualStudio/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs b/src/ext/VisualStudio/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs
new file mode 100644
index 00000000..66757349
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs
@@ -0,0 +1,63 @@
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 <Fragment Id="VS2005_Namespace">
6 <DirectoryRef Id="VSIPCC">
7 <Component Id="VSIPCC_Reg" Guid="96F72137-191F-4120-A2FA-9DA8F6C2C993" KeyPath="yes">
8 <CreateFolder />
9 <RegistryValue Id="_FldbVs8_RegFile_15039_________00000" Root="HKLM" Key="SOFTWARE\Microsoft\MSDN\8.0\Help\0x0409\{F658C410-5D42-41a9-AB6C-83E8FE395595}" Name="Filename" Type="string" Value="ms-help://MS.VSIPCC.v80" />
10 </Component>
11 <Directory Id="vsipcc_v8.0" Name="v8.0" FileSource="$(sys.SOURCEFILEDIR)\Redist">
12 <Component Id="vsipcc_collection________" Guid="454FF049-0B57-4927-8A0C-AA10608A480C">
13 <File Id="FL_vsipcc_reg_hxs_86878________" Name="vsipcc_reg.hxs" KeyPath="yes" />
14 <File Id="FL_vsipcc_hxc_86879________" Name="vsipcc.hxc" />
15 <File Id="FL_vsipcc_hxt_86880________" Name="vsipcc.hxt" />
16 <File Id="FL_vsipccALinks_hxk_86881________" Name="vsipccALinks.hxk" />
17 <File Id="FL_vsipccBLinks_hxk_86882________" Name="vsipccBLinks.hxk" />
18 <File Id="FL_vsipccFLinks_hxk_86885________" Name="vsipccFLinks.hxk" />
19 <File Id="FL_vsipccKLinks_hxk_86886________" Name="vsipccKLinks.hxk" />
20 <File Id="FL_vsipccNamedURLs_hxk_86888________.3643236F_FC70_11D3_A536_0090278A1BB" Name="vsipccNamedURLs.hxk" />
21 <File Id="FL_vsipccSlinks_hxk_93825________" Name="vsipccSlinks.hxk" />
22 <File Id="FL_VsipCCSamples_HxK_103959________" Name="VsipCCSamples.HxK" />
23 </Component>
24 </Directory>
25 </DirectoryRef>
26 <CustomAction Id="CA_HxMerge_VSIPCC_VSCC" Return="ignore" Execute="commit" Impersonate="no" ExeCommand="ms-help://MS.VSCC.v80" BinaryRef="BIN_File_60377" />
27 <CustomAction Id="CA_HxMerge_VSIPCC_VSExpCC" Return="ignore" Execute="commit" Impersonate="no" ExeCommand="ms-help://MS.VSExpressCC.v80" BinaryRef="BIN_File_60377" />
28 <InstallExecuteSequence>
29 <Custom Action="CA_HxMerge_VSIPCC_VSCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" />
30 <Custom Action="CA_HxMerge_VSIPCC_VSExpCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" />
31 </InstallExecuteSequence>
32 <Binary Id="BIN_File_60377" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_60377.dll" />
33 <CustomTable Id="HelpPlugin">
34 <Row>
35 <Data Column="HelpNamespace_" Value="MS_VSIPCC_v80" />
36 <Data Column="HelpNamespace_Parent" Value="MS_VSCC_v80" />
37 <Data Column="File_HxT" Value="FL_vsipcc_hxt_86880________" />
38 <Data Column="File_HxA" />
39 <Data Column="File_ParentHxT" />
40 </Row>
41 <Row>
42 <Data Column="HelpNamespace_" Value="MS_VSIPCC_v80" />
43 <Data Column="HelpNamespace_Parent" Value="MS_VSExpressCC_v80" />
44 <Data Column="File_HxT" Value="FL_vsipcc_hxt_86880________" />
45 <Data Column="File_HxA" />
46 <Data Column="File_ParentHxT" />
47 </Row>
48 </CustomTable>
49 <CustomTable Id="HelpNamespace">
50 <Row>
51 <Data Column="NamespaceKey" Value="MS_VSIPCC_v80" />
52 <Data Column="NamespaceName" Value="MS.VSIPCC.v80" />
53 <Data Column="File_Collection" Value="FL_vsipcc_hxc_86879________" />
54 <Data Column="Description" Value="VSIP Documentation" />
55 </Row>
56 </CustomTable>
57
58 <ComponentGroup Id="Help2_VS2005_Namespace_Components">
59 <ComponentRef Id="VSIPCC_Reg" />
60 <ComponentRef Id="vsipcc_collection________" />
61 </ComponentGroup>
62 </Fragment>
63</Wix>
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/BIN_File_60377.dll b/src/ext/VisualStudio/wixlib/vs2005/redist/BIN_File_60377.dll
new file mode 100644
index 00000000..dfdddf66
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/BIN_File_60377.dll
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipCCSamples.HxK b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipCCSamples.HxK
new file mode 100644
index 00000000..00db745c
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipCCSamples.HxK
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "Samples"
6 Id = "VsipCCSamples"
7 AutoInclude = "Yes"
8 Merge = "Yes"
9 Sort = "Yes"
10 Title = "Samples"
11 Visible = "No"
12 LangId = "1033"
13 >
14</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxc b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxc
new file mode 100644
index 00000000..406e7f2b
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxc
@@ -0,0 +1,33 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpCollection>
3<HelpCollection
4 DTDVersion = "1.0"
5 Id = "vsipcc.8.0"
6 FileVersion = "8.0.41025.0"
7 LangId = "1033"
8 Title = "Microsoft VSIP Combined Help Collection"
9 Copyright = "Copyright (c) 2005 Microsoft Corporation. All Rights Reserved."
10 >
11 <TOCDef File = "vsipcc.HxT" Id = "InsertTOC:VSIPCC" />
12 <KeywordIndexDef File = "vsipccALinks.HxK"/>
13 <KeywordIndexDef File = "vsipccBLinks.HxK"/>
14 <KeywordIndexDef File = "vsipccCLinks.HxK"/>
15 <KeywordIndexDef File = "vsipccFLinks.HxK"/>
16 <KeywordIndexDef File = "vsipccKLinks.HxK"/>
17 <KeywordIndexDef File = "vsipccSLinks.HxK"/>
18 <KeywordIndexDef File = "vsipccNamedUrls.HxK"/>
19 <KeywordIndexDef File= "VsipCCSamples.HxK" />
20
21 <ItemMoniker Name = "!DefaultNamedUrlIndex" ProgId = "HxDs.HxIndex" InitData = "VsccNamedUrls"/>
22 <ItemMoniker Name = "!SampleInfo" ProgId = "HxDs.HxSampleCollection" InitData = "Samples"/>
23 <ItemMoniker Name = "!DefaultTOC" ProgId = "HxDs.HxHierarchy" InitData = "TOC"/>
24 <ItemMoniker Name = "!DefaultFullTextSearch" ProgId = "HxDs.HxFullTextSearch" InitData = ""/>
25 <ItemMoniker Name = "!DefaultAssociativeIndex" ProgId = "HxDs.HxIndex" InitData = "A"/>
26 <ItemMoniker Name = "!DefaultDynamicLinkIndex" ProgId = "HxDs.HxIndex" InitData = "B"/>
27 <ItemMoniker Name = "!DefaultCodeIndex" ProgId = "HxDs.HxIndex" InitData = "C"/>
28 <ItemMoniker Name = "!DefaultContextWindowIndex" ProgId = "HxDs.HxIndex" InitData = "F"/>
29 <ItemMoniker Name = "!DefaultKeywordIndex" ProgId = "HxDs.HxIndex" InitData = "K"/>
30 <ItemMoniker Name = "!DefaultSearchWindowIndex" ProgId = "HxDs.HxIndex" InitData = "S"/>
31 <ItemMoniker Name = "!DefaultSampleIndex" ProgId="HxDs.HxIndex" InitData="Samples" />
32</HelpCollection>
33
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxt b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxt
new file mode 100644
index 00000000..613dcfbb
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc.hxt
@@ -0,0 +1,15 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpTOC>
3<HelpTOC
4 DTDVersion = "1.0"
5 Id = "vsipcc_TOC"
6 FileVersion = "8.0.0.0"
7 LangId = "1033"
8 ParentNodeIcon = "Book"
9 PluginStyle = "Flat"
10 >
11 <HelpTOCNode Id = "InsertTOC:VSIP" NodeType = "TOC"/>
12 <HelpTOCNode Id = "InsertTOC:Partner" NodeType = "TOC"/>
13</HelpTOC>
14
15
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccALinks.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccALinks.hxk
new file mode 100644
index 00000000..27017f76
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccALinks.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "A"
6 Id = "vsipcc8.0_ALinks"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "HxLink Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccBLinks.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccBLinks.hxk
new file mode 100644
index 00000000..b37d2e18
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccBLinks.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "B"
6 Id = "vsipcc8.0_BLinks"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "Dynamic Link Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex>
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccFLinks.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccFLinks.hxk
new file mode 100644
index 00000000..2d37efbf
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccFLinks.hxk
@@ -0,0 +1,14 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "F"
6 Id = "vsipcc8.0_FLinks"
7 AutoInclude = "Yes"
8 Merge = "Yes"
9 Sort = "Yes"
10 Title = "Dynamic Help and F1 Index"
11 Visible = "No"
12 LangId = "1033"
13 >
14</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccKLinks.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccKLinks.hxk
new file mode 100644
index 00000000..2938eff3
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccKLinks.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "K"
6 Id = "vsipcc8.0_KLinks"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "Keyword Index"
10 Visible = "Yes"
11 LangId = "1033"
12 >
13</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccNamedURLs.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccNamedURLs.hxk
new file mode 100644
index 00000000..8691c54c
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccNamedURLs.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "VsipccNamedUrls"
6 Id = "VsipccNamedUrls"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "VSIPCC NamedUrl Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccSlinks.hxk b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccSlinks.hxk
new file mode 100644
index 00000000..9d193521
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipccSlinks.hxk
@@ -0,0 +1,14 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "S"
6 Id = "vsipcc8.0_SLinks"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "Search Enhancement Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex>
14
diff --git a/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc_reg.hxs b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc_reg.hxs
new file mode 100644
index 00000000..3f2905c4
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2005/redist/vsipcc_reg.hxs
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs b/src/ext/VisualStudio/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs
new file mode 100644
index 00000000..9fb1a0e5
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs
@@ -0,0 +1,60 @@
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 <Fragment Id="VS2008_Namespace">
6 <Binary Id="BIN_435439_x86_enu" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_435439_x86_enu.dll" />
7 <CustomAction Id="CA_ScheduleExtHelpPlugin_VSCC_VSIPCC" DllEntry="ScheduleExtHelpPlugin" Return="ignore" BinaryRef="BIN_435439_x86_enu" />
8 <CustomAction Id="CA_ExtHelpPlugin" DllEntry="ExtHelpPluginAction" Execute="deferred" Impersonate="no" BinaryRef="BIN_435439_x86_enu" />
9
10 <DirectoryRef Id="VSIPCC">
11 <Component Id="VSIPCC_Reg_27501" Guid="{7C32E9FB-9C4D-416B-8ACC-9D487ED0ADBD}" KeyPath="yes">
12 <CreateFolder Directory="VSIPCC" />
13 <RegistryValue Id="reg7291AF922BB02FD23E15437538DF9347" Root="HKLM" Key="SOFTWARE\Microsoft\MSDN\9.0\Help\0x0409\{F658C410-5D42-41a9-AB6C-83E8FE395595}" Name="Filename" Value="ms-help://MS.VSIPCC.v90" Type="string" />
14 </Component>
15 <Directory Id="vsipcc_v9.0" Name="v9.0" FileSource="$(sys.SOURCEFILEDIR)\Redist">
16 <Component Id="vsipcc_collection_25097" Guid="{D419D13C-D6D8-4E2A-A3EF-B26398D36524}">
17 <File Id="FL_vsipcc_reg_hxs_86878_86878_cn_ln" Name="vsipcc_reg.hxs" KeyPath="yes" Vital="no" />
18 <File Id="FL_vsipcc_hxc_86879_86879_cn_ln" Name="_vsipcc90.hxc" Vital="no" />
19 <File Id="FL_vsipcc_hxt_86880_86880_cn_ln" Name="_vsipcc90.hxt" Vital="no" />
20 <File Id="FL_vsipccALinks_hxk_86881_86881_cn_ln" Name="_ALinks.hxk" Vital="no" />
21 <File Id="FL_vsipccBLinks_hxk_86882_86882_cn_ln" Name="_BLinks.hxk" Vital="no" />
22 <File Id="FL_vsipccCLinks_hxk_cn_ln" Name="_CLinks.hxk" Vital="no" />
23 <File Id="FL_vsipccFLinks_hxk_86885_86885_cn_ln" Name="_FLinks.hxk" Vital="no" />
24 <File Id="FL_vsipccKLinks_hxk_86886_86886_cn_ln" Name="_KLinks.hxk" Vital="no" />
25 <File Id="FL_vsipccNamedURLs_hxk_86888_86888_cn_ln" Name="_vsipcc_namedUrls.hxk" Vital="no" />
26 <File Id="FL_vsipccSlinks_hxk_93825_93825_cn_ln" Name="_SLinks.hxk" Vital="no" />
27 <File Id="FL_VsipCCSamples_HxK_103959_103959_cn_ln" Name="_vsipcc_samples.HxK" Vital="no" />
28 </Component>
29 </Directory>
30 </DirectoryRef>
31 <CustomTable Id="HelpNamespace">
32 <Row>
33 <Data Column="NamespaceKey" Value="MS.VSIPCC.v90" />
34 <Data Column="NamespaceName" Value="MS.VSIPCC.v90" />
35 <Data Column="File_Collection" Value="FL_vsipcc_hxc_86879_86879_cn_ln" />
36 <Data Column="Description" Value="VSIP Documentation" />
37 </Row>
38 </CustomTable>
39 <CustomTable Id="HelpPlugin">
40 <Row>
41 <Data Column="HelpNamespace_" Value="MS.VSIPCC.v90" />
42 <Data Column="HelpNamespace_Parent" Value="MS.VSCC.v90" />
43 <Data Column="File_HxT" Value="FL_vsipcc_hxt_86880_86880_cn_ln" />
44 <Data Column="File_HxA" />
45 <Data Column="File_ParentHxT" />
46 </Row>
47 </CustomTable>
48 <Property Id="EXTERNALPLUGINLIST" Value="MS.VSCC.v90;MS.VSIPCC.v90" />
49 <Property Id="DirectoryTable_x86" Value="DirectoryTable" />
50 <Property Id="HHFilterTable" Value="HHFilterTable" />
51 <InstallExecuteSequence>
52 <Custom Action="CA_ScheduleExtHelpPlugin_VSCC_VSIPCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" Condition="Not Installed" />
53 </InstallExecuteSequence>
54
55 <ComponentGroup Id="Help2_VS2008_Namespace_Components">
56 <ComponentRef Id="VSIPCC_Reg_27501" />
57 <ComponentRef Id="vsipcc_collection_25097" />
58 </ComponentGroup>
59 </Fragment>
60</Wix>
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/BIN_435439_x86_enu.dll b/src/ext/VisualStudio/wixlib/vs2008/redist/BIN_435439_x86_enu.dll
new file mode 100644
index 00000000..7f5e9436
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/BIN_435439_x86_enu.dll
Binary files differ
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_ALinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_ALinks.hxk
new file mode 100644
index 00000000..dd6df168
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_ALinks.hxk
@@ -0,0 +1,10 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex DTDVersion = "1.0"
4 Name="A"
5 Id = "_ALinks"
6 Merge="Yes"
7 Sort="Yes"
8 Title="A-link Index"
9 Visible="No">
10</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_BLinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_BLinks.hxk
new file mode 100644
index 00000000..a2288162
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_BLinks.hxk
@@ -0,0 +1,10 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex DTDVersion = "1.0"
4 Name="B"
5 Id = "_BLinks"
6 Merge="Yes"
7 Sort="Yes"
8 Title="B-link Index"
9 Visible="No">
10</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_CLinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_CLinks.hxk
new file mode 100644
index 00000000..da0df730
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_CLinks.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "C"
6 Id = "_CLinks"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "Code Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex>
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_FLinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_FLinks.hxk
new file mode 100644
index 00000000..37dfda34
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_FLinks.hxk
@@ -0,0 +1,10 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex DTDVersion = "1.0"
4 Name="F"
5 Id = "_FLinks"
6 Merge="Yes"
7 Sort="Yes"
8 Title="F-link Index"
9 Visible="No">
10</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_KLinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_KLinks.hxk
new file mode 100644
index 00000000..2303ed0c
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_KLinks.hxk
@@ -0,0 +1,10 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex Name = "K"
4 Id = "_KLinks"
5 DTDVersion = "1.0"
6 Merge="Yes"
7 Sort="Yes"
8 Title="Keyword Index"
9 Visible="Yes">
10</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_SLinks.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_SLinks.hxk
new file mode 100644
index 00000000..9f65eca3
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_SLinks.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name="S"
6 Id = "_SLinks"
7 AutoInclude = "Yes"
8 Merge="Yes"
9 Sort="Yes"
10 Title="Search Index"
11 Visible="No"
12 LangId = "1033">
13</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxc b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxc
new file mode 100644
index 00000000..9ad6869e
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxc
@@ -0,0 +1,33 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpCollection>
3<HelpCollection
4 DTDVersion = "1.0"
5 Id = "vsipcc.9.0"
6 FileVersion = "9.0.20220.0"
7 LangId = "1033"
8 Title = "Visual Studio Orcas Partner Documentation"
9 Copyright = "Copyright (c) 2007 Microsoft Corporation. All Rights Reserved."
10 >
11 <TOCDef File = "_vsipcc90.HxT" Id = "InsertTOC:VSIPCC" />
12 <KeywordIndexDef File = "_ALinks.HxK"/>
13 <KeywordIndexDef File = "_BLinks.HxK"/>
14 <KeywordIndexDef File = "_CLinks.HxK"/>
15 <KeywordIndexDef File = "_FLinks.HxK"/>
16 <KeywordIndexDef File = "_KLinks.HxK"/>
17 <KeywordIndexDef File = "_SLinks.HxK"/>
18 <KeywordIndexDef File = "_vsipcc_NamedUrls.HxK"/>
19 <KeywordIndexDef File= "_VsipCC_Samples.HxK" />
20
21 <ItemMoniker Name = "!DefaultNamedUrlIndex" ProgId = "HxDs.HxIndex" InitData = "VsccNamedUrls"/>
22 <ItemMoniker Name = "!SampleInfo" ProgId = "HxDs.HxSampleCollection" InitData = "Samples"/>
23 <ItemMoniker Name = "!DefaultTOC" ProgId = "HxDs.HxHierarchy" InitData = "TOC"/>
24 <ItemMoniker Name = "!DefaultFullTextSearch" ProgId = "HxDs.HxFullTextSearch" InitData = ""/>
25 <ItemMoniker Name = "!DefaultAssociativeIndex" ProgId = "HxDs.HxIndex" InitData = "A"/>
26 <ItemMoniker Name = "!DefaultDynamicLinkIndex" ProgId = "HxDs.HxIndex" InitData = "B"/>
27 <ItemMoniker Name = "!DefaultCodeIndex" ProgId = "HxDs.HxIndex" InitData = "C"/>
28 <ItemMoniker Name = "!DefaultContextWindowIndex" ProgId = "HxDs.HxIndex" InitData = "F"/>
29 <ItemMoniker Name = "!DefaultKeywordIndex" ProgId = "HxDs.HxIndex" InitData = "K"/>
30 <ItemMoniker Name = "!DefaultSearchWindowIndex" ProgId = "HxDs.HxIndex" InitData = "S"/>
31 <ItemMoniker Name = "!DefaultSampleIndex" ProgId="HxDs.HxIndex" InitData="Samples" />
32</HelpCollection>
33
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxt b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxt
new file mode 100644
index 00000000..3ac4d5d6
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc90.hxt
@@ -0,0 +1,15 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpTOC>
3<HelpTOC
4 DTDVersion = "1.0"
5 Id = "vsipcc_TOC"
6 FileVersion = "9.0.20220.0"
7 LangId = "1033"
8 ParentNodeIcon = "Book"
9 PluginStyle = "Flat"
10 >
11 <HelpTOCNode Id = "InsertTOC:VSIP" NodeType = "TOC"/>
12 <HelpTOCNode Id = "InsertTOC:Partner" NodeType = "TOC"/>
13</HelpTOC>
14
15
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk
new file mode 100644
index 00000000..aaa79158
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk
@@ -0,0 +1,13 @@
1<?xml version="1.0"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "VsipccNamedUrls"
6 Id = "VsipccNamedUrls"
7 Merge = "Yes"
8 Sort = "Yes"
9 Title = "VSIPCC NamedUrl Index"
10 Visible = "No"
11 LangId = "1033"
12 >
13</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_samples.HxK b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_samples.HxK
new file mode 100644
index 00000000..00db745c
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/_vsipcc_samples.HxK
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE HelpIndex>
3<HelpIndex
4 DTDVersion = "1.0"
5 Name = "Samples"
6 Id = "VsipCCSamples"
7 AutoInclude = "Yes"
8 Merge = "Yes"
9 Sort = "Yes"
10 Title = "Samples"
11 Visible = "No"
12 LangId = "1033"
13 >
14</HelpIndex> \ No newline at end of file
diff --git a/src/ext/VisualStudio/wixlib/vs2008/redist/vsipcc_reg.hxs b/src/ext/VisualStudio/wixlib/vs2008/redist/vsipcc_reg.hxs
new file mode 100644
index 00000000..f6446867
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/vs2008/redist/vsipcc_reg.hxs
Binary files differ
diff --git a/src/ext/global.json b/src/ext/global.json
new file mode 100644
index 00000000..23dd3fa6
--- /dev/null
+++ b/src/ext/global.json
@@ -0,0 +1,5 @@
1{
2 "msbuild-sdks": {
3 "WixToolset.Sdk": "4.0.0-build-0211"
4 }
5}