aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2017-10-02 23:49:38 -0700
committerRob Mensching <rob@firegiant.com>2017-10-02 23:55:03 -0700
commitf729d16ab0dfd841a16addaefba61a182d0b0d32 (patch)
tree32920c1b284ec30580934b473c147978c44722c8
parentf91321309dd2c70d11343fe9272a0c7caf85e668 (diff)
downloadwix-f729d16ab0dfd841a16addaefba61a182d0b0d32.tar.gz
wix-f729d16ab0dfd841a16addaefba61a182d0b0d32.tar.bz2
wix-f729d16ab0dfd841a16addaefba61a182d0b0d32.zip
Initial code commit
-rw-r--r--VisualStudio.wixext.sln59
-rw-r--r--appveyor.cmd11
-rw-r--r--nuget.config8
-rw-r--r--src/Cpp.Build.props101
-rw-r--r--src/Directory.Build.props22
-rw-r--r--src/FindLocalWix.props8
-rw-r--r--src/ca/dllmain.cpp26
-rw-r--r--src/ca/packages.config6
-rw-r--r--src/ca/precomp.h13
-rw-r--r--src/ca/vsca.cpp432
-rw-r--r--src/ca/vsca.def7
-rw-r--r--src/ca/vsca.vcxproj69
-rw-r--r--src/wixext/Data/messages.xml133
-rw-r--r--src/wixext/Data/tables.xml66
-rw-r--r--src/wixext/VSCompiler.cs835
-rw-r--r--src/wixext/VSDecompiler.cs296
-rw-r--r--src/wixext/VSExtensionData.cs55
-rw-r--r--src/wixext/WixToolset.VisualStudio.wixext.csproj69
-rw-r--r--src/wixext/WixToolset.VisualStudio.wixext.targets10
-rw-r--r--src/wixext/xsd/vs.xsd292
-rw-r--r--src/wixlib/HTML_Help_Registration__RTL_X86.wxs68
-rw-r--r--src/wixlib/Redist/BIN_File_107602.dllbin0 -> 866816 bytes
-rw-r--r--src/wixlib/Redist/BIN_File_46001.dllbin0 -> 129536 bytes
-rw-r--r--src/wixlib/Redist/BIN_File_46002.dllbin0 -> 108544 bytes
-rw-r--r--src/wixlib/VS11.wxs206
-rw-r--r--src/wixlib/VS14.wxs187
-rw-r--r--src/wixlib/VS2003.wxs28
-rw-r--r--src/wixlib/VS2005.wxs370
-rw-r--r--src/wixlib/VS2008.wxs300
-rw-r--r--src/wixlib/VS2010.wxs313
-rw-r--r--src/wixlib/VS2012.wxs256
-rw-r--r--src/wixlib/VS2013.wxs253
-rw-r--r--src/wixlib/VS2015.wxs187
-rw-r--r--src/wixlib/VS2017.wxs143
-rw-r--r--src/wixlib/VSExtension_Platform.wxi18
-rw-r--r--src/wixlib/VSExtension_x86.wxs8
-rw-r--r--src/wixlib/VsixPackage.wxs61
-rw-r--r--src/wixlib/caSuffix.wxi28
-rw-r--r--src/wixlib/packages.config5
-rw-r--r--src/wixlib/vs.wixproj65
-rw-r--r--src/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs64
-rw-r--r--src/wixlib/vs2005/redist/BIN_File_60377.dllbin0 -> 45056 bytes
-rw-r--r--src/wixlib/vs2005/redist/vsipCCSamples.HxK14
-rw-r--r--src/wixlib/vs2005/redist/vsipcc.hxc33
-rw-r--r--src/wixlib/vs2005/redist/vsipcc.hxt15
-rw-r--r--src/wixlib/vs2005/redist/vsipccALinks.hxk13
-rw-r--r--src/wixlib/vs2005/redist/vsipccBLinks.hxk13
-rw-r--r--src/wixlib/vs2005/redist/vsipccFLinks.hxk14
-rw-r--r--src/wixlib/vs2005/redist/vsipccKLinks.hxk13
-rw-r--r--src/wixlib/vs2005/redist/vsipccNamedURLs.hxk13
-rw-r--r--src/wixlib/vs2005/redist/vsipccSlinks.hxk14
-rw-r--r--src/wixlib/vs2005/redist/vsipcc_reg.hxsbin0 -> 18400 bytes
-rw-r--r--src/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs61
-rw-r--r--src/wixlib/vs2008/redist/BIN_435439_x86_enu.dllbin0 -> 103944 bytes
-rw-r--r--src/wixlib/vs2008/redist/_ALinks.hxk10
-rw-r--r--src/wixlib/vs2008/redist/_BLinks.hxk10
-rw-r--r--src/wixlib/vs2008/redist/_CLinks.hxk13
-rw-r--r--src/wixlib/vs2008/redist/_FLinks.hxk10
-rw-r--r--src/wixlib/vs2008/redist/_KLinks.hxk10
-rw-r--r--src/wixlib/vs2008/redist/_SLinks.hxk13
-rw-r--r--src/wixlib/vs2008/redist/_vsipcc90.hxc33
-rw-r--r--src/wixlib/vs2008/redist/_vsipcc90.hxt15
-rw-r--r--src/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk13
-rw-r--r--src/wixlib/vs2008/redist/_vsipcc_samples.HxK14
-rw-r--r--src/wixlib/vs2008/redist/vsipcc_reg.hxsbin0 -> 18488 bytes
65 files changed, 5421 insertions, 1 deletions
diff --git a/VisualStudio.wixext.sln b/VisualStudio.wixext.sln
new file mode 100644
index 00000000..ca8aac82
--- /dev/null
+++ b/VisualStudio.wixext.sln
@@ -0,0 +1,59 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15
4VisualStudioVersion = 15.0.26730.16
5MinimumVisualStudioVersion = 15.0.26124.0
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ca", "src\ca\vsca.vcxproj", "{45308B85-0628-4978-8FC8-6AD9E1AD5949}"
7EndProject
8Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.VisualStudio.wixext", "src\wixext\WixToolset.VisualStudio.wixext.csproj", "{61BFD377-9DE1-48B4-8687-560DF68D6F3B}"
9EndProject
10Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "wixlib", "src\wixlib\vs.wixproj", "{14345C9D-8AF8-435A-BB1B-E067CE7EB321}"
11EndProject
12Global
13 GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 Debug|Any CPU = Debug|Any CPU
15 Debug|x64 = Debug|x64
16 Debug|x86 = Debug|x86
17 Release|Any CPU = Release|Any CPU
18 Release|x64 = Release|x64
19 Release|x86 = Release|x86
20 EndGlobalSection
21 GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|Any CPU.ActiveCfg = Debug|Win32
23 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x64.ActiveCfg = Debug|Win32
24 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x86.ActiveCfg = Debug|Win32
25 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Debug|x86.Build.0 = Debug|Win32
26 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|Any CPU.ActiveCfg = Release|Win32
27 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x64.ActiveCfg = Release|Win32
28 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x86.ActiveCfg = Release|Win32
29 {45308B85-0628-4978-8FC8-6AD9E1AD5949}.Release|x86.Build.0 = Release|Win32
30 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
32 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x64.ActiveCfg = Debug|Any CPU
33 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x64.Build.0 = Debug|Any CPU
34 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x86.ActiveCfg = Debug|Any CPU
35 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Debug|x86.Build.0 = Debug|Any CPU
36 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
37 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|Any CPU.Build.0 = Release|Any CPU
38 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x64.ActiveCfg = Release|Any CPU
39 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x64.Build.0 = Release|Any CPU
40 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x86.ActiveCfg = Release|Any CPU
41 {61BFD377-9DE1-48B4-8687-560DF68D6F3B}.Release|x86.Build.0 = Release|Any CPU
42 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|Any CPU.ActiveCfg = Debug|x86
43 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x64.ActiveCfg = Debug|x64
44 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x64.Build.0 = Debug|x64
45 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x86.ActiveCfg = Debug|x86
46 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Debug|x86.Build.0 = Debug|x86
47 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|Any CPU.ActiveCfg = Release|x86
48 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x64.ActiveCfg = Release|x64
49 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x64.Build.0 = Release|x64
50 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x86.ActiveCfg = Release|x86
51 {14345C9D-8AF8-435A-BB1B-E067CE7EB321}.Release|x86.Build.0 = Release|x86
52 EndGlobalSection
53 GlobalSection(SolutionProperties) = preSolution
54 HideSolutionNode = FALSE
55 EndGlobalSection
56 GlobalSection(ExtensibilityGlobals) = postSolution
57 SolutionGuid = {E4566A6B-47D0-4EA0-989A-D763AC39105D}
58 EndGlobalSection
59EndGlobal
diff --git a/appveyor.cmd b/appveyor.cmd
new file mode 100644
index 00000000..a4f49085
--- /dev/null
+++ b/appveyor.cmd
@@ -0,0 +1,11 @@
1@setlocal
2@pushd %~dp0
3
4nuget restore
5
6msbuild -p:Configuration=Release -t:Restore
7
8msbuild -p:Configuration=Release -t:Pack .\src\wixext\WixToolset.VisualStudio.wixext.csproj
9
10@popd
11@endlocal \ No newline at end of file
diff --git a/nuget.config b/nuget.config
index 7ba3a8df..bb8de141 100644
--- a/nuget.config
+++ b/nuget.config
@@ -2,8 +2,14 @@
2<configuration> 2<configuration>
3 <packageSources> 3 <packageSources>
4 <clear /> 4 <clear />
5 <add key="wixtoolset-dutil" value="https://ci.appveyor.com/nuget/wixtoolset-dutil" /> 5 <add key="wixtoolset-data" value="https://ci.appveyor.com/nuget/wixtoolset-data" />
6 <add key="wixtoolset-extensibility" value="https://ci.appveyor.com/nuget/wixtoolset-extensibility" />
6 <add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" /> 7 <add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" />
8 <add key="wixtoolset-core-native" value="https://ci.appveyor.com/nuget/wixtoolset-core-native" />
9 <add key="wixtoolset-dtf" value="https://ci.appveyor.com/nuget/wixtoolset-dtf" />
10 <add key="wixtoolset-dutil" value="https://ci.appveyor.com/nuget/wixtoolset-dutil" />
11 <add key="wixtoolset-wcautil" value="https://ci.appveyor.com/nuget/wixtoolset-wcautil" />
12 <add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
7 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> 13 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
8 </packageSources> 14 </packageSources>
9</configuration> \ No newline at end of file 15</configuration> \ No newline at end of file
diff --git a/src/Cpp.Build.props b/src/Cpp.Build.props
new file mode 100644
index 00000000..453aa442
--- /dev/null
+++ b/src/Cpp.Build.props
@@ -0,0 +1,101 @@
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)' == 'AnyCPU' ">Win32</Platform>
7 <BaseOutputPath>$(OutputPath)</BaseOutputPath>
8 <IntDir>$(BaseIntermediateOutputPath)$(Platform)\</IntDir>
9 <OutDir>$(OutputPath)$(Platform)\</OutDir>
10 </PropertyGroup>
11
12 <ItemDefinitionGroup>
13 <ClCompile>
14 <DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
15 <WarningLevel>Level4</WarningLevel>
16 <AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
17 <PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
18 <PrecompiledHeader>Use</PrecompiledHeader>
19 <PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
20 <CallingConvention>StdCall</CallingConvention>
21 <TreatWarningAsError>true</TreatWarningAsError>
22 <ExceptionHandling>false</ExceptionHandling>
23 <AdditionalOptions>-YlprecompDefine</AdditionalOptions>
24 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
25 <MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) &gt; 4 ">true</MultiProcessorCompilation>
26 </ClCompile>
27 <ResourceCompile>
28 <PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
29 <AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
30 </ResourceCompile>
31 <Lib>
32 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
33 </Lib>
34 <Link>
35 <SubSystem>$(ProjectSubSystem)</SubSystem>
36 <ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
37 <NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
38 <GenerateDebugInformation>true</GenerateDebugInformation>
39 <AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
40 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
41 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
42 </Link>
43 </ItemDefinitionGroup>
44
45 <ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
46 <ClCompile>
47 <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
48 </ClCompile>
49 </ItemDefinitionGroup>
50 <ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
51 <ClCompile>
52 <CallingConvention>CDecl</CallingConvention>
53 </ClCompile>
54 </ItemDefinitionGroup>
55 <ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
56 <ClCompile>
57 <DebugInformationFormat>OldStyle</DebugInformationFormat>
58 <OmitDefaultLibName>true</OmitDefaultLibName>
59 <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
60 </ClCompile>
61 </ItemDefinitionGroup>
62 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
63 <ClCompile>
64 <Optimization>Disabled</Optimization>
65 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
66 <PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
67 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
68 </ClCompile>
69 </ItemDefinitionGroup>
70 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' and '$(CLRSupport)'=='true' ">
71 <ClCompile>
72 <BasicRuntimeChecks></BasicRuntimeChecks>
73 <RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
74 </ClCompile>
75 </ItemDefinitionGroup>
76 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
77 <ClCompile>
78 <Optimization>MinSpace</Optimization>
79 <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
80 <FunctionLevelLinking>true</FunctionLevelLinking>
81 <IntrinsicFunctions>true</IntrinsicFunctions>
82 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
83 </ClCompile>
84 <Link>
85 <EnableCOMDATFolding>true</EnableCOMDATFolding>
86 <OptimizeReferences>true</OptimizeReferences>
87 </Link>
88 </ItemDefinitionGroup>
89 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' and '$(CLRSupport)'=='true' ">
90 <ClCompile>
91 <BasicRuntimeChecks></BasicRuntimeChecks>
92 <RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
93 </ClCompile>
94 </ItemDefinitionGroup>
95 <ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
96 <Link>
97 <KeyFile>$(LinkKeyFile)</KeyFile>
98 <DelaySign>$(LinkDelaySign)</DelaySign>
99 </Link>
100 </ItemDefinitionGroup>
101</Project>
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 00000000..63ad5d6e
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,22 @@
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 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
7 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
8 <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)..\build\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
9 <OutputPath>$(MSBuildThisFileDirectory)..\build\$(Configuration)\</OutputPath>
10
11 <Authors>WiX Toolset Team</Authors>
12 <Company>WiX Toolset</Company>
13 <Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright>
14 </PropertyGroup>
15
16 <PropertyGroup>
17 <WixToolsetRootFolder>$(MSBuildThisFileDirectory)..\..\</WixToolsetRootFolder>
18 </PropertyGroup>
19
20 <Import Project="Cpp.Build.props" Condition=" '$(MSBuildProjectExtension)'=='.vcxproj' " />
21 <Import Project="Custom.Build.props" Condition=" Exists('Custom.Build.props') " />
22</Project>
diff --git a/src/FindLocalWix.props b/src/FindLocalWix.props
new file mode 100644
index 00000000..e77fb386
--- /dev/null
+++ b/src/FindLocalWix.props
@@ -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">
5 <PropertyGroup>
6 <WixTargetsPath Condition=" '$(Configuration)' != 'Release' And Exists('$(MSBuildThisFileDirectory)..\..\Core\build\Release\publish\wix.targets') ">$(MSBuildThisFileDirectory)..\..\Core\build\Release\publish\wix.targets</WixTargetsPath>
7 </PropertyGroup>
8</Project>
diff --git a/src/ca/dllmain.cpp b/src/ca/dllmain.cpp
new file mode 100644
index 00000000..35ae6d1c
--- /dev/null
+++ b/src/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/ca/packages.config b/src/ca/packages.config
new file mode 100644
index 00000000..b74ff5d0
--- /dev/null
+++ b/src/ca/packages.config
@@ -0,0 +1,6 @@
1<?xml version="1.0" encoding="utf-8"?>
2<packages>
3 <package id="Microsoft.VisualStudio.Setup.Configuration.Native" version="1.14.114" targetFramework="native" developmentDependency="true" />
4 <package id="WixToolset.DUtil" version="4.0.6" targetFramework="native" />
5 <package id="WixToolset.WcaUtil" version="4.0.2" targetFramework="native" />
6</packages> \ No newline at end of file
diff --git a/src/ca/precomp.h b/src/ca/precomp.h
new file mode 100644
index 00000000..3edad7ed
--- /dev/null
+++ b/src/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/ca/vsca.cpp b/src/ca/vsca.cpp
new file mode 100644
index 00000000..30174672
--- /dev/null
+++ b/src/ca/vsca.cpp
@@ -0,0 +1,432 @@
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 SetPropertyForComponent(
51 __in DWORD cComponents,
52 __in VS_COMPONENT_PROPERTY* rgComponents,
53 __in LPCWSTR wzComponent
54 );
55
56static VS_INSTANCE vrgInstances[] =
57{
58 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 },
59};
60
61/******************************************************************
62 FindInstances - entry point for VS custom action to find instances
63
64*******************************************************************/
65extern "C" UINT __stdcall FindInstances(
66 __in MSIHANDLE hInstall
67 )
68{
69 HRESULT hr = S_OK;
70 UINT er = ERROR_SUCCESS;
71 BOOL fComInitialized = FALSE;
72 ISetupConfiguration* pConfiguration = NULL;
73 ISetupHelper* pHelper = NULL;
74 IEnumSetupInstances* pEnumInstances = NULL;
75 ISetupInstance* rgpInstances[1] = {};
76 ISetupInstance* pInstance = NULL;
77 ULONG cInstancesFetched = 0;
78 BSTR bstrVersion = NULL;
79 DWORD64 qwVersion = 0;
80
81 hr = WcaInitialize(hInstall, "VSFindInstances");
82 ExitOnFailure(hr, "Failed to initialize custom action.");
83
84 hr = ::CoInitialize(NULL);
85 ExitOnFailure(hr, "Failed to initialize COM.");
86
87 fComInitialized = TRUE;
88
89 hr = ::CoCreateInstance(__uuidof(SetupConfiguration), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pConfiguration));
90 if (REGDB_E_CLASSNOTREG != hr)
91 {
92 ExitOnFailure(hr, "Failed to initialize setup configuration class.");
93 }
94 else
95 {
96 WcaLog(LOGMSG_VERBOSE, "Setup configuration not registered; assuming no instances installed.");
97
98 hr = S_OK;
99 ExitFunction();
100 }
101
102 hr = pConfiguration->QueryInterface(IID_PPV_ARGS(&pHelper));
103 if (FAILED(hr))
104 {
105 WcaLog(LOGMSG_VERBOSE, "Setup configuration helpers not implemented; assuming Visual Studio 2017.");
106
107 qwVersion = FILEMAKEVERSION(15, 0, 0, 0);
108 hr = S_OK;
109 }
110
111 hr = pConfiguration->EnumInstances(&pEnumInstances);
112 ExitOnFailure(hr, "Failed to get instance enumerator.");
113
114 do
115 {
116 hr = pEnumInstances->Next(1, rgpInstances, &cInstancesFetched);
117 if (SUCCEEDED(hr) && cInstancesFetched)
118 {
119 pInstance = rgpInstances[0];
120 if (pInstance)
121 {
122 if (pHelper)
123 {
124 hr = pInstance->GetInstallationVersion(&bstrVersion);
125 ExitOnFailure(hr, "Failed to get installation version.");
126
127 hr = pHelper->ParseVersion(bstrVersion, &qwVersion);
128 ExitOnFailure(hr, "Failed to parse installation version.");
129 }
130
131 for (DWORD i = 0; i < countof(vrgInstances); ++i)
132 {
133 const VS_INSTANCE* pElem = &vrgInstances[i];
134
135 if (pElem->qwMinVersion <= qwVersion && qwVersion <= pElem->qwMaxVersion)
136 {
137 hr = pElem->pfnProcessInstance(pInstance, qwVersion, FALSE);
138 ExitOnFailure(hr, "Failed to process instance.");
139 }
140 }
141 }
142
143 ReleaseNullBSTR(bstrVersion);
144 ReleaseNullObject(pInstance);
145 }
146 } while (SUCCEEDED(hr) && cInstancesFetched);
147
148 // Complete all registered processing functions.
149 for (DWORD i = 0; i < countof(vrgInstances); ++i)
150 {
151 const VS_INSTANCE* pElem = &vrgInstances[i];
152
153 if (pElem->qwMinVersion <= qwVersion && qwVersion <= pElem->qwMaxVersion)
154 {
155 hr = pElem->pfnProcessInstance(NULL, 0, TRUE);
156 ExitOnFailure(hr, "Failed to process latest instance.");
157 }
158 }
159
160LExit:
161 ReleaseBSTR(bstrVersion);
162 ReleaseObject(pInstance);
163 ReleaseObject(pEnumInstances);
164 ReleaseObject(pHelper);
165 ReleaseObject(pConfiguration);
166
167 if (fComInitialized)
168 {
169 ::CoUninitialize();
170 }
171
172 if (FAILED(hr))
173 {
174 er = ERROR_INSTALL_FAILURE;
175 }
176
177 return WcaFinalize(er);
178}
179
180static HRESULT InstanceInProducts(
181 __in ISetupInstance* pInstance,
182 __in DWORD cProducts,
183 __in LPCWSTR* rgwzProducts
184 )
185{
186 HRESULT hr = S_OK;
187 ISetupInstance2* pInstance2 = NULL;
188 ISetupPackageReference* pProduct = NULL;
189 BSTR bstrId = NULL;
190
191 hr = pInstance->QueryInterface(IID_PPV_ARGS(&pInstance2));
192 if (FAILED(hr))
193 {
194 // Older implementations shipped when only VS SKUs were supported.
195 WcaLog(LOGMSG_VERBOSE, "Could not query instance for product information; assuming supported product.");
196
197 hr = S_OK;
198 ExitFunction();
199 }
200
201 hr = pInstance2->GetProduct(&pProduct);
202 ExitOnFailure(hr, "Failed to get product package reference.");
203
204 hr = pProduct->GetId(&bstrId);
205 ExitOnFailure(hr, "Failed to get product package ID.");
206
207 for (DWORD i = 0; i < cProducts; ++i)
208 {
209 const LPCWSTR wzProduct = rgwzProducts[i];
210
211 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, bstrId, -1, wzProduct, -1))
212 {
213 hr = S_OK;
214 ExitFunction();
215 }
216 }
217
218 hr = S_FALSE;
219
220LExit:
221 ReleaseBSTR(bstrId);
222 ReleaseObject(pProduct);
223 ReleaseObject(pInstance2);
224
225 return hr;
226}
227
228static HRESULT InstanceIsGreater(
229 __in_opt ISetupInstance* pPreviousInstance,
230 __in DWORD64 qwPreviousVersion,
231 __in ISetupInstance* pCurrentInstance,
232 __in DWORD64 qwCurrentVersion
233 )
234{
235 HRESULT hr = S_OK;
236 FILETIME ftPreviousInstance = {};
237 FILETIME ftCurrentInstance = {};
238
239 if (qwPreviousVersion != qwCurrentVersion)
240 {
241 return qwPreviousVersion < qwCurrentVersion ? S_OK : S_FALSE;
242 }
243
244 hr = pPreviousInstance->GetInstallDate(&ftPreviousInstance);
245 ExitOnFailure(hr, "Failed to get previous install date.");
246
247 hr = pCurrentInstance->GetInstallDate(&ftCurrentInstance);
248 ExitOnFailure(hr, "Failed to get current install date.");
249
250 return 0 > ::CompareFileTime(&ftPreviousInstance, &ftCurrentInstance) ? S_OK : S_FALSE;
251
252LExit:
253 return hr;
254}
255
256static HRESULT ProcessInstance(
257 __in ISetupInstance* pInstance,
258 __in LPCWSTR wzProperty,
259 __in DWORD cComponents,
260 __in VS_COMPONENT_PROPERTY* rgComponents
261 )
262{
263 HRESULT hr = S_OK;
264 ISetupInstance2* pInstance2 = NULL;
265 BSTR bstrPath = NULL;
266 LPSAFEARRAY psaPackages = NULL;
267 LONG lPackageIndex = 0;
268 LONG clMaxPackages = 0;
269 ISetupPackageReference** rgpPackages = NULL;
270 ISetupPackageReference* pPackage = NULL;
271 BSTR bstrPackageId = NULL;
272
273 hr = pInstance->GetInstallationPath(&bstrPath);
274 ExitOnFailure(hr, "Failed to get installation path.");
275
276 hr = WcaSetProperty(wzProperty, bstrPath);
277 ExitOnFailure(hr, "Failed to set installation path property: %ls", wzProperty);
278
279 hr = pInstance->QueryInterface(IID_PPV_ARGS(&pInstance2));
280 if (FAILED(hr))
281 {
282 // Older implementation did not expose installed components.
283 hr = S_OK;
284 ExitFunction();
285 }
286
287 hr = pInstance2->GetPackages(&psaPackages);
288 ExitOnFailure(hr, "Failed to get packages from instance.");
289
290 hr = ::SafeArrayGetLBound(psaPackages, 1, &lPackageIndex);
291 ExitOnFailure(hr, "Failed to get lower bound of packages array.");
292
293 hr = ::SafeArrayGetUBound(psaPackages, 1, &clMaxPackages);
294 ExitOnFailure(hr, "Failed to get upper bound of packages array.");
295
296 // Faster access to single dimension SAFEARRAY elements.
297 hr = ::SafeArrayAccessData(psaPackages, reinterpret_cast<LPVOID*>(&rgpPackages));
298 ExitOnFailure(hr, "Failed to access packages array.")
299
300 for (; lPackageIndex <= clMaxPackages; ++lPackageIndex)
301 {
302 pPackage = rgpPackages[lPackageIndex];
303
304 if (pPackage)
305 {
306 hr = pPackage->GetId(&bstrPackageId);
307 ExitOnFailure(hr, "Failed to get package ID.");
308
309 hr = SetPropertyForComponent(cComponents, rgComponents, bstrPackageId);
310 ExitOnFailure(hr, "Failed to set property for component: %ls", bstrPackageId);
311
312 ReleaseNullBSTR(bstrPackageId);
313 }
314 }
315
316LExit:
317 ReleaseBSTR(bstrPackageId);
318
319 if (rgpPackages)
320 {
321 ::SafeArrayUnaccessData(psaPackages);
322 }
323
324 if (psaPackages)
325 {
326 // This will Release() all objects in the array.
327 ::SafeArrayDestroy(psaPackages);
328 }
329
330 ReleaseObject(pInstance2);
331 ReleaseBSTR(bstrPath);
332
333 return hr;
334}
335
336static HRESULT ProcessVS2017(
337 __in_opt ISetupInstance* pInstance,
338 __in DWORD64 qwVersion,
339 __in BOOL fComplete
340 )
341{
342 static ISetupInstance* pLatest = NULL;
343 static DWORD64 qwLatest = 0;
344
345 static LPCWSTR rgwzProducts[] =
346 {
347 L"Microsoft.VisualStudio.Product.Community",
348 L"Microsoft.VisualStudio.Product.Professional",
349 L"Microsoft.VisualStudio.Product.Enterprise",
350 };
351
352 // TODO: Consider making table-driven with these defaults per-version for easy customization.
353 static VS_COMPONENT_PROPERTY rgComponents[] =
354 {
355 { L"Microsoft.VisualStudio.Component.FSharp", L"VS2017_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" },
356 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2017_IDE_VB_PROJECTSYSTEM_INSTALLED" },
357 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2017_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" },
358 { L"Microsoft.VisualStudio.Component.TestTools.Core", L"VS2017_IDE_VSTS_TESTSYSTEM_INSTALLED" },
359 { L"Microsoft.VisualStudio.Component.VC.CoreIde", L"VS2017_IDE_VC_PROJECTSYSTEM_INSTALLED" },
360 { L"Microsoft.VisualStudio.Component.Web", L"VS2017_IDE_VWD_PROJECTSYSTEM_INSTALLED" },
361 { L"Microsoft.VisualStudio.PackageGroup.DslRuntime", L"VS2017_IDE_MODELING_PROJECTSYSTEM_INSTALLED" },
362 };
363
364 HRESULT hr = S_OK;
365
366 if (fComplete)
367 {
368 if (pLatest)
369 {
370 hr = ProcessInstance(pLatest, L"VS2017_ROOT_FOLDER", countof(rgComponents), rgComponents);
371 ExitOnFailure(hr, "Failed to process VS2017 instance.");
372 }
373 }
374 else if (pInstance)
375 {
376 hr = InstanceInProducts(pInstance, countof(rgwzProducts), rgwzProducts);
377 ExitOnFailure(hr, "Failed to compare product IDs.");
378
379 if (S_FALSE == hr)
380 {
381 ExitFunction();
382 }
383
384 hr = InstanceIsGreater(pLatest, qwLatest, pInstance, qwVersion);
385 ExitOnFailure(hr, "Failed to compare instances.");
386
387 if (S_FALSE == hr)
388 {
389 ExitFunction();
390 }
391
392 ReleaseNullObject(pLatest);
393
394 pLatest = pInstance;
395 qwLatest = qwVersion;
396
397 // Caller will do a final Release() otherwise.
398 pLatest->AddRef();
399 }
400
401LExit:
402 if (fComplete)
403 {
404 ReleaseObject(pLatest);
405 }
406
407 return hr;
408}
409
410static HRESULT SetPropertyForComponent(
411 __in DWORD cComponents,
412 __in VS_COMPONENT_PROPERTY* rgComponents,
413 __in LPCWSTR wzComponent
414 )
415{
416 HRESULT hr = S_OK;
417
418 // For small arrays, faster looping through than hashing. There may also be duplicates like with VS2017.
419 for (DWORD i = 0; i < cComponents; ++i)
420 {
421 const VS_COMPONENT_PROPERTY* pComponent = &rgComponents[i];
422
423 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, pComponent->pwzComponent, -1, wzComponent, -1))
424 {
425 hr = WcaSetIntProperty(pComponent->pwzProperty, 1);
426 ExitOnFailure(hr, "Failed to set property: %ls", pComponent->pwzProperty);
427 }
428 }
429
430LExit:
431 return hr;
432}
diff --git a/src/ca/vsca.def b/src/ca/vsca.def
new file mode 100644
index 00000000..fd2db98e
--- /dev/null
+++ b/src/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/ca/vsca.vcxproj b/src/ca/vsca.vcxproj
new file mode 100644
index 00000000..c52840bf
--- /dev/null
+++ b/src/ca/vsca.vcxproj
@@ -0,0 +1,69 @@
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 <Import Project="..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props')" />
6 <Import Project="..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props')" />
7
8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|Win32">
10 <Configuration>Debug</Configuration>
11 <Platform>Win32</Platform>
12 </ProjectConfiguration>
13 <ProjectConfiguration Include="Release|Win32">
14 <Configuration>Release</Configuration>
15 <Platform>Win32</Platform>
16 </ProjectConfiguration>
17 </ItemGroup>
18
19 <PropertyGroup Label="Globals">
20 <ProjectGuid>{45308B85-0628-4978-8FC8-6AD9E1AD5949}</ProjectGuid>
21 <ConfigurationType>DynamicLibrary</ConfigurationType>
22 <TargetName>vsca</TargetName>
23 <PlatformToolset>v141</PlatformToolset>
24 <CharacterSet>Unicode</CharacterSet>
25 <ProjectModuleDefinitionFile>vsca.def</ProjectModuleDefinitionFile>
26 <Description>WiX Toolset VS CustomAction</Description>
27 </PropertyGroup>
28
29 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
30 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31
32 <ImportGroup Label="ExtensionSettings">
33 </ImportGroup>
34
35 <ImportGroup Label="Shared">
36 <Import Project="..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets" Condition="Exists('..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" />
37 </ImportGroup>
38
39 <PropertyGroup>
40 <ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
41 </PropertyGroup>
42
43 <ItemGroup>
44 <ClCompile Include="dllmain.cpp">
45 <PrecompiledHeader>Create</PrecompiledHeader>
46 </ClCompile>
47 <ClCompile Include="vsca.cpp" />
48 </ItemGroup>
49
50 <ItemGroup>
51 <ClInclude Include="precomp.h" />
52 </ItemGroup>
53
54 <ItemGroup>
55 <None Include="packages.config" />
56 <None Include="vsca.def" />
57 </ItemGroup>
58
59 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
60
61 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
62 <PropertyGroup>
63 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
64 </PropertyGroup>
65 <Error Condition="!Exists('..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.1.14.114\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets'))" />
66 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.6\build\WixToolset.DUtil.props'))" />
67 <Error Condition="!Exists('..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.WcaUtil.4.0.2\build\WixToolset.WcaUtil.props'))" />
68 </Target>
69</Project>
diff --git a/src/wixext/Data/messages.xml b/src/wixext/Data/messages.xml
new file mode 100644
index 00000000..d1c85301
--- /dev/null
+++ b/src/wixext/Data/messages.xml
@@ -0,0 +1,133 @@
1<?xml version='1.0' encoding='utf-8'?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Messages Namespace="WixToolset.Extensions" Resources="Data.Messages" xmlns="http://schemas.microsoft.com/genmsgs/2004/07/messages">
6 <Class Name="VSErrors" ContainerName="VSErrorEventArgs" BaseContainerName="MessageEventArgs">
7 <Message Id="InvalidOutputGroup" Number="5301" SourceLineNumbers="no">
8 <Instance>
9 Invalid project output group: {0}.
10 <Parameter Type="System.String" Name="outputGroup" />
11 </Instance>
12 </Message>
13 <Message Id="NoOutputGroupSpecified" Number="5302" SourceLineNumbers="no">
14 <Instance>
15 No project output group specified.
16 </Instance>
17 </Message>
18 <Message Id="CannotLoadMSBuildAssembly" Number="5303" SourceLineNumbers="no">
19 <Instance>
20 Failed to load MSBuild assembly: {0}
21 <Parameter Type="System.String" Name="innerExceptionMessage" />
22 </Instance>
23 </Message>
24 <Message Id="CannotLoadMSBuildEngine" Number="5304" SourceLineNumbers="no">
25 <Instance>
26 Failed to load MSBuild engine: {0}
27 <Parameter Type="System.String" Name="innerExceptionMessage" />
28 </Instance>
29 </Message>
30 <Message Id="CannotLoadProject" Number="5305" SourceLineNumbers="no">
31 <Instance>
32 Failed to load project {0}: {1}
33 <Parameter Type="System.String" Name="projectFile" />
34 <Parameter Type="System.String" Name="innerExceptionMessage" />
35 </Instance>
36 </Message>
37 <Message Id="CannotBuildProject" Number="5306" SourceLineNumbers="no">
38 <Instance>
39 Failed to build project {0}: {1}
40 <Parameter Type="System.String" Name="projectFile" />
41 <Parameter Type="System.String" Name="innerExceptionMessage" />
42 </Instance>
43 </Message>
44 <Message Id="BuildFailed" Number="5307" SourceLineNumbers="no">
45 <Instance>
46 Build failed.
47 </Instance>
48 </Message>
49 <Message Id="MissingProjectOutputGroup" Number="5308" SourceLineNumbers="no">
50 <Instance>
51 Missing project output group '{1}' in project {0}.
52 <Parameter Type="System.String" Name="projectFile" />
53 <Parameter Type="System.String" Name="outputGroup" />
54 </Instance>
55 </Message>
56 <Message Id="DirectoryAttributeAccessorBadType" Number="5309" SourceLineNumbers="no">
57 <Instance>
58 DirectoryAttributeAccessor tried to access an invalid element type for attribute '{0'}.
59 <Parameter Type="System.String" Name="attributeName" />
60 </Instance>
61 </Message>
62 <Message Id="InvalidOutputType" Number="5310" SourceLineNumbers="no">
63 <Instance>
64 Invalid generated type: {0}. Must be one of: components, container, payloadgroup, layout.
65 <Parameter Type="System.String" Name="generateType" />
66 </Instance>
67 </Message>
68 <Message Id="InvalidDirectoryId" Number="5311" SourceLineNumbers="no">
69 <Instance>
70 Invalid directory ID: {0}. Check that it doesn't start with a hyphen or slash.
71 <Parameter Type="System.String" Name="generateType" />
72 </Instance>
73 </Message>
74 <Message Id="InvalidProjectName" Number="5312" SourceLineNumbers="no">
75 <Instance>
76 Invalid project name: {0}. Check that it doesn't start with a hyphen or slash.
77 <Parameter Type="System.String" Name="generateType" />
78 </Instance>
79 </Message>
80 <Message Id="BuildErrorDuringHarvesting" Number="5313" SourceLineNumbers="no">
81 <Instance>
82 Build error during harvesting: {0}
83 <Parameter Type="System.String" Name="buildError" />
84 </Instance>
85 </Message>
86 <Message Id="CannotLoadMSBuildWrapperAssembly" Number="5314" SourceLineNumbers="no">
87 <Instance>
88 Failed to load MSBuild wrapper assembly: {0}
89 <Parameter Type="System.String" Name="innerExceptionMessage" />
90 </Instance>
91 </Message>
92 <Message Id="CannotLoadMSBuildWrapperType" Number="5315" SourceLineNumbers="no">
93 <Instance>
94 Failed to load MSBuild wrapper type: {0}
95 <Parameter Type="System.String" Name="innerExceptionMessage" />
96 </Instance>
97 </Message>
98 <Message Id="CannotLoadMSBuildWrapperObject" Number="5316" SourceLineNumbers="no">
99 <Instance>
100 Failed to load MSBuild wrapper object: {0}
101 <Parameter Type="System.String" Name="innerExceptionMessage" />
102 </Instance>
103 </Message>
104 </Class>
105 <Class Name="VSWarnings" ContainerName="VSWarningEventArgs" BaseContainerName="MessageEventArgs">
106 <Message Id="NoLogger" Number="5399" SourceLineNumbers="no">
107 <Instance>
108 Failed to set loggers: {0}
109 <Parameter Type="System.String" Name="exceptionMessage" />
110 </Instance>
111 </Message>
112 <Message Id="NoProjectConfiguration" Number="5398" SourceLineNumbers="no">
113 <Instance>
114 Failed to set project configuration and platform: {0}
115 <Parameter Type="System.String" Name="exceptionMessage" />
116 </Instance>
117 </Message>
118 </Class>
119 <Class Name="VSVerboses" ContainerName="VSVerboseEventArgs" BaseContainerName="MessageEventArgs">
120 <Message Id="FoundToolsVersion" Number="5379" SourceLineNumbers="no">
121 <Instance>
122 Found ToolsVersion {0} inside project file.
123 <Parameter Type="System.String" Name="toolsVersion" />
124 </Instance>
125 </Message>
126 <Message Id="LoadingProject" Number="5378" SourceLineNumbers="no">
127 <Instance>
128 Loading project using MSBuild version {0}.
129 <Parameter Type="System.String" Name="msbuildVersion" />
130 </Instance>
131 </Message>
132 </Class>
133</Messages>
diff --git a/src/wixext/Data/tables.xml b/src/wixext/Data/tables.xml
new file mode 100644
index 00000000..e9c86097
--- /dev/null
+++ b/src/wixext/Data/tables.xml
@@ -0,0 +1,66 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
6 <tableDefinition name="HelpFile" createSymbols="yes">
7 <columnDefinition name="HelpFileKey" type="string" length="72" primaryKey="yes" modularize="column"
8 category="identifier" description="Primary Key for HelpFile Table (required)."/>
9 <columnDefinition name="HelpFileName" type="string" length="72"
10 category="text" description="Internal Microsoft Help ID for this HelpFile (required)."/>
11 <columnDefinition name="LangID" type="number" length="2" nullable="yes"
12 category="language" description="Language ID for content file (optional)."/>
13 <columnDefinition name="File_HxS" type="string" length="72" modularize="column"
14 keyTable="File" keyColumn="1" category="identifier" description="Key for HxS (Title) file (required)."/>
15 <columnDefinition name="File_HxI" type="string" length="72" nullable="yes" modularize="column"
16 keyTable="File" keyColumn="1" category="identifier" description="Key for HxI (Index) file (optional)."/>
17 <columnDefinition name="File_HxQ" type="string" length="72" nullable="yes" modularize="column"
18 keyTable="File" keyColumn="1" category="identifier" description="Key for HxQ (Query) file (optional)."/>
19 <columnDefinition name="File_HxR" type="string" length="72" nullable="yes" modularize="column"
20 keyTable="File" keyColumn="1" category="identifier" description="Key for HxR (Attributes) file (optional)."/>
21 <columnDefinition name="File_Samples" type="string" length="72" nullable="yes" modularize="column"
22 keyTable="File" keyColumn="1" category="identifier" description="Key for a file that is in the 'root' of the samples directory for this HelpFile (optional)."/>
23 </tableDefinition>
24 <tableDefinition name="HelpFileToNamespace">
25 <columnDefinition name="HelpFile_" type="string" length="72" primaryKey="yes" modularize="column"
26 keyTable="HelpFile" keyColumn="1" category="identifier" description="Foreign key into HelpFile table (required)."/>
27 <columnDefinition name="HelpNamespace_" type="string" length="72" primaryKey="yes"
28 keyTable="HelpNamespace" keyColumn="1" category="identifier" description="Foreign key into HelpNamespace table (required)."/>
29 </tableDefinition>
30 <tableDefinition name="HelpFilter" createSymbols="yes">
31 <columnDefinition name="FilterKey" type="string" length="72" primaryKey="yes" modularize="column"
32 category="identifier" description="Primary Key for HelpFilter (required)."/>
33 <columnDefinition name="Description" type="localized" length="0"
34 category="text" description="Friendly name for Filter (required)."/>
35 <columnDefinition name="QueryString" type="string" length="0" nullable="yes"
36 category="text" description="Query String for Help Filter (optional)."/>
37 </tableDefinition>
38 <tableDefinition name="HelpFilterToNamespace">
39 <columnDefinition name="HelpFilter_" type="string" length="72" primaryKey="yes" modularize="column"
40 keyTable="HelpFilter" keyColumn="1" category="identifier" description="Foreign key into HelpFilter table (required)."/>
41 <columnDefinition name="HelpNamespace_" type="string" length="72" primaryKey="yes"
42 keyTable="HelpNamespace" keyColumn="1" category="identifier" description="Foreign key into HelpNamespace table (required)."/>
43 </tableDefinition>
44 <tableDefinition name="HelpNamespace" createSymbols="yes">
45 <columnDefinition name="NamespaceKey" type="string" length="72" primaryKey="yes"
46 category="identifier" description="Primary Key for HelpNamespace (required)."/>
47 <columnDefinition name="NamespaceName" type="string" length="0"
48 category="text" description="Internal Microsoft Help ID for this Namespace (required)."/>
49 <columnDefinition name="File_Collection" type="string" length="72" modularize="column"
50 keyTable="File" keyColumn="1" category="text" description="Key for HxC (Collection) file (required)."/>
51 <columnDefinition name="Description" type="localized" length="0" nullable="yes"
52 category="text" description="Friendly name for Namespace (optional)."/>
53 </tableDefinition>
54 <tableDefinition name="HelpPlugin">
55 <columnDefinition name="HelpNamespace_" type="string" length="72" primaryKey="yes"
56 keyTable="HelpNamespace" keyColumn="1" category="identifier" description="Forein Key into HelpNamespace table for the child namespace that will be plugged into the parent namespace (required)."/>
57 <columnDefinition name="HelpNamespace_Parent" type="string" length="72" primaryKey="yes"
58 category="identifier" description="Forein Key into HelpNamespace table for the parent namespace into which the child will be inserted (required)."/>
59 <columnDefinition name="File_HxT" type="string" length="72" nullable="yes" modularize="column"
60 keyTable="File" keyColumn="1" category="identifier" description="Key for HxT file of child namespace (optional)."/>
61 <columnDefinition name="File_HxA" type="string" length="72" nullable="yes" modularize="column"
62 keyTable="File" keyColumn="1" category="identifier" description="Key for HxA (Attributes) file of child namespace (optional)."/>
63 <columnDefinition name="File_ParentHxT" type="string" length="72" nullable="yes" modularize="column"
64 keyTable="File" keyColumn="1" category="identifier" description="Key for HxT file of parent namespace that now includes the new child namespace (optional)."/>
65 </tableDefinition>
66</tableDefinitions>
diff --git a/src/wixext/VSCompiler.cs b/src/wixext/VSCompiler.cs
new file mode 100644
index 00000000..cf6226dd
--- /dev/null
+++ b/src/wixext/VSCompiler.cs
@@ -0,0 +1,835 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Extensions
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Xml.Linq;
8 using WixToolset.Data;
9 using WixToolset.Extensibility;
10
11 /// <summary>
12 /// The compiler for the WiX Toolset Visual Studio Extension.
13 /// </summary>
14 public sealed class VSCompiler : CompilerExtension
15 {
16 internal const int MsidbCustomActionTypeExe = 0x00000002; // Target = command line args
17 internal const int MsidbCustomActionTypeProperty = 0x00000030; // Source = full path to executable
18 internal const int MsidbCustomActionTypeContinue = 0x00000040; // ignore action return status; continue running
19 internal const int MsidbCustomActionTypeRollback = 0x00000100; // in conjunction with InScript: queue in Rollback script
20 internal const int MsidbCustomActionTypeInScript = 0x00000400; // queue for execution within script
21 internal const int MsidbCustomActionTypeNoImpersonate = 0x00000800; // queue for not impersonating
22
23 /// <summary>
24 /// Instantiate a new HelpCompiler.
25 /// </summary>
26 public VSCompiler()
27 {
28 this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/vs";
29 }
30
31 /// <summary>
32 /// Processes an element for the Compiler.
33 /// </summary>
34 /// <param name="sourceLineNumbers">Source line number for the parent element.</param>
35 /// <param name="parentElement">Parent element of element to process.</param>
36 /// <param name="element">Element to process.</param>
37 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
38 public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context)
39 {
40 switch (parentElement.Name.LocalName)
41 {
42 case "Component":
43 switch (element.Name.LocalName)
44 {
45 case "VsixPackage":
46 this.ParseVsixPackageElement(element, context["ComponentId"], null);
47 break;
48 default:
49 this.Core.UnexpectedElement(parentElement, element);
50 break;
51 }
52 break;
53 case "File":
54 switch (element.Name.LocalName)
55 {
56 case "HelpCollection":
57 this.ParseHelpCollectionElement(element, context["FileId"]);
58 break;
59 case "HelpFile":
60 this.ParseHelpFileElement(element, context["FileId"]);
61 break;
62 case "VsixPackage":
63 this.ParseVsixPackageElement(element, context["ComponentId"], context["FileId"]);
64 break;
65 default:
66 this.Core.UnexpectedElement(parentElement, element);
67 break;
68 }
69 break;
70 case "Fragment":
71 case "Module":
72 case "Product":
73 switch (element.Name.LocalName)
74 {
75 case "HelpCollectionRef":
76 this.ParseHelpCollectionRefElement(element);
77 break;
78 case "HelpFilter":
79 this.ParseHelpFilterElement(element);
80 break;
81 default:
82 this.Core.UnexpectedElement(parentElement, element);
83 break;
84 }
85 break;
86 default:
87 this.Core.UnexpectedElement(parentElement, element);
88 break;
89 }
90 }
91
92 /// <summary>
93 /// Parses a HelpCollectionRef element.
94 /// </summary>
95 /// <param name="node">Element to process.</param>
96 private void ParseHelpCollectionRefElement(XElement node)
97 {
98 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
99 string id = null;
100
101 foreach (XAttribute attrib in node.Attributes())
102 {
103 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
104 {
105 switch (attrib.Name.LocalName)
106 {
107 case "Id":
108 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
109 this.Core.CreateSimpleReference(sourceLineNumbers, "HelpNamespace", id);
110 break;
111 default:
112 this.Core.UnexpectedAttribute(node, attrib);
113 break;
114 }
115 }
116 else
117 {
118 this.Core.ParseExtensionAttribute(node, attrib);
119 }
120 }
121
122 if (null == id)
123 {
124 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
125 }
126
127 foreach (XElement child in node.Elements())
128 {
129 if (this.Namespace == child.Name.Namespace)
130 {
131 SourceLineNumber childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
132 switch (child.Name.LocalName)
133 {
134 case "HelpFileRef":
135 this.ParseHelpFileRefElement(child, id);
136 break;
137 default:
138 this.Core.UnexpectedElement(node, child);
139 break;
140 }
141 }
142 else
143 {
144 this.Core.ParseExtensionElement(node, child);
145 }
146 }
147 }
148
149 /// <summary>
150 /// Parses a HelpCollection element.
151 /// </summary>
152 /// <param name="node">Element to process.</param>
153 /// <param name="fileId">Identifier of the parent File element.</param>
154 private void ParseHelpCollectionElement(XElement node, string fileId)
155 {
156 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
157 string id = null;
158 string description = null;
159 string name = null;
160 YesNoType suppressCAs = YesNoType.No;
161
162 foreach (XAttribute attrib in node.Attributes())
163 {
164 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
165 {
166 switch (attrib.Name.LocalName)
167 {
168 case "Id":
169 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
170 break;
171 case "Description":
172 description = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
173 break;
174 case "Name":
175 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
176 break;
177 case "SuppressCustomActions":
178 suppressCAs = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
179 break;
180 default:
181 this.Core.UnexpectedAttribute(node, attrib);
182 break;
183 }
184 }
185 else
186 {
187 this.Core.ParseExtensionAttribute(node, attrib);
188 }
189 }
190
191 if (null == id)
192 {
193 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
194 }
195
196 if (null == description)
197 {
198 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Description"));
199 }
200
201 if (null == name)
202 {
203 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
204 }
205
206 foreach (XElement child in node.Elements())
207 {
208 if (this.Namespace == child.Name.Namespace)
209 {
210 switch (child.Name.LocalName)
211 {
212 case "HelpFileRef":
213 this.ParseHelpFileRefElement(child, id);
214 break;
215 case "HelpFilterRef":
216 this.ParseHelpFilterRefElement(child, id);
217 break;
218 case "PlugCollectionInto":
219 this.ParsePlugCollectionIntoElement(child, id);
220 break;
221 default:
222 this.Core.UnexpectedElement(node, child);
223 break;
224 }
225 }
226 else
227 {
228 this.Core.ParseExtensionElement(node, child);
229 }
230 }
231
232 if (!this.Core.EncounteredError)
233 {
234 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpNamespace");
235 row[0] = id;
236 row[1] = name;
237 row[2] = fileId;
238 row[3] = description;
239
240 if (YesNoType.No == suppressCAs)
241 {
242 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8");
243 }
244 }
245 }
246
247 /// <summary>
248 /// Parses a HelpFile element.
249 /// </summary>
250 /// <param name="node">Element to process.</param>
251 /// <param name="fileId">Identifier of the parent file element.</param>
252 private void ParseHelpFileElement(XElement node, string fileId)
253 {
254 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
255 string id = null;
256 string name = null;
257 int language = CompilerConstants.IntegerNotSet;
258 string hxi = null;
259 string hxq = null;
260 string hxr = null;
261 string samples = null;
262 YesNoType suppressCAs = YesNoType.No;
263
264 foreach (XAttribute attrib in node.Attributes())
265 {
266 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
267 {
268 switch (attrib.Name.LocalName)
269 {
270 case "Id":
271 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
272 break;
273 case "AttributeIndex":
274 hxr = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
275 this.Core.CreateSimpleReference(sourceLineNumbers, "File", hxr);
276 break;
277 case "Index":
278 hxi = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
279 this.Core.CreateSimpleReference(sourceLineNumbers, "File", hxi);
280 break;
281 case "Language":
282 language = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue);
283 break;
284 case "Name":
285 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
286 break;
287 case "SampleLocation":
288 samples = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
289 this.Core.CreateSimpleReference(sourceLineNumbers, "File", samples);
290 break;
291 case "Search":
292 hxq = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
293 this.Core.CreateSimpleReference(sourceLineNumbers, "File", hxq);
294 break;
295 case "SuppressCustomActions":
296 suppressCAs = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
297 break;
298 default:
299 this.Core.UnexpectedAttribute(node, attrib);
300 break;
301 }
302 }
303 else
304 {
305 this.Core.ParseExtensionAttribute(node, attrib);
306 }
307 }
308
309 if (null == id)
310 {
311 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
312 }
313
314 if (null == name)
315 {
316 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
317 }
318
319 //uninstall will always fail silently, leaving file registered, if Language is not set
320 if (CompilerConstants.IntegerNotSet == language)
321 {
322 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Language"));
323 }
324
325 this.Core.ParseForExtensionElements(node);
326
327 if (!this.Core.EncounteredError)
328 {
329 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpFile");
330 row[0] = id;
331 row[1] = name;
332 row[2] = language;
333 row[3] = fileId;
334 row[4] = hxi;
335 row[5] = hxq;
336 row[6] = hxr;
337 row[7] = samples;
338
339 if (YesNoType.No == suppressCAs)
340 {
341 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8");
342 }
343 }
344 }
345
346 /// <summary>
347 /// Parses a HelpFileRef element.
348 /// </summary>
349 /// <param name="node">Element to process.</param>
350 /// <param name="collectionId">Identifier of the parent help collection.</param>
351 private void ParseHelpFileRefElement(XElement node, string collectionId)
352 {
353 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
354 string id = null;
355
356 foreach (XAttribute attrib in node.Attributes())
357 {
358 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
359 {
360 switch (attrib.Name.LocalName)
361 {
362 case "Id":
363 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
364 this.Core.CreateSimpleReference(sourceLineNumbers, "HelpFile", id);
365 break;
366 default:
367 this.Core.UnexpectedAttribute(node, attrib);
368 break;
369 }
370 }
371 else
372 {
373 this.Core.ParseExtensionAttribute(node, attrib);
374 }
375 }
376
377 if (null == id)
378 {
379 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
380 }
381
382 this.Core.ParseForExtensionElements(node);
383
384 if (!this.Core.EncounteredError)
385 {
386 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpFileToNamespace");
387 row[0] = id;
388 row[1] = collectionId;
389 }
390 }
391
392 /// <summary>
393 /// Parses a HelpFilter element.
394 /// </summary>
395 /// <param name="node">Element to process.</param>
396 private void ParseHelpFilterElement(XElement node)
397 {
398 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
399 string id = null;
400 string filterDefinition = null;
401 string name = null;
402 YesNoType suppressCAs = YesNoType.No;
403
404 foreach (XAttribute attrib in node.Attributes())
405 {
406 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
407 {
408 switch (attrib.Name.LocalName)
409 {
410 case "Id":
411 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
412 break;
413 case "FilterDefinition":
414 filterDefinition = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
415 break;
416 case "Name":
417 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
418 break;
419 case "SuppressCustomActions":
420 suppressCAs = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
421 break;
422 default:
423 this.Core.UnexpectedAttribute(node, attrib);
424 break;
425 }
426 }
427 else
428 {
429 this.Core.ParseExtensionAttribute(node, attrib);
430 }
431 }
432
433 if (null == id)
434 {
435 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
436 }
437
438 if (null == name)
439 {
440 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
441 }
442
443 this.Core.ParseForExtensionElements(node);
444
445 if (!this.Core.EncounteredError)
446 {
447 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpFilter");
448 row[0] = id;
449 row[1] = name;
450 row[2] = filterDefinition;
451
452 if (YesNoType.No == suppressCAs)
453 {
454 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8");
455 }
456 }
457 }
458
459 /// <summary>
460 /// Parses a HelpFilterRef element.
461 /// </summary>
462 /// <param name="node">Element to process.</param>
463 /// <param name="collectionId">Identifier of the parent help collection.</param>
464 private void ParseHelpFilterRefElement(XElement node, string collectionId)
465 {
466 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
467 string id = null;
468
469 foreach (XAttribute attrib in node.Attributes())
470 {
471 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
472 {
473 switch (attrib.Name.LocalName)
474 {
475 case "Id":
476 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
477 this.Core.CreateSimpleReference(sourceLineNumbers, "HelpFilter", id);
478 break;
479 default:
480 this.Core.UnexpectedAttribute(node, attrib);
481 break;
482 }
483 }
484 else
485 {
486 this.Core.ParseExtensionAttribute(node, attrib);
487 }
488 }
489
490 if (null == id)
491 {
492 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
493 }
494
495 this.Core.ParseForExtensionElements(node);
496
497 if (!this.Core.EncounteredError)
498 {
499 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpFilterToNamespace");
500 row[0] = id;
501 row[1] = collectionId;
502 }
503 }
504
505 /// <summary>
506 /// Parses a PlugCollectionInto element.
507 /// </summary>
508 /// <param name="node">Element to process.</param>
509 /// <param name="parentId">Identifier of the parent help collection.</param>
510 private void ParsePlugCollectionIntoElement(XElement node, string parentId)
511 {
512 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
513 string hxa = null;
514 string hxt = null;
515 string hxtParent = null;
516 string namespaceParent = null;
517 string feature = null;
518 YesNoType suppressExternalNamespaces = YesNoType.No;
519 bool pluginVS05 = false;
520 bool pluginVS08 = false;
521
522 foreach (XAttribute attrib in node.Attributes())
523 {
524 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
525 {
526 switch (attrib.Name.LocalName)
527 {
528 case "Attributes":
529 hxa = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
530 break;
531 case "TableOfContents":
532 hxt = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
533 break;
534 case "TargetCollection":
535 namespaceParent = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
536 break;
537 case "TargetTableOfContents":
538 hxtParent = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
539 break;
540 case "TargetFeature":
541 feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
542 break;
543 case "SuppressExternalNamespaces":
544 suppressExternalNamespaces = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
545 break;
546 default:
547 this.Core.UnexpectedAttribute(node, attrib);
548 break;
549 }
550 }
551 else
552 {
553 this.Core.ParseExtensionAttribute(node, attrib);
554 }
555 }
556
557 pluginVS05 = namespaceParent.Equals("MS_VSIPCC_v80", StringComparison.Ordinal);
558 pluginVS08 = namespaceParent.Equals("MS.VSIPCC.v90", StringComparison.Ordinal);
559
560 if (null == namespaceParent)
561 {
562 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TargetCollection"));
563 }
564
565 if (null == feature && (pluginVS05 || pluginVS08) && YesNoType.No == suppressExternalNamespaces)
566 {
567 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TargetFeature"));
568 }
569
570 this.Core.ParseForExtensionElements(node);
571
572 if (!this.Core.EncounteredError)
573 {
574 Row row = this.Core.CreateRow(sourceLineNumbers, "HelpPlugin");
575 row[0] = parentId;
576 row[1] = namespaceParent;
577 row[2] = hxt;
578 row[3] = hxa;
579 row[4] = hxtParent;
580
581 if (pluginVS05)
582 {
583 if (YesNoType.No == suppressExternalNamespaces)
584 {
585 // Bring in the help 2 base namespace components for VS 2005
586 this.Core.CreateComplexReference(sourceLineNumbers, ComplexReferenceParentType.Feature, feature, String.Empty,
587 ComplexReferenceChildType.ComponentGroup, "Help2_VS2005_Namespace_Components", false);
588 // Reference CustomAction since nothing will happen without it
589 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction",
590 "CA_HxMerge_VSIPCC_VSCC");
591 }
592 }
593 else if (pluginVS08)
594 {
595 if (YesNoType.No == suppressExternalNamespaces)
596 {
597 // Bring in the help 2 base namespace components for VS 2008
598 this.Core.CreateComplexReference(sourceLineNumbers, ComplexReferenceParentType.Feature, feature, String.Empty,
599 ComplexReferenceChildType.ComponentGroup, "Help2_VS2008_Namespace_Components", false);
600 // Reference CustomAction since nothing will happen without it
601 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction",
602 "CA_ScheduleExtHelpPlugin_VSCC_VSIPCC");
603 }
604 }
605 else
606 {
607 // Reference the parent namespace to enforce the foreign key relationship
608 this.Core.CreateSimpleReference(sourceLineNumbers, "HelpNamespace",
609 namespaceParent);
610 }
611 }
612 }
613
614 /// <summary>
615 /// Parses a VsixPackage element.
616 /// </summary>
617 /// <param name="node">Element to process.</param>
618 /// <param name="componentId">Identifier of the parent Component element.</param>
619 /// <param name="fileId">Identifier of the parent File element.</param>
620 private void ParseVsixPackageElement(XElement node, string componentId, string fileId)
621 {
622 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
623 string propertyId = "VS_VSIX_INSTALLER_PATH";
624 string packageId = null;
625 YesNoType permanent = YesNoType.NotSet;
626 string target = null;
627 string targetVersion = null;
628 YesNoType vital = YesNoType.NotSet;
629
630 foreach (XAttribute attrib in node.Attributes())
631 {
632 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
633 {
634 switch (attrib.Name.LocalName)
635 {
636 case "File":
637 if (String.IsNullOrEmpty(fileId))
638 {
639 fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
640 }
641 else
642 {
643 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "File", "File"));
644 }
645 break;
646 case "PackageId":
647 packageId = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
648 break;
649 case "Permanent":
650 permanent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
651 break;
652 case "Target":
653 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
654 switch (target.ToLowerInvariant())
655 {
656 case "integrated":
657 case "integratedshell":
658 target = "IntegratedShell";
659 break;
660 case "professional":
661 target = "Pro";
662 break;
663 case "premium":
664 target = "Premium";
665 break;
666 case "ultimate":
667 target = "Ultimate";
668 break;
669 case "vbexpress":
670 target = "VBExpress";
671 break;
672 case "vcexpress":
673 target = "VCExpress";
674 break;
675 case "vcsexpress":
676 target = "VCSExpress";
677 break;
678 case "vwdexpress":
679 target = "VWDExpress";
680 break;
681 }
682 break;
683 case "TargetVersion":
684 targetVersion = this.Core.GetAttributeVersionValue(sourceLineNumbers, attrib);
685 break;
686 case "Vital":
687 vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
688 break;
689 case "VsixInstallerPathProperty":
690 propertyId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
691 break;
692 default:
693 this.Core.UnexpectedAttribute(node, attrib);
694 break;
695 }
696 }
697 else
698 {
699 this.Core.ParseExtensionAttribute(node, attrib);
700 }
701 }
702
703 if (String.IsNullOrEmpty(fileId))
704 {
705 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "File"));
706 }
707
708 if (String.IsNullOrEmpty(packageId))
709 {
710 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PackageId"));
711 }
712
713 if (!String.IsNullOrEmpty(target) && String.IsNullOrEmpty(targetVersion))
714 {
715 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TargetVersion", "Target"));
716 }
717 else if (String.IsNullOrEmpty(target) && !String.IsNullOrEmpty(targetVersion))
718 {
719 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Target", "TargetVersion"));
720 }
721
722 this.Core.ParseForExtensionElements(node);
723
724 if (!this.Core.EncounteredError)
725 {
726 // Ensure there is a reference to the AppSearch Property that will find the VsixInstaller.exe.
727 this.Core.CreateSimpleReference(sourceLineNumbers, "Property", propertyId);
728
729 // Ensure there is a reference to the package file (even if we are a child under it).
730 this.Core.CreateSimpleReference(sourceLineNumbers, "File", fileId);
731
732 string cmdlinePrefix = "/q ";
733
734 if (!String.IsNullOrEmpty(target))
735 {
736 cmdlinePrefix = String.Format("{0} /skuName:{1} /skuVersion:{2}", cmdlinePrefix, target, targetVersion);
737 }
738
739 string installAfter = "WriteRegistryValues"; // by default, come after the registry key registration.
740 int installExtraBits = VSCompiler.MsidbCustomActionTypeInScript;
741
742 // If the package is not vital, mark the install action as continue.
743 if (vital == YesNoType.No)
744 {
745 installExtraBits |= VSCompiler.MsidbCustomActionTypeContinue;
746 }
747 else // the package is vital so ensure there is a rollback action scheduled.
748 {
749 Identifier rollbackNamePerUser = this.Core.CreateIdentifier("vru", componentId, fileId, "per-user", target ?? String.Empty, targetVersion ?? String.Empty);
750 Identifier rollbackNamePerMachine = this.Core.CreateIdentifier("vrm", componentId, fileId, "per-machine", target ?? String.Empty, targetVersion ?? String.Empty);
751 string rollbackCmdLinePerUser = String.Concat(cmdlinePrefix, " /u:\"", packageId, "\"");
752 string rollbackCmdLinePerMachine = String.Concat(rollbackCmdLinePerUser, " /admin");
753 int rollbackExtraBitsPerUser = VSCompiler.MsidbCustomActionTypeContinue | VSCompiler.MsidbCustomActionTypeRollback | VSCompiler.MsidbCustomActionTypeInScript;
754 int rollbackExtraBitsPerMachine = rollbackExtraBitsPerUser | VSCompiler.MsidbCustomActionTypeNoImpersonate;
755 string rollbackConditionPerUser = String.Format("NOT ALLUSERS AND NOT Installed AND ${0}=2 AND ?{0}>2", componentId); // NOT Installed && Component being installed but not installed already.
756 string rollbackConditionPerMachine = String.Format("ALLUSERS AND NOT Installed AND ${0}=2 AND ?{0}>2", componentId); // NOT Installed && Component being installed but not installed already.
757
758 this.SchedulePropertyExeAction(sourceLineNumbers, rollbackNamePerUser, propertyId, rollbackCmdLinePerUser, rollbackExtraBitsPerUser, rollbackConditionPerUser, null, installAfter);
759 this.SchedulePropertyExeAction(sourceLineNumbers, rollbackNamePerMachine, propertyId, rollbackCmdLinePerMachine, rollbackExtraBitsPerMachine, rollbackConditionPerMachine, null, rollbackNamePerUser.Id);
760
761 installAfter = rollbackNamePerMachine.Id;
762 }
763
764 Identifier installNamePerUser = this.Core.CreateIdentifier("viu", componentId, fileId, "per-user", target ?? String.Empty, targetVersion ?? String.Empty);
765 Identifier installNamePerMachine = this.Core.CreateIdentifier("vim", componentId, fileId, "per-machine", target ?? String.Empty, targetVersion ?? String.Empty);
766 string installCmdLinePerUser = String.Format("{0} \"[#{1}]\"", cmdlinePrefix, fileId);
767 string installCmdLinePerMachine = String.Concat(installCmdLinePerUser, " /admin");
768 string installConditionPerUser = String.Format("NOT ALLUSERS AND ${0}=3", componentId); // only execute if the Component being installed.
769 string installConditionPerMachine = String.Format("ALLUSERS AND ${0}=3", componentId); // only execute if the Component being installed.
770
771 this.SchedulePropertyExeAction(sourceLineNumbers, installNamePerUser, propertyId, installCmdLinePerUser, installExtraBits, installConditionPerUser, null, installAfter);
772 this.SchedulePropertyExeAction(sourceLineNumbers, installNamePerMachine, propertyId, installCmdLinePerMachine, installExtraBits | VSCompiler.MsidbCustomActionTypeNoImpersonate, installConditionPerMachine, null, installNamePerUser.Id);
773
774 // If not permanent, schedule the uninstall custom action.
775 if (permanent != YesNoType.Yes)
776 {
777 Identifier uninstallNamePerUser = this.Core.CreateIdentifier("vuu", componentId, fileId, "per-user", target ?? String.Empty, targetVersion ?? String.Empty);
778 Identifier uninstallNamePerMachine = this.Core.CreateIdentifier("vum", componentId, fileId, "per-machine", target ?? String.Empty, targetVersion ?? String.Empty);
779 string uninstallCmdLinePerUser = String.Concat(cmdlinePrefix, " /u:\"", packageId, "\"");
780 string uninstallCmdLinePerMachine = String.Concat(uninstallCmdLinePerUser, " /admin");
781 int uninstallExtraBitsPerUser = VSCompiler.MsidbCustomActionTypeContinue | VSCompiler.MsidbCustomActionTypeInScript;
782 int uninstallExtraBitsPerMachine = uninstallExtraBitsPerUser | VSCompiler.MsidbCustomActionTypeNoImpersonate;
783 string uninstallConditionPerUser = String.Format("NOT ALLUSERS AND ${0}=2 AND ?{0}>2", componentId); // Only execute if component is being uninstalled.
784 string uninstallConditionPerMachine = String.Format("ALLUSERS AND ${0}=2 AND ?{0}>2", componentId); // Only execute if component is being uninstalled.
785
786 this.SchedulePropertyExeAction(sourceLineNumbers, uninstallNamePerUser, propertyId, uninstallCmdLinePerUser, uninstallExtraBitsPerUser, uninstallConditionPerUser, "InstallFinalize", null);
787 this.SchedulePropertyExeAction(sourceLineNumbers, uninstallNamePerMachine, propertyId, uninstallCmdLinePerMachine, uninstallExtraBitsPerMachine, uninstallConditionPerMachine, "InstallFinalize", null);
788 }
789 }
790 }
791
792 private void SchedulePropertyExeAction(SourceLineNumber sourceLineNumbers, Identifier name, string source, string cmdline, int extraBits, string condition, string beforeAction, string afterAction)
793 {
794 const string sequence = "InstallExecuteSequence";
795
796 Row actionRow = this.Core.CreateRow(sourceLineNumbers, "CustomAction", name);
797 actionRow[1] = VSCompiler.MsidbCustomActionTypeProperty | VSCompiler.MsidbCustomActionTypeExe | extraBits;
798 actionRow[2] = source;
799 actionRow[3] = cmdline;
800
801 Row sequenceRow = this.Core.CreateRow(sourceLineNumbers, "WixAction");
802 sequenceRow[0] = sequence;
803 sequenceRow[1] = name.Id;
804 sequenceRow[2] = condition;
805 // no explicit sequence
806 sequenceRow[4] = beforeAction;
807 sequenceRow[5] = afterAction;
808 sequenceRow[6] = 0; // not overridable
809
810 if (null != beforeAction)
811 {
812 if (WindowsInstallerStandard.IsStandardAction(beforeAction))
813 {
814 this.Core.CreateSimpleReference(sourceLineNumbers, "WixAction", sequence, beforeAction);
815 }
816 else
817 {
818 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", beforeAction);
819 }
820 }
821
822 if (null != afterAction)
823 {
824 if (WindowsInstallerStandard.IsStandardAction(afterAction))
825 {
826 this.Core.CreateSimpleReference(sourceLineNumbers, "WixAction", sequence, afterAction);
827 }
828 else
829 {
830 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", afterAction);
831 }
832 }
833 }
834 }
835}
diff --git a/src/wixext/VSDecompiler.cs b/src/wixext/VSDecompiler.cs
new file mode 100644
index 00000000..bfa0670c
--- /dev/null
+++ b/src/wixext/VSDecompiler.cs
@@ -0,0 +1,296 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Extensions
4{
5 using System;
6 using System.Collections;
7 using System.Diagnostics;
8 using System.Globalization;
9 using WixToolset.Data;
10 using WixToolset.Extensibility;
11 using VS = WixToolset.Extensions.Serialize.VS;
12 using Wix = WixToolset.Data.Serialize;
13
14 /// <summary>
15 /// The decompiler for the WiX Toolset Visual Studio Extension.
16 /// </summary>
17 public sealed class VSDecompiler : DecompilerExtension
18 {
19 /// <summary>
20 /// Creates a decompiler for VS Extension.
21 /// </summary>
22 public VSDecompiler()
23 {
24 this.TableDefinitions = VSExtensionData.GetExtensionTableDefinitions();
25 }
26
27 /// <summary>
28 /// Get the extensions library to be removed.
29 /// </summary>
30 /// <param name="tableDefinitions">Table definitions for library.</param>
31 /// <returns>Library to remove from decompiled output.</returns>
32 public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions)
33 {
34 return VSExtensionData.GetExtensionLibrary(tableDefinitions);
35 }
36
37 /// <summary>
38 /// Decompiles an extension table.
39 /// </summary>
40 /// <param name="table">The table to decompile.</param>
41 public override void DecompileTable(Table table)
42 {
43 switch (table.Name)
44 {
45 case "HelpFile":
46 this.DecompileHelpFileTable(table);
47 break;
48 case "HelpFileToNamespace":
49 this.DecompileHelpFileToNamespaceTable(table);
50 break;
51 case "HelpFilter":
52 this.DecompileHelpFilterTable(table);
53 break;
54 case "HelpFilterToNamespace":
55 this.DecompileHelpFilterToNamespaceTable(table);
56 break;
57 case "HelpNamespace":
58 this.DecompileHelpNamespaceTable(table);
59 break;
60 case "HelpPlugin":
61 this.DecompileHelpPluginTable(table);
62 break;
63 default:
64 base.DecompileTable(table);
65 break;
66 }
67 }
68
69 /// <summary>
70 /// Decompile the HelpFile table.
71 /// </summary>
72 /// <param name="table">The table to decompile.</param>
73 private void DecompileHelpFileTable(Table table)
74 {
75 foreach (Row row in table.Rows)
76 {
77 VS.HelpFile helpFile = new VS.HelpFile();
78
79 helpFile.Id = (string)row[0];
80
81 helpFile.Name = (string)row[1];
82
83 if (null != row[2])
84 {
85 helpFile.Language = (int)row[2];
86 }
87
88 if (null != row[4])
89 {
90 helpFile.Index = (string)row[4];
91 }
92
93 if (null != row[5])
94 {
95 helpFile.Search = (string)row[5];
96 }
97
98 if (null != row[6])
99 {
100 helpFile.AttributeIndex = (string)row[6];
101 }
102
103 if (null != row[7])
104 {
105 helpFile.SampleLocation = (string)row[7];
106 }
107
108 if (this.Core.RootElement is Wix.Module)
109 {
110 helpFile.SuppressCustomActions = VS.YesNoType.yes;
111 }
112
113 Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[3]);
114 if (null != file)
115 {
116 file.AddChild(helpFile);
117 }
118 else
119 {
120 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_HxS", (string)row[3], "File"));
121 }
122 }
123 }
124
125 /// <summary>
126 /// Decompile the HelpFileToNamespace table.
127 /// </summary>
128 /// <param name="table">The table to decompile.</param>
129 private void DecompileHelpFileToNamespaceTable(Table table)
130 {
131 foreach (Row row in table.Rows)
132 {
133 VS.HelpFileRef helpFileRef = new VS.HelpFileRef();
134
135 helpFileRef.Id = (string)row[0];
136
137 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
138 if (null != helpCollection)
139 {
140 helpCollection.AddChild(helpFileRef);
141 }
142 else
143 {
144 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
145 }
146 }
147 }
148
149 /// <summary>
150 /// Decompile the HelpFilter table.
151 /// </summary>
152 /// <param name="table">The table to decompile.</param>
153 private void DecompileHelpFilterTable(Table table)
154 {
155 foreach (Row row in table.Rows)
156 {
157 VS.HelpFilter helpFilter = new VS.HelpFilter();
158
159 helpFilter.Id = (string)row[0];
160
161 helpFilter.Name = (string)row[1];
162
163 if (null != row[2])
164 {
165 helpFilter.FilterDefinition = (string)row[2];
166 }
167
168 if (this.Core.RootElement is Wix.Module)
169 {
170 helpFilter.SuppressCustomActions = VS.YesNoType.yes;
171 }
172
173 this.Core.RootElement.AddChild(helpFilter);
174 }
175 }
176
177 /// <summary>
178 /// Decompile the HelpFilterToNamespace table.
179 /// </summary>
180 /// <param name="table">The table to decompile.</param>
181 private void DecompileHelpFilterToNamespaceTable(Table table)
182 {
183 foreach (Row row in table.Rows)
184 {
185 VS.HelpFilterRef helpFilterRef = new VS.HelpFilterRef();
186
187 helpFilterRef.Id = (string)row[0];
188
189 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[1]);
190 if (null != helpCollection)
191 {
192 helpCollection.AddChild(helpFilterRef);
193 }
194 else
195 {
196 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[1], "HelpNamespace"));
197 }
198 }
199 }
200
201 /// <summary>
202 /// Decompile the HelpNamespace table.
203 /// </summary>
204 /// <param name="table">The table to decompile.</param>
205 private void DecompileHelpNamespaceTable(Table table)
206 {
207 foreach (Row row in table.Rows)
208 {
209 VS.HelpCollection helpCollection = new VS.HelpCollection();
210
211 helpCollection.Id = (string)row[0];
212
213 helpCollection.Name = (string)row[1];
214
215 if (null != row[3])
216 {
217 helpCollection.Description = (string)row[3];
218 }
219
220 if (this.Core.RootElement is Wix.Module)
221 {
222 helpCollection.SuppressCustomActions = VS.YesNoType.yes;
223 }
224
225 Wix.File file = (Wix.File)this.Core.GetIndexedElement("File", (string)row[2]);
226 if (null != file)
227 {
228 file.AddChild(helpCollection);
229 }
230 else if (0 != String.Compare(helpCollection.Id, "MS_VSIPCC_v80", StringComparison.Ordinal) &&
231 0 != String.Compare(helpCollection.Id, "MS.VSIPCC.v90", StringComparison.Ordinal))
232 {
233 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "File_Collection", (string)row[2], "File"));
234 }
235 this.Core.IndexElement(row, helpCollection);
236 }
237 }
238
239 /// <summary>
240 /// Decompile the HelpPlugin table.
241 /// </summary>
242 /// <param name="table">The table to decompile.</param>
243 private void DecompileHelpPluginTable(Table table)
244 {
245 foreach (Row row in table.Rows)
246 {
247 VS.PlugCollectionInto plugCollectionInto = new VS.PlugCollectionInto();
248
249 plugCollectionInto.TargetCollection = (string)row[1];
250
251 if (null != row[2])
252 {
253 plugCollectionInto.TableOfContents = (string)row[2];
254 }
255
256 if (null != row[3])
257 {
258 plugCollectionInto.Attributes = (string)row[3];
259 }
260
261 if (null != row[4])
262 {
263 plugCollectionInto.TargetTableOfContents = (string)row[4];
264 }
265
266 if (this.Core.RootElement is Wix.Module)
267 {
268 plugCollectionInto.SuppressExternalNamespaces = VS.YesNoType.yes;
269 }
270
271 //we cannot do this work because we cannot get the FeatureComponent table
272 //plugCollectionInto.TargetFeature = DecompileHelpComponents();
273
274 VS.HelpCollection helpCollection = (VS.HelpCollection)this.Core.GetIndexedElement("HelpNamespace", (string)row[0]);
275 if (null != helpCollection)
276 {
277 helpCollection.AddChild(plugCollectionInto);
278 }
279 else
280 {
281 this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "HelpNamespace_", (string)row[0], "HelpNamespace"));
282 }
283 }
284 }
285 //private string DecompileHelpComponents()
286 //{
287 // throw new NotImplementedException();
288 // //Find both known compontents from FeatureComponents table and build feature list
289
290 // //remove components from FeatureComponents
291
292 // //return a space delimited list of features that mapped to our help components
293 // return String.Empty;
294 //}
295 }
296}
diff --git a/src/wixext/VSExtensionData.cs b/src/wixext/VSExtensionData.cs
new file mode 100644
index 00000000..edb1fd42
--- /dev/null
+++ b/src/wixext/VSExtensionData.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.Extensions
4{
5 using System;
6 using System.Reflection;
7 using WixToolset.Data;
8 using WixToolset.Extensibility;
9
10 /// <summary>
11 /// The WiX Toolset Visual Studio Extension.
12 /// </summary>
13 public sealed class VSExtensionData : ExtensionData
14 {
15 /// <summary>
16 /// Gets the optional table definitions for this extension.
17 /// </summary>
18 /// <value>The optional table definitions for this extension.</value>
19 public override TableDefinitionCollection TableDefinitions
20 {
21 get
22 {
23 return VSExtensionData.GetExtensionTableDefinitions();
24 }
25 }
26
27 /// <summary>
28 /// Gets the library associated with this extension.
29 /// </summary>
30 /// <param name="tableDefinitions">The table definitions to use while loading the library.</param>
31 /// <returns>The loaded library.</returns>
32 public override Library GetLibrary(TableDefinitionCollection tableDefinitions)
33 {
34 return VSExtensionData.GetExtensionLibrary(tableDefinitions);
35 }
36
37 /// <summary>
38 /// Internal mechanism to access the extension's table definitions.
39 /// </summary>
40 /// <returns>Extension's table definitions.</returns>
41 internal static TableDefinitionCollection GetExtensionTableDefinitions()
42 {
43 return ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml");
44 }
45
46 /// <summary>
47 /// Internal mechanism to access the extension's library.
48 /// </summary>
49 /// <returns>Extension's library.</returns>
50 internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
51 {
52 return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.vs.wixlib", tableDefinitions);
53 }
54 }
55}
diff --git a/src/wixext/WixToolset.VisualStudio.wixext.csproj b/src/wixext/WixToolset.VisualStudio.wixext.csproj
new file mode 100644
index 00000000..0b092662
--- /dev/null
+++ b/src/wixext/WixToolset.VisualStudio.wixext.csproj
@@ -0,0 +1,69 @@
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.Extensions</RootNamespace>
8 <Description>WiX Toolset Visual Studio Extension</Description>
9 <Title>WiX Toolset VS Extension</Title>
10 <IsTool>true</IsTool>
11 <ContentTargetFolders>build</ContentTargetFolders>
12 </PropertyGroup>
13
14 <PropertyGroup>
15 <NoWarn>NU1701</NoWarn>
16 </PropertyGroup>
17
18 <ItemGroup>
19 <EmbeddedResource Include="Data\tables.xml">
20 <LogicalName>$(RootNamespace).Data.tables.xml</LogicalName>
21 </EmbeddedResource>
22
23 <MsgGenSource Include="Data\messages.xml">
24 <ResourcesLogicalName>$(RootNamespace).Data.Messages.resources</ResourcesLogicalName>
25 </MsgGenSource>
26
27 <EmbeddedResource Include="Xsd\vs.xsd">
28 <LogicalName>$(RootNamespace).Xsd.vs.xsd</LogicalName>
29 <Pack>true</Pack>
30 <PackagePath>tools</PackagePath>
31 </EmbeddedResource>
32
33 <XsdGenSource Include="Xsd\vs.xsd">
34 <CommonNamespace>WixToolset.Data.Serialize</CommonNamespace>
35 <Namespace>WixToolset.Extensions.Serialize.VS</Namespace>
36 </XsdGenSource>
37
38 <EmbeddedResource Include="$(OutputPath)..\vs.wixlib">
39 <Link>Data\vs.wixlib</Link>
40 </EmbeddedResource>
41 </ItemGroup>
42
43 <ItemGroup>
44 <Content Include="$(MSBuildThisFileName).targets" />
45 </ItemGroup>
46
47 <ItemGroup>
48 <ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
49 <PackageReference Include="WixToolset.Data" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " PrivateAssets="all" />
50
51 <ProjectReference Include="$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " />
52 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " PrivateAssets="all" />
53
54 <ProjectReference Include="$(WixToolsetRootFolder)\Core\src\WixToolset.Core\WixToolset.Core.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core\src\WixToolset.Core\WixToolset.Core.csproj') " />
55 <PackageReference Include="WixToolset.Core" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Core\src\WixToolset.Core\WixToolset.Core.csproj') " PrivateAssets="all" />
56 </ItemGroup>
57
58 <ItemGroup>
59 <ProjectReference Include="..\wixlib\vs.wixproj">
60 <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
61 </ProjectReference>
62 </ItemGroup>
63
64 <ItemGroup>
65 <PackageReference Include="Nerdbank.GitVersioning" Version="2.0.41" PrivateAssets="all" />
66 <PackageReference Include="WixBuildTools.MsgGen" Version="4.0.*" PrivateAssets="all" />
67 <PackageReference Include="WixBuildTools.XsdGen" Version="4.0.*" PrivateAssets="all" />
68 </ItemGroup>
69</Project>
diff --git a/src/wixext/WixToolset.VisualStudio.wixext.targets b/src/wixext/WixToolset.VisualStudio.wixext.targets
new file mode 100644
index 00000000..903455e3
--- /dev/null
+++ b/src/wixext/WixToolset.VisualStudio.wixext.targets
@@ -0,0 +1,10 @@
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="WixToolset.VS.wixext">
7 <HintPath>$(MSBuildThisFileDirectory)..\tools\WixToolset.VS.wixext.dll</HintPath>
8 </WixExtension>
9 </ItemGroup>
10</Project>
diff --git a/src/wixext/xsd/vs.xsd b/src/wixext/xsd/vs.xsd
new file mode 100644
index 00000000..51172920
--- /dev/null
+++ b/src/wixext/xsd/vs.xsd
@@ -0,0 +1,292 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
6 xmlns:xse=" http://wixtoolset.org/schemas/XmlSchemaExtension"
7 targetNamespace="http://wixtoolset.org/schemas/v4/wxs/vs"
8 xmlns="http://wixtoolset.org/schemas/v4/wxs/vs">
9 <xs:annotation>
10 <xs:documentation>
11 The source code schema for the WiX Toolset Visual Studio Extension.
12 </xs:documentation>
13 </xs:annotation>
14
15 <xs:element name="HelpCollection">
16 <xs:annotation>
17 <xs:documentation>
18 Help Namespace for a help collection. The parent file is the key for the HxC (Collection) file.
19 </xs:documentation>
20 <xs:appinfo>
21 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="File" />
22 </xs:appinfo>
23 </xs:annotation>
24 <xs:complexType>
25 <xs:choice minOccurs="0" maxOccurs="unbounded">
26 <xs:element ref="HelpFileRef" />
27 <xs:element ref="HelpFilterRef" />
28 <xs:element ref="PlugCollectionInto" />
29 </xs:choice>
30 <xs:attribute name="Id" type="xs:string" use="required">
31 <xs:annotation><xs:documentation>Primary Key for HelpNamespace.</xs:documentation></xs:annotation>
32 </xs:attribute>
33 <xs:attribute name="Description" type="xs:string">
34 <xs:annotation><xs:documentation>Friendly name for Namespace.</xs:documentation></xs:annotation>
35 </xs:attribute>
36 <xs:attribute name="Name" use="required" type="xs:string">
37 <xs:annotation><xs:documentation>Internal Microsoft Help ID for this Namespace.</xs:documentation></xs:annotation>
38 </xs:attribute>
39 <xs:attribute name="SuppressCustomActions" type="YesNoType">
40 <xs:annotation><xs:documentation>Suppress linking Help registration custom actions. Help redistributable merge modules will be required. Use this when building a merge module.</xs:documentation></xs:annotation>
41 </xs:attribute>
42 </xs:complexType>
43 </xs:element>
44
45 <xs:element name="HelpFilter">
46 <xs:annotation>
47 <xs:documentation>
48 Filter for Help Namespace.
49 </xs:documentation>
50 <xs:appinfo>
51 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" />
52 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" />
53 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" />
54 </xs:appinfo>
55 </xs:annotation>
56 <xs:complexType>
57 <xs:attribute name="Id" use="required" type="xs:string">
58 <xs:annotation><xs:documentation>Primary Key for HelpFilter.</xs:documentation></xs:annotation>
59 </xs:attribute>
60 <xs:attribute name="FilterDefinition" type="xs:string">
61 <xs:annotation><xs:documentation>Query String for Help Filter.</xs:documentation></xs:annotation>
62 </xs:attribute>
63 <xs:attribute name="Name" use="required" type="xs:string">
64 <xs:annotation><xs:documentation>Friendly name for Filter.</xs:documentation></xs:annotation>
65 </xs:attribute>
66 <xs:attribute name="SuppressCustomActions" type="YesNoType">
67 <xs:annotation><xs:documentation>Suppress linking Help registration custom actions. Help redistributable merge modules will be required. Use this when building a merge module.</xs:documentation></xs:annotation>
68 </xs:attribute>
69 </xs:complexType>
70 </xs:element>
71
72 <xs:element name="HelpFile">
73 <xs:annotation>
74 <xs:documentation>
75 File for Help Namespace. The parent file is the key for HxS (Title) file.
76 </xs:documentation>
77 <xs:appinfo>
78 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="File" />
79 </xs:appinfo>
80 </xs:annotation>
81 <xs:complexType>
82 <xs:attribute name="Id" use="required" type="xs:string">
83 <xs:annotation><xs:documentation>Primary Key for HelpFile Table.</xs:documentation></xs:annotation>
84 </xs:attribute>
85 <xs:attribute name="AttributeIndex" type="xs:string">
86 <xs:annotation><xs:documentation>Key for HxR (Attributes) file.</xs:documentation></xs:annotation>
87 </xs:attribute>
88 <xs:attribute name="Index" type="xs:string">
89 <xs:annotation><xs:documentation>Key for HxI (Index) file.</xs:documentation></xs:annotation>
90 </xs:attribute>
91 <xs:attribute name="Language" use="required" type="xs:integer">
92 <xs:annotation><xs:documentation>Language ID for content file.</xs:documentation></xs:annotation>
93 </xs:attribute>
94 <xs:attribute name="Name" use="required" type="xs:string">
95 <xs:annotation><xs:documentation>Internal Microsoft Help ID for this HelpFile.</xs:documentation></xs:annotation>
96 </xs:attribute>
97 <xs:attribute name="SampleLocation" type="xs:string">
98 <xs:annotation><xs:documentation>Key for a file that is in the "root" of the samples directory for this HelpFile.</xs:documentation></xs:annotation>
99 </xs:attribute>
100 <xs:attribute name="Search" type="xs:string">
101 <xs:annotation><xs:documentation>Key for HxQ (Query) file.</xs:documentation></xs:annotation>
102 </xs:attribute>
103 <xs:attribute name="SuppressCustomActions" type="YesNoType">
104 <xs:annotation><xs:documentation>Suppress linking Help registration custom actions. Help redistributable merge modules will be required. Use this when building a merge module.</xs:documentation></xs:annotation>
105 </xs:attribute>
106 </xs:complexType>
107 </xs:element>
108
109 <xs:element name="PlugCollectionInto">
110 <xs:annotation><xs:documentation>Plugin for Help Namespace.</xs:documentation></xs:annotation>
111 <xs:complexType>
112 <xs:attribute name="Attributes" type="xs:string">
113 <xs:annotation><xs:documentation>Key for HxA (Attributes) file of child namespace.</xs:documentation></xs:annotation>
114 </xs:attribute>
115 <xs:attribute name="TableOfContents" type="xs:string">
116 <xs:annotation><xs:documentation>Key for HxT file of child namespace.</xs:documentation></xs:annotation>
117 </xs:attribute>
118 <xs:attribute name="TargetCollection" use="required" type="xs:string">
119 <xs:annotation><xs:documentation>
120 Foriegn Key into HelpNamespace table for the parent namespace into which the child will be inserted.
121 The following special keys can be used to plug into external namespaces defined outside of the installer.
122 MS_VSIPCC_v80 : Visual Studio 2005
123 MS.VSIPCC.v90 : Visual Studio 2008
124 </xs:documentation></xs:annotation>
125 </xs:attribute>
126 <xs:attribute name="TargetTableOfContents" type="xs:string">
127 <xs:annotation><xs:documentation>Key for HxT file of parent namespace that now includes the new child namespace.</xs:documentation></xs:annotation>
128 </xs:attribute>
129 <xs:attribute name="TargetFeature" type="xs:string">
130 <xs:annotation><xs:documentation>Key for the feature parent of this help collection. Required only when plugging into external namespaces.</xs:documentation></xs:annotation>
131 </xs:attribute>
132 <xs:attribute name="SuppressExternalNamespaces" type="YesNoType">
133 <xs:annotation><xs:documentation>Suppress linking Visual Studio Help namespaces. Help redistributable merge modules will be required. Use this when building a merge module.</xs:documentation></xs:annotation>
134 </xs:attribute>
135 </xs:complexType>
136 </xs:element>
137
138 <xs:element name="HelpFileRef">
139 <xs:annotation><xs:documentation>Create a reference to a HelpFile element in another Fragment.</xs:documentation></xs:annotation>
140 <xs:complexType>
141 <xs:attribute name="Id" use="required" type="xs:string">
142 <xs:annotation><xs:documentation>Primary Key for HelpFile Table.</xs:documentation></xs:annotation>
143 </xs:attribute>
144 <xs:anyAttribute namespace="##other" processContents="lax">
145 <xs:annotation><xs:documentation>
146 Extensibility point in the WiX XML Schema. Schema extensions can register additional
147 attributes at this point in the schema.
148 </xs:documentation></xs:annotation>
149 </xs:anyAttribute>
150 </xs:complexType>
151 </xs:element>
152
153 <xs:element name="HelpFilterRef">
154 <xs:annotation><xs:documentation>Create a reference to a HelpFile element in another Fragment.</xs:documentation></xs:annotation>
155 <xs:complexType>
156 <xs:attribute name="Id" use="required" type="xs:string">
157 <xs:annotation><xs:documentation>Primary Key for HelpFilter.</xs:documentation></xs:annotation>
158 </xs:attribute>
159 <xs:anyAttribute namespace="##other" processContents="lax">
160 <xs:annotation><xs:documentation>
161 Extensibility point in the WiX XML Schema. Schema extensions can register additional
162 attributes at this point in the schema.
163 </xs:documentation></xs:annotation>
164 </xs:anyAttribute>
165 </xs:complexType>
166 </xs:element>
167
168 <xs:element name="HelpCollectionRef">
169 <xs:annotation>
170 <xs:documentation>Create a reference to a HelpCollection element in another Fragment.</xs:documentation>
171 <xs:appinfo>
172 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" />
173 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" />
174 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" />
175 </xs:appinfo>
176 </xs:annotation>
177 <xs:complexType>
178 <xs:choice minOccurs="0" maxOccurs="unbounded">
179 <xs:element ref="HelpFileRef" />
180 </xs:choice>
181 <xs:attribute name="Id" use="required" type="xs:string">
182 <xs:annotation><xs:documentation>Primary Key for HelpNamespace Table.</xs:documentation></xs:annotation>
183 </xs:attribute>
184 <xs:anyAttribute namespace="##other" processContents="lax">
185 <xs:annotation><xs:documentation>
186 Extensibility point in the WiX XML Schema. Schema extensions can register additional
187 attributes at this point in the schema.
188 </xs:documentation></xs:annotation>
189 </xs:anyAttribute>
190 </xs:complexType>
191 </xs:element>
192
193 <xs:element name="VsixPackage">
194 <xs:annotation>
195 <xs:documentation>
196 This element provides the metdata required to install/uninstall a file as
197 a VSIX Package. The VSIX package file will be installed as part of the MSI
198 then passed to the VSIX installer to install the VSIX package. To avoid the
199 duplication, simply use the MSI to install the VSIX package itself.
200 </xs:documentation>
201 <xs:appinfo>
202 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" />
203 <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="File" />
204 </xs:appinfo>
205 </xs:annotation>
206 <xs:complexType>
207 <xs:attribute name="File" type="xs:string">
208 <xs:annotation>
209 <xs:documentation>
210 Reference to file identifer. This attribute is required when the element is not a
211 child of a File element and is invalid when the element is a child of the File element.
212 </xs:documentation>
213 </xs:annotation>
214 </xs:attribute>
215 <xs:attribute name="PackageId" type="xs:string" use="required">
216 <xs:annotation>
217 <xs:documentation>
218 Identity of the VSIX package per its internal manifest. If this value is not correct
219 the VSIX package will not correctly uninstall.
220 </xs:documentation>
221 </xs:annotation>
222 </xs:attribute>
223 <xs:attribute name="Permanent" type="YesNoType">
224 <xs:annotation>
225 <xs:documentation>
226 Indicates whether the VSIX package is uninstalled when the parent Component is uninstalled.
227 The default is 'no'.
228 </xs:documentation>
229 </xs:annotation>
230 </xs:attribute>
231 <xs:attribute name="Target" type="xs:string">
232 <xs:annotation>
233 <xs:documentation>
234 Specifies the SKU of Visual Studio in which to register the extension. If no target
235 is specified the extension is registered with all installed SKUs. If the Target
236 attribute is specified the TargetVersion attribute must also be specified. The
237 following is a list of known Visual Studio targets: integratedShell, professional,
238 premium, ultimate, vbExpress, vcExpress, vcsExpress, vwdExpress
239 </xs:documentation>
240 </xs:annotation>
241 </xs:attribute>
242 <xs:attribute name="TargetVersion" type="VersionType">
243 <xs:annotation>
244 <xs:documentation>
245 Specifies the version of Visual Studio in which to register the extension. This attribute
246 is required if the Target attribute is specified.
247 </xs:documentation>
248 </xs:annotation>
249 </xs:attribute>
250 <xs:attribute name="Vital" type="YesNoType">
251 <xs:annotation>
252 <xs:documentation>
253 Indicates whether failure to install the VSIX package causes the installation to rollback.
254 The default is 'yes'.
255 </xs:documentation>
256 </xs:annotation>
257 </xs:attribute>
258 <xs:attribute name="VsixInstallerPathProperty" type="xs:string">
259 <xs:annotation>
260 <xs:documentation>
261 Optional reference to a Property element that contains the path to the VsixInstaller.exe.
262 By default, the latest VsixInstaller.exe on the machine will be used to install the VSIX
263 package. It is highly recommended that this attribute is *not* used.
264 </xs:documentation>
265 </xs:annotation>
266 </xs:attribute>
267 <xs:anyAttribute namespace="##other" processContents="lax">
268 <xs:annotation><xs:documentation>
269 Extensibility point in the WiX XML Schema. Schema extensions can register additional
270 attributes at this point in the schema.
271 </xs:documentation></xs:annotation>
272 </xs:anyAttribute>
273 </xs:complexType>
274 </xs:element>
275
276 <xs:simpleType name="VersionType">
277 <xs:annotation><xs:documentation>Values of this type will look like: "x.x.x.x" where x is an integer from 0 to 65534.</xs:documentation></xs:annotation>
278 <xs:restriction base="xs:string">
279 <xs:pattern value="(\d{1,5}\.){0,3}\d{1,5}"/>
280 </xs:restriction>
281 </xs:simpleType>
282
283 <xs:simpleType name="YesNoType">
284 <xs:annotation>
285 <xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation>
286 </xs:annotation>
287 <xs:restriction base='xs:NMTOKEN'>
288 <xs:enumeration value="no"/>
289 <xs:enumeration value="yes"/>
290 </xs:restriction>
291 </xs:simpleType>
292</xs:schema>
diff --git a/src/wixlib/HTML_Help_Registration__RTL_X86.wxs b/src/wixlib/HTML_Help_Registration__RTL_X86.wxs
new file mode 100644
index 00000000..fcb99f0f
--- /dev/null
+++ b/src/wixlib/HTML_Help_Registration__RTL_X86.wxs
@@ -0,0 +1,68 @@
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<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <Fragment>
6 <DirectoryRef Id="CommonFilesFolder">
7 <Directory Id="MSShared" Name="Microsoft Shared">
8 <Directory Id="DevHelp" Name="DevHelp">
9 <Directory Id="VSIPCC" Name="VSIPCC">
10 </Directory>
11 </Directory>
12 </Directory>
13 </DirectoryRef>
14 </Fragment>
15
16 <Fragment Id="HTML_Help_Registration_">
17 <Binary Id="BIN_File_46002" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_46002.dll" />
18 <Binary Id="BIN_File_46001" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_46001.dll" />
19 <Binary Id="BIN_File_107602" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_107602.dll" />
20 <!-- We are stuck using GUID'ed ids here because they were hardcoded in the Help2 dlls-->
21 <CustomAction Id="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="BeginTransaction" Execute="deferred" Impersonate="no" />
22 <CustomAction Id="CA_RegisterPlugIn.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RegisterPlugIn2" Execute="deferred" Impersonate="no" />
23 <CustomAction Id="CA_CommitHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="CommitTransaction" Return="ignore" Execute="commit" Impersonate="no" />
24 <CustomAction Id="CA_CommitHelpTransactionNoRB.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="CommitTransaction" Return="ignore" Execute="deferred" Impersonate="no" />
25 <CustomAction Id="CA_ExportTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46002" DllEntry="ExportTempHxDs" />
26 <CustomAction Id="CA_RegisterNamespace.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RegisterNamespace2" Execute="deferred" Impersonate="no" />
27 <CustomAction Id="CA_RollbackTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RemoveTempHxDs" Execute="rollback" Impersonate="no" />
28 <CustomAction Id="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46002" DllEntry="RegisterMicrosoftHelp" Return="ignore" />
29 <CustomAction Id="CA_RegisterHelpFile.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RegisterHelpFile" Execute="deferred" Impersonate="no" />
30 <CustomAction Id="CA_RegisterFilter.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RegisterFilter2" Execute="deferred" Impersonate="no" />
31 <CustomAction Id="CA_RemoveNamespace.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RemoveNamespace" Execute="deferred" Impersonate="no" />
32 <CustomAction Id="CA_RemoveTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RemoveTempHxDs" Return="ignore" />
33 <!-- This isn't actually executed, but the Help2 dlls use it to find the key for the binary file-->
34 <CustomAction Id="CA_DummyForHXDS_DLL.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_107602" DllEntry="Bogus" />
35 <CustomAction Id="CA_RollbackHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RollbackTransaction" Execute="rollback" Impersonate="no" />
36 <CustomAction Id="CA_RemoveHelpFile.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46001" DllEntry="RemoveHelpFile" Execute="deferred" Impersonate="no" />
37 <CustomAction Id="CA_UnRegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" BinaryKey="BIN_File_46002" DllEntry="UnRegisterMicrosoftHelp" Return="ignore" />
38
39 <InstallExecuteSequence>
40 <Custom Action="CA_ExportTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" Before="ProcessComponents" />
41
42 <Custom Action="CA_RollbackHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" Before="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" />
43 <Custom Action="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" After="RemoveFiles" />
44 <Custom Action="CA_UnRegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" After="CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" />
45
46 <Custom Action="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8" After="InstallFiles" />
47
48 <Custom Action="CA_CommitHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8" Before="InstallFinalize">( NOT RollbackDisabled )</Custom>
49 <Custom Action="CA_CommitHelpTransactionNoRB.3643236F_FC70_11D3_A536_0090278A1BB8" Before="InstallFinalize">( RollbackDisabled )</Custom>
50 <Custom Action="CA_RemoveTempHxDs.3643236F_FC70_11D3_A536_0090278A1BB8" After="InstallFinalize" />
51 </InstallExecuteSequence>
52
53 <CustomTable Id="HelpPlugin">
54 <Column Id="HelpNamespace_" Type="string" Width="72" PrimaryKey="yes" />
55 <Column Id="HelpNamespace_Parent" Type="string" Width="72" PrimaryKey="yes" />
56 <Column Id="File_HxT" Nullable="yes" Type="string" Width="72" />
57 <Column Id="File_HxA" Nullable="yes" Type="string" Width="72" />
58 <Column Id="File_ParentHxT" Nullable="yes" Type="string" Width="72" />
59 </CustomTable>
60
61 <CustomTable Id="HelpNamespace">
62 <Column Id="NamespaceKey" Type="string" Width="72" PrimaryKey="yes" />
63 <Column Id="NamespaceName" Type="string" Width="0" />
64 <Column Id="File_Collection" Type="string" Width="72" />
65 <Column Id="Description" Nullable="yes" Localizable="yes" Type="string" Width="0" />
66 </CustomTable>
67 </Fragment>
68</Wix>
diff --git a/src/wixlib/Redist/BIN_File_107602.dll b/src/wixlib/Redist/BIN_File_107602.dll
new file mode 100644
index 00000000..aef2cf29
--- /dev/null
+++ b/src/wixlib/Redist/BIN_File_107602.dll
Binary files differ
diff --git a/src/wixlib/Redist/BIN_File_46001.dll b/src/wixlib/Redist/BIN_File_46001.dll
new file mode 100644
index 00000000..9e470267
--- /dev/null
+++ b/src/wixlib/Redist/BIN_File_46001.dll
Binary files differ
diff --git a/src/wixlib/Redist/BIN_File_46002.dll b/src/wixlib/Redist/BIN_File_46002.dll
new file mode 100644
index 00000000..ae9c30dd
--- /dev/null
+++ b/src/wixlib/Redist/BIN_File_46002.dll
Binary files differ
diff --git a/src/wixlib/VS11.wxs b/src/wixlib/VS11.wxs
new file mode 100644
index 00000000..dd52e80a
--- /dev/null
+++ b/src/wixlib/VS11.wxs
@@ -0,0 +1,206 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS11_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS11DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS11ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS11_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS11DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS11ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS11_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS11ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw">
25 <DirectorySearch Id="VS11XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS11XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS11_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS11DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS11ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS11_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVs11BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS11_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS11RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS11DEVENV" Secure="yes">
54 <RegistrySearch Id="VS11DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS11Setup" Property="VS11DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS11DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS11Setup" Before="InstallFinalize" Overridable="yes">VS11DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS11InstallVSTemplates" Property="VS11DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS11DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS11InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS11DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# project system is installed as a part of -->
77 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
78 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
79 <!-- C# language tools were installed as a part of VS 11 setup. -->
80 <Fragment>
81 <Property Id="VS11_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
82 <RegistrySearch Id="SearchForVCS11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC#" Name="ProductDir" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
87 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
88 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
89 <!-- Basic language tools were installed as a part of VS 11 setup. -->
90 <Fragment>
91 <Property Id="VS11_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
92 <RegistrySearch Id="SearchForVB11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VB" Name="ProductDir" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- Indicates whether the Visual Web Developer 11 Express IDE component is installed. -->
97 <!-- If this property is set, that means Visual Web Developer 11 Express Edition is -->
98 <!-- installed on the system. -->
99 <Fragment>
100 <Property Id="VWD11EXPRESS_IDE" Secure="yes">
101 <ComponentSearch Id="SearchForVwdExpressIde11Component" Guid="92A0CBA0-BF39-422D-87FA-AB64564CD136" Type="file">
102 <FileSearch Id="VwdExpressIde11" Name="vwdexpress.exe" />
103 </ComponentSearch>
104 </Property>
105 </Fragment>
106 <!-- Custom action definition to run vwdexpress.exe /setup -->
107 <Fragment>
108 <CustomAction Id="VWD11Setup" Property="VWD11EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
109 <PropertyRef Id="VWD11EXPRESS_IDE" />
110 <InstallExecuteSequence>
111 <Custom Action="VWD11Setup" Before="InstallFinalize" Overridable="yes">VWD11EXPRESS_IDE</Custom>
112 </InstallExecuteSequence>
113 </Fragment>
114 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
115 <Fragment>
116 <CustomAction Id="VWD11InstallVSTemplates" Property="VWD11EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
117 <PropertyRef Id="VWD11EXPRESS_IDE" />
118 <InstallExecuteSequence>
119 <Custom Action="VWD11InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD11EXPRESS_IDE</Custom>
120 </InstallExecuteSequence>
121 </Fragment>
122
123 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
124 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
125 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
126 <!-- Web Developer language tools were installed as a part of VS 11 setup. -->
127 <Fragment>
128 <Property Id="VS11_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
129 <ComponentSearch Id="SearchForVWD11ProjectSystemUnderVSSetup" Guid="03E73DF8-BED3-44BB-BE2E-BAC10FAE723E" />
130 <ComponentSearch Id="SearchForVWD11ProjectSystemUnderVWDSetup" Guid="3D7D4A9F-E3D7-4F13-9907-AF4F3CD75D33" Type="directory" />
131 </Property>
132 </Fragment>
133
134 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
135 <!-- Visual Studio 11 standard or higher. If this property is set, that -->
136 <!-- means Visual Studio 11 standard or higher is installed and the Visual -->
137 <!-- C++ language tools were installed as a part of VS 11 setup. -->
138 <Fragment>
139 <Property Id="VS11_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
140 <RegistrySearch Id="SearchForVC11ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC" Name="ProductDir" Type="raw" />
141 </Property>
142 </Fragment>
143
144 <!-- Indicates whether the Visual Studio 11 Team Test project system is installed -->
145 <Fragment>
146 <Property Id="VS11_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
147 <RegistrySearch Id="SearchForVSTS11TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
148 </Property>
149 </Fragment>
150
151 <!-- Indicates whether the Visual Studio 11 Database project system is installed -->
152 <Fragment>
153 <Property Id="VS11_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
154 <ComponentSearch Id="SearchForVS11DBSystemUnderVSSetup" Guid="E781FFA7-55F5-4E8C-9275-7B7EF035B13B" />
155 </Property>
156 </Fragment>
157
158 <!-- Indicates whether the WiX project system is installed for VS11 -->
159 <Fragment>
160 <Property Id="VS11_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
161 <!-- Component search for the .pkgdef file for VS11 -->
162 <ComponentSearch Id="SearchForVS11WixSystemUnderVSSetup" Guid="55489E7A-7DCA-5228-975E-39C51BE332D9" />
163 </Property>
164 </Fragment>
165
166 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
167 <Fragment>
168 <Property Id="VS11_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
169 <RegistrySearch Id="SearchForVSTS11ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
170 </Property>
171 </Fragment>
172
173 <!-- Indicates whether the Visual Studio F# project system is installed -->
174 <Fragment>
175 <Property Id="VS11_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
176 <RegistrySearch Id="SearchForVSTS11FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#" Name="ProductDir" Type="raw" />
177 </Property>
178 </Fragment>
179
180 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
181 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
182 <!-- on the system. -->
183 <Fragment>
184 <Property Id="VS11WINEXPRESS_IDE" Secure="yes">
185 <ComponentSearch Id="SearchForVS11WinExpressIdeComponent" Guid="A7A5FD99-1DFE-4AA8-A563-4DF5E0DD89E1" Type="file">
186 <FileSearch Id="VS11WinExpressIde" Name="vswinexpress.exe" />
187 </ComponentSearch>
188 </Property>
189 </Fragment>
190 <!-- Custom action definition to run vswinexpress.exe /setup -->
191 <Fragment>
192 <CustomAction Id="VS11WinExpressSetup" Property="VS11WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
193 <PropertyRef Id="VS11WINEXPRESS_IDE" />
194 <InstallExecuteSequence>
195 <Custom Action="VS11WinExpressSetup" Before="InstallFinalize" Overridable="yes">VS11WINEXPRESS_IDE</Custom>
196 </InstallExecuteSequence>
197 </Fragment>
198 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
199 <Fragment>
200 <CustomAction Id="VS11WinExpressInstallVSTemplates" Property="VS11WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
201 <PropertyRef Id="VS11WINEXPRESS_IDE" />
202 <InstallExecuteSequence>
203 <Custom Action="VS11WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS11WINEXPRESS_IDE</Custom>
204 </InstallExecuteSequence>
205 </Fragment>
206</Wix>
diff --git a/src/wixlib/VS14.wxs b/src/wixlib/VS14.wxs
new file mode 100644
index 00000000..52db1562
--- /dev/null
+++ b/src/wixlib/VS14.wxs
@@ -0,0 +1,187 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS14_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS14DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS14ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS14_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS14DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS14ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS14_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS14ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw">
25 <DirectorySearch Id="VS14XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS14XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS14_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS14DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS14ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS14_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVS14BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS14_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS14RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS14DEVENV" Secure="yes">
54 <RegistrySearch Id="VS14DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS14Setup" Property="VS14DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS14DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS14Setup" Before="InstallFinalize" Overridable="yes">VS14DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS14InstallVSTemplates" Property="VS14DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS14DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS14InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS14DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# project system is installed as a part of -->
77 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
78 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
79 <!-- C# language tools were installed as a part of VS 14 setup. -->
80 <Fragment>
81 <Property Id="VS14_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
82 <RegistrySearch Id="SearchForVCS14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC#" Name="ProductDir" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
87 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
88 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
89 <!-- Basic language tools were installed as a part of VS 14 setup. -->
90 <Fragment>
91 <Property Id="VS14_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
92 <RegistrySearch Id="SearchForVB14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VB" Name="ProductDir" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- Indicates whether the Visual Web Developer 14 Express IDE component is installed. -->
97 <!-- If this property is set, that means Visual Web Developer 14 Express Edition is -->
98 <!-- installed on the system. -->
99 <Fragment>
100 <Property Id="VWD14EXPRESS_IDE" Secure="yes">
101 <RegistrySearch Id="VWD14ExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
102 </Property>
103 </Fragment>
104 <!-- Custom action definition to run vwdexpress.exe /setup -->
105 <Fragment>
106 <CustomAction Id="VWD14Setup" Property="VWD14EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
107 <PropertyRef Id="VWD14EXPRESS_IDE" />
108 <InstallExecuteSequence>
109 <Custom Action="VWD14Setup" Before="InstallFinalize" Overridable="yes">VWD14EXPRESS_IDE</Custom>
110 </InstallExecuteSequence>
111 </Fragment>
112 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
113 <Fragment>
114 <CustomAction Id="VWD14InstallVSTemplates" Property="VWD14EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
115 <PropertyRef Id="VWD14EXPRESS_IDE" />
116 <InstallExecuteSequence>
117 <Custom Action="VWD14InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD14EXPRESS_IDE</Custom>
118 </InstallExecuteSequence>
119 </Fragment>
120
121 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
122 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
123 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
124 <!-- Web Developer language tools were installed as a part of VS 14 setup. -->
125 <Fragment>
126 <Property Id="VS14_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
127 <ComponentSearch Id="SearchForVWD14ProjectSystemUnderVSSetup" Guid="274EB373-6B78-5EBD-8A6C-6D8094E58ECB" />
128 <ComponentSearch Id="SearchForVWD14ProjectSystemUnderVWDSetup" Guid="71EBDA4A-4A15-426F-95C4-4FC051FD7AA4" Type="directory" />
129 </Property>
130 </Fragment>
131
132 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
133 <!-- Visual Studio 14 standard or higher. If this property is set, that -->
134 <!-- means Visual Studio 14 standard or higher is installed and the Visual -->
135 <!-- C++ language tools were installed as a part of VS 14 setup. -->
136 <Fragment>
137 <Property Id="VS14_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
138 <RegistrySearch Id="SearchForVC14ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC" Name="ProductDir" Type="raw" />
139 </Property>
140 </Fragment>
141
142 <!-- Indicates whether the Visual Studio 14 Team Test project system is installed -->
143 <Fragment>
144 <Property Id="VS14_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
145 <RegistrySearch Id="SearchForVSTS14TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
146 </Property>
147 </Fragment>
148
149 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
150 <Fragment>
151 <Property Id="VS14_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
152 <RegistrySearch Id="SearchForVSTS14ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
153 </Property>
154 </Fragment>
155
156 <!-- Indicates whether the Visual Studio F# project system is installed -->
157 <Fragment>
158 <Property Id="VS14_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
159 <RegistrySearch Id="SearchForVSTS14FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\F#" Name="ProductDir" Type="raw" />
160 </Property>
161 </Fragment>
162
163 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
164 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
165 <!-- on the system. -->
166 <Fragment>
167 <Property Id="VS14WINEXPRESS_IDE" Secure="yes">
168 <RegistrySearch Id="VS14WinExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VSWinExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
169 </Property>
170 </Fragment>
171 <!-- Custom action definition to run vswinexpress.exe /setup -->
172 <Fragment>
173 <CustomAction Id="VS14WinExpressSetup" Property="VS14WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
174 <PropertyRef Id="VS14WINEXPRESS_IDE" />
175 <InstallExecuteSequence>
176 <Custom Action="VS14WinExpressSetup" Before="InstallFinalize" Overridable="yes">VS14WINEXPRESS_IDE</Custom>
177 </InstallExecuteSequence>
178 </Fragment>
179 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
180 <Fragment>
181 <CustomAction Id="VS14WinExpressInstallVSTemplates" Property="VS14WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
182 <PropertyRef Id="VS14WINEXPRESS_IDE" />
183 <InstallExecuteSequence>
184 <Custom Action="VS14WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS14WINEXPRESS_IDE</Custom>
185 </InstallExecuteSequence>
186 </Fragment>
187</Wix>
diff --git a/src/wixlib/VS2003.wxs b/src/wixlib/VS2003.wxs
new file mode 100644
index 00000000..10515b52
--- /dev/null
+++ b/src/wixlib/VS2003.wxs
@@ -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
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <!-- Visual Studio 2003 .NET -->
7 <Fragment>
8 <Property Id="VS2003DEVENV" Secure="yes">
9 <RegistrySearch Id="VS2003DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS" Name="EnvironmentPath" Type="raw" />
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <CustomAction Id="VS2003Setup" Property="VS2003DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
15 <PropertyRef Id="VS2003DEVENV" />
16
17 <InstallExecuteSequence>
18 <Custom Action="VS2003Setup" Before="InstallFinalize" Overridable="yes">VS2003DEVENV</Custom>
19 </InstallExecuteSequence>
20 </Fragment>
21
22 <!-- Indicates whether or not the J# redistributable package 1.1 is installed. -->
23 <Fragment>
24 <Property Id="JSHARP_REDIST_11_INSTALLED" Secure="yes">
25 <RegistrySearch Id="JSharpRedist11RegKey" Root="HKLM" Key="Software\Microsoft\Visual JSharp Setup\Redist\v1.1.4322" Name="Install" Type="raw" />
26 </Property>
27 </Fragment>
28</Wix>
diff --git a/src/wixlib/VS2005.wxs b/src/wixlib/VS2005.wxs
new file mode 100644
index 00000000..3aadf08c
--- /dev/null
+++ b/src/wixlib/VS2005.wxs
@@ -0,0 +1,370 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <!-- Visual Studio 2005 -->
7 <Fragment>
8 <Property Id="VS2005DEVENV" Secure="yes">
9 <RegistrySearch Id="VS2005DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS2005_ITEMTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS2005DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw">
16 <DirectorySearch Id="VS2005ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS2005_PROJECTTEMPLATES_DIR" Secure="yes">
23 <RegistrySearch Id="VS2005DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS" Name="EnvironmentPath" Type="raw">
24 <DirectorySearch Id="VS2005ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
25 </RegistrySearch>
26 </Property>
27 </Fragment>
28
29 <Fragment>
30 <Property Id="VS2005_SCHEMAS_DIR" Secure="yes">
31 <RegistrySearch Id="VS2005ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="8.0" Type="raw">
32 <DirectorySearch Id="VS2005XmlPathSearch" Path="Xml" Depth="1">
33 <DirectorySearch Id="VS2005XmlSchemasPathSearch" Path="Schemas" Depth="1" />
34 </DirectorySearch>
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <Property Id="VS2005PROJECTAGGREGATOR2" Secure="yes">
41 <ComponentSearch Id="VS2005ProjectAggregator2Search" Guid="B0BB80E0-5CCC-474E-A75E-05DC1AE073BC" />
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <CustomAction Id="VS2005Setup" Property="VS2005DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
47 <PropertyRef Id="VS2005DEVENV" />
48
49 <InstallExecuteSequence>
50 <Custom Action="VS2005Setup" Before="InstallFinalize" Overridable="yes">VS2005DEVENV</Custom>
51 </InstallExecuteSequence>
52 </Fragment>
53
54 <Fragment>
55 <CustomAction Id="VS2005InstallVSTemplates" Property="VS2005DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
56 <PropertyRef Id="VS2005DEVENV" />
57
58 <InstallExecuteSequence>
59 <Custom Action="VS2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2005DEVENV</Custom>
60 </InstallExecuteSequence>
61 </Fragment>
62
63 <!-- Location of the Visual Studio 2005 root installation directory. -->
64 <Fragment>
65 <Property Id="VS2005_ROOT_FOLDER" Secure="yes">
66 <RegistrySearch Id="SearchForVS2005RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="8.0" Type="raw" />
67 </Property>
68 </Fragment>
69
70 <!-- Indicates whether the Visual C# 2005 Express IDE component is installed. -->
71 <!-- If this property is set, that means Visual C# 2005 Express Edition is -->
72 <!-- installed on the system. -->
73 <Fragment>
74 <Property Id="VCSHARP2005EXPRESS_IDE" Secure="yes">
75 <ComponentSearch Id="SearchForVcsExpressIde2005Component" Guid="E8A67F23-21D0-4E7B-BBD3-54E2D505BED8" Type="file" >
76 <FileSearch Id="VcsExpressIde2005" Name="vcsexpress.exe"/>
77 </ComponentSearch>
78 </Property>
79 </Fragment>
80
81 <!-- Custom action definition to run vcsexpress.exe /setup -->
82 <Fragment>
83 <CustomAction Id="VCSHARP2005Setup" Property="VCSHARP2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
84 <PropertyRef Id="VCSHARP2005EXPRESS_IDE" />
85
86 <InstallExecuteSequence>
87 <Custom Action="VCSHARP2005Setup" Before="InstallFinalize" Overridable="yes">VCSHARP2005EXPRESS_IDE</Custom>
88 </InstallExecuteSequence>
89 </Fragment>
90
91 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
92 <Fragment>
93 <CustomAction Id="VCSHARP2005InstallVSTemplates" Property="VCSHARP2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
94 <PropertyRef Id="VCSHARP2005EXPRESS_IDE" />
95
96 <InstallExecuteSequence>
97 <Custom Action="VCSHARP2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VCSHARP2005EXPRESS_IDE</Custom>
98 </InstallExecuteSequence>
99 </Fragment>
100
101 <!-- Indicates whether the Visual C# project system is installed as a part of -->
102 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
103 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
104 <!-- C# language tools were installed as a part of VS 2005 setup. -->
105 <Fragment>
106 <Property Id="VS2005_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
107 <RegistrySearch Id="SearchForVCSProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
108 </Property>
109 </Fragment>
110
111 <!-- Indicates whether the Visual Basic 2005 Express IDE component is installed. -->
112 <!-- If this property is set, that means Visual Basic 2005 Express Edition is -->
113 <!-- installed on the system. -->
114 <Fragment>
115 <Property Id="VB2005EXPRESS_IDE" Secure="yes">
116 <ComponentSearch Id="SearchForVbExpressIde2005Component" Guid="FCDD3EF0-FFF4-4391-9467-AA48ADC7028F" Type="file">
117 <FileSearch Id="VbExpressIde2005" Name="vbexpress.exe"/>
118 </ComponentSearch>
119 </Property>
120 </Fragment>
121
122 <!-- Custom action definition to run vbexpress.exe /setup -->
123 <Fragment>
124 <CustomAction Id="VB2005Setup" Property="VB2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
125 <PropertyRef Id="VB2005EXPRESS_IDE" />
126
127 <InstallExecuteSequence>
128 <Custom Action="VB2005Setup" Before="InstallFinalize" Overridable="yes">VB2005EXPRESS_IDE</Custom>
129 </InstallExecuteSequence>
130 </Fragment>
131
132 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
133 <Fragment>
134 <CustomAction Id="VB2005InstallVSTemplates" Property="VB2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
135 <PropertyRef Id="VB2005EXPRESS_IDE" />
136
137 <InstallExecuteSequence>
138 <Custom Action="VB2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VB2005EXPRESS_IDE</Custom>
139 </InstallExecuteSequence>
140 </Fragment>
141
142 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
143 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
144 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
145 <!-- Basic language tools were installed as a part of VS 2005 setup. -->
146 <Fragment>
147 <Property Id="VS2005_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
148 <RegistrySearch Id="SearchForVBProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
149 </Property>
150 </Fragment>
151
152 <!-- Indicates whether the Visual Web Developer 2005 Express IDE component is installed. -->
153 <!-- If this property is set, that means Visual Web Developer 2005 Express Edition is -->
154 <!-- installed on the system. -->
155 <Fragment>
156 <Property Id="VWD2005EXPRESS_IDE" Secure="yes">
157 <ComponentSearch Id="SearchForVwdExpressIde2005Component" Guid="56B053EA-AEFA-490A-A537-5EA145574862" Type="file">
158 <FileSearch Id="VwdExpressIde2005" Name="vwdexpress.exe"/>
159 </ComponentSearch>
160 </Property>
161 </Fragment>
162
163 <!-- Custom action definition to run vwdexpress.exe /setup -->
164 <Fragment>
165 <CustomAction Id="VWD2005Setup" Property="VWD2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
166 <PropertyRef Id="VWD2005EXPRESS_IDE" />
167
168 <InstallExecuteSequence>
169 <Custom Action="VWD2005Setup" Before="InstallFinalize" Overridable="yes">VWD2005EXPRESS_IDE</Custom>
170 </InstallExecuteSequence>
171 </Fragment>
172
173 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
174 <Fragment>
175 <CustomAction Id="VWD2005InstallVSTemplates" Property="VWD2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
176 <PropertyRef Id="VWD2005EXPRESS_IDE" />
177
178 <InstallExecuteSequence>
179 <Custom Action="VWD2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD2005EXPRESS_IDE</Custom>
180 </InstallExecuteSequence>
181 </Fragment>
182
183 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
184 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
185 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
186 <!-- Web Developer language tools were installed as a part of VS 2005 setup. -->
187 <Fragment>
188 <Property Id="VS2005_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
189 <RegistrySearch Id="SearchForVWDProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
190 </Property>
191 </Fragment>
192
193 <!-- Indicates whether the Visual C++ 2005 Express IDE component is installed. -->
194 <!-- If this property is set, that means Visual C++ 2005 Express Edition is -->
195 <!-- installed on the system. -->
196 <Fragment>
197 <Property Id="VC2005EXPRESS_IDE" Secure="yes">
198 <ComponentSearch Id="SearchForVcExpressIde2005Component" Guid="83D8DFB7-73ED-4C83-9606-805F4CD7E1EE" Type="file">
199 <FileSearch Id="VcExpressIde2005" Name="vcexpress.exe"/>
200 </ComponentSearch>
201 </Property>
202 </Fragment>
203
204 <!-- Custom action definition to run vcexpress.exe /setup -->
205 <Fragment>
206 <CustomAction Id="VC2005Setup" Property="VC2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
207 <PropertyRef Id="VC2005EXPRESS_IDE" />
208
209 <InstallExecuteSequence>
210 <Custom Action="VC2005Setup" Before="InstallFinalize" Overridable="yes">VC2005EXPRESS_IDE</Custom>
211 </InstallExecuteSequence>
212 </Fragment>
213
214 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
215 <Fragment>
216 <CustomAction Id="VC2005InstallVSTemplates" Property="VC2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
217 <PropertyRef Id="VC2005EXPRESS_IDE" />
218
219 <InstallExecuteSequence>
220 <Custom Action="VC2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VC2005EXPRESS_IDE</Custom>
221 </InstallExecuteSequence>
222 </Fragment>
223
224 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
225 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
226 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
227 <!-- C++ language tools were installed as a part of VS 2005 setup. -->
228 <Fragment>
229 <Property Id="VS2005_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
230 <RegistrySearch Id="SearchForVCProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
231 </Property>
232 </Fragment>
233
234 <!-- Indicates whether the Visual J# 2005 Express IDE component is installed. -->
235 <!-- If this property is set, that means Visual J# 2005 Express Edition is -->
236 <!-- installed on the system. -->
237 <Fragment>
238 <Property Id="VJSHARP2005EXPRESS_IDE" Secure="yes">
239 <ComponentSearch Id="SearchForVjsExpressIde2005Component" Guid="7077FCC9-C3E4-437E-83ED-D5D7D8D9BB6C" Type="file">
240 <FileSearch Id="VjsExpressIde2005" Name="vjsexpress.exe"/>
241 </ComponentSearch>
242 </Property>
243 </Fragment>
244
245 <!-- Custom action definition to run vjsexpress.exe /setup -->
246 <Fragment>
247 <CustomAction Id="VJSHARP2005Setup" Property="VJSHARP2005EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
248 <PropertyRef Id="VJSHARP2005EXPRESS_IDE" />
249
250 <InstallExecuteSequence>
251 <Custom Action="VJSHARP2005Setup" Before="InstallFinalize" Overridable="yes">VJSHARP2005EXPRESS_IDE</Custom>
252 </InstallExecuteSequence>
253 </Fragment>
254
255 <!-- Custom action definition to run vjsexpress.exe /InstallVSTemplates -->
256 <Fragment>
257 <CustomAction Id="VJSHARP2005InstallVSTemplates" Property="VJSHARP2005EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
258 <PropertyRef Id="VJSHARP2005EXPRESS_IDE" />
259
260 <InstallExecuteSequence>
261 <Custom Action="VJSHARP2005InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VJSHARP2005EXPRESS_IDE</Custom>
262 </InstallExecuteSequence>
263 </Fragment>
264
265 <!-- Indicates whether the Visual J# project system is installed as a part of -->
266 <!-- Visual Studio 2005 standard or higher. If this property is set, that -->
267 <!-- means Visual Studio 2005 standard or higher is installed and the Visual -->
268 <!-- J# language tools were installed as a part of VS 2005 setup. -->
269 <Fragment>
270 <Property Id="VS2005_IDE_VJSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
271 <RegistrySearch Id="SearchForVJSProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}" Name="DefaultProjectExtension" Type="raw" />
272 </Property>
273 </Fragment>
274
275 <!-- Indicates whether the Visual Studio Code Name "Orcas" Development Tools -->
276 <!-- for .NET Framework 3.0 add-in is installed for Visual Studio 2005. -->
277 <Fragment>
278 <Property Id="VSEXTENSIONS_FOR_NETFX30_INSTALLED" Secure="yes">
279 <ComponentSearch Id="SearchForVSExtensionsForNetfx30RootComponent" Guid="72616A39-A8E6-4187-BC32-0950598B4499" Type="file" />
280 </Property>
281 </Fragment>
282
283 <!-- Indicates whether the Visual Studio Team Test project system is installed -->
284 <Fragment>
285 <Property Id="VS2005_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
286 <RegistrySearch Id="SearchForVSTSTestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
287 </Property>
288 </Fragment>
289
290 <!-- Indicates whether the Web Application Project is installed as a part of -->
291 <!-- Visual Studio 2005 standard or higher. This project type is installed -->
292 <!-- as a standalone package and as a part of Visual Studio 2005 SP1. -->
293 <Fragment>
294 <Property Id="VS2005_WAP_PROJECT_INSTALLED" Secure="yes">
295 <RegistrySearch Id="SearchForVS2005WAPProject" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{349c5850-65df-11da-9384-00065b846f21}" Name="ProductName" Type="raw" />
296 </Property>
297 </Fragment>
298
299 <!-- Indicates the service pack level for Visual Studio 2005 standard edition -->
300 <!-- and higher. -->
301 <Fragment>
302 <Property Id="VS2005_SP_LEVEL" Secure="yes">
303 <RegistrySearch Id="SearchForVS2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VS\Servicing\8.0" Name="SP" Type="raw" />
304 </Property>
305 </Fragment>
306
307 <!-- Indicates the service pack level for Visual Basic 2005 Express Edition. -->
308 <Fragment>
309 <Property Id="VB2005EXPRESS_SP_LEVEL" Secure="yes">
310 <RegistrySearch Id="SearchForVBExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VB\Servicing\8.0" Name="SP" Type="raw" />
311 </Property>
312 </Fragment>
313
314 <!-- Indicates the service pack level for Visual C++ 2005 Express Edition. -->
315 <Fragment>
316 <Property Id="VC2005EXPRESS_SP_LEVEL" Secure="yes">
317 <RegistrySearch Id="SearchForVCExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VC\Servicing\8.0" Name="SP" Type="raw" />
318 </Property>
319 </Fragment>
320
321 <!-- Indicates the service pack level for Visual C# 2005 Express Edition. -->
322 <Fragment>
323 <Property Id="VCSHARP2005EXPRESS_SP_LEVEL" Secure="yes">
324 <RegistrySearch Id="SearchForVCSharpExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VCS\Servicing\8.0" Name="SP" Type="raw" />
325 </Property>
326 </Fragment>
327
328 <!-- Indicates the service pack level for Visual J# 2005 Express Edition. -->
329 <Fragment>
330 <Property Id="VJSHARP2005EXPRESS_SP_LEVEL" Secure="yes">
331 <RegistrySearch Id="SearchForVJSharpExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VJS\Servicing\8.0" Name="SP" Type="raw" />
332 </Property>
333 </Fragment>
334
335 <!-- Indicates the service pack level for Visual Web Developer 2005 Express -->
336 <!-- Edition. -->
337 <Fragment>
338 <Property Id="VWD2005EXPRESS_SP_LEVEL" Secure="yes">
339 <RegistrySearch Id="SearchForVWDExp2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VNS\Servicing\8.0" Name="SP" Type="raw" />
340 </Property>
341 </Fragment>
342
343 <!-- Indicates the service pack level for Visual Studio 2005 Team Foundation. -->
344 <Fragment>
345 <Property Id="VSTF2005_SP_LEVEL" Secure="yes">
346 <RegistrySearch Id="SearchForVSTF2005SP1" Root="HKLM" Key="SOFTWARE\Microsoft\DevDiv\VSTF\Servicing\8.0" Name="SP" Type="raw" />
347 </Property>
348 </Fragment>
349
350 <!-- Indicates whether or not the Document Explorer 2005 runtime components are installed. -->
351 <Fragment>
352 <Property Id="DEXPLORE_2005_INSTALLED" Secure="yes">
353 <RegistrySearch Id="Dexplore2005RegKey" Root="HKLM" Key="Software\Microsoft\DExplore\v2.0.50727\1033" Name="Install" Type="raw" />
354 </Property>
355 </Fragment>
356
357 <!-- Indicates whether or not the J# redistributable package 2.0 first edition is installed. -->
358 <Fragment>
359 <Property Id="JSHARP_REDIST_20_INSTALLED" Secure="yes">
360 <RegistrySearch Id="JSharpRedist20RegKey" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual J# 2.0 Redistributable Package" Name="UninstallPath" Type="raw" />
361 </Property>
362 </Fragment>
363
364 <!-- Indicates whether or not the J# redistributable package 2.0 second edition is installed. -->
365 <Fragment>
366 <Property Id="JSHARP_REDIST_20SE_INSTALLED" Secure="yes">
367 <RegistrySearch Id="JSharpRedist20SERegKey" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual J# 2.0 Redistributable Package - SE" Name="UninstallPath" Type="raw" />
368 </Property>
369 </Fragment>
370</Wix>
diff --git a/src/wixlib/VS2008.wxs b/src/wixlib/VS2008.wxs
new file mode 100644
index 00000000..096221c2
--- /dev/null
+++ b/src/wixlib/VS2008.wxs
@@ -0,0 +1,300 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <!-- Visual Studio 2008 -->
7 <Fragment>
8 <Property Id="VS90DEVENV" Secure="yes">
9 <RegistrySearch Id="VS90DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
10 </Property>
11 </Fragment>
12
13 <Fragment>
14 <Property Id="VS90_ITEMTEMPLATES_DIR" Secure="yes">
15 <RegistrySearch Id="VS90DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw">
16 <DirectorySearch Id="VS90ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
17 </RegistrySearch>
18 </Property>
19 </Fragment>
20
21 <Fragment>
22 <Property Id="VS90_PROJECTTEMPLATES_DIR" Secure="yes">
23 <RegistrySearch Id="VS90DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw">
24 <DirectorySearch Id="VS90ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
25 </RegistrySearch>
26 </Property>
27 </Fragment>
28
29 <Fragment>
30 <Property Id="VS90_SCHEMAS_DIR" Secure="yes">
31 <RegistrySearch Id="VS90ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="9.0" Type="raw">
32 <DirectorySearch Id="VS90XmlPathSearch" Path="Xml" Depth="1">
33 <DirectorySearch Id="VS90XmlSchemasPathSearch" Path="Schemas" Depth="1" />
34 </DirectorySearch>
35 </RegistrySearch>
36 </Property>
37 </Fragment>
38
39 <Fragment>
40 <CustomAction Id="VS90Setup" Property="VS90DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
41 <PropertyRef Id="VS90DEVENV" />
42
43 <InstallExecuteSequence>
44 <Custom Action="VS90Setup" Before="InstallFinalize" Overridable="yes">VS90DEVENV</Custom>
45 </InstallExecuteSequence>
46 </Fragment>
47
48 <Fragment>
49 <CustomAction Id="VS90InstallVSTemplates" Property="VS90DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
50 <PropertyRef Id="VS90DEVENV" />
51
52 <InstallExecuteSequence>
53 <Custom Action="VS90InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS90DEVENV</Custom>
54 </InstallExecuteSequence>
55 </Fragment>
56
57 <!-- Location of the Visual Studio 2008 root installation directory. -->
58 <Fragment>
59 <Property Id="VS90_ROOT_FOLDER" Secure="yes">
60 <RegistrySearch Id="SearchForVS90RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="9.0" Type="raw" />
61 </Property>
62 </Fragment>
63
64 <!-- Indicates whether the Visual C# 2008 Express IDE component is installed. -->
65 <!-- If this property is set, that means Visual C# 2008 Express Edition is -->
66 <!-- installed on the system. -->
67 <Fragment>
68 <Property Id="VCSHARP90EXPRESS_IDE" Secure="yes">
69 <ComponentSearch Id="SearchForVcsExpressIde90Component" Guid="EF0BC34E-6AAE-47C0-8FEC-7E00C2638209" Type="file" >
70 <FileSearch Id="VcsExpressIde90" Name="vcsexpress.exe"/>
71 </ComponentSearch>
72 </Property>
73 </Fragment>
74
75 <!-- Custom action definition to run vcsexpress.exe /setup -->
76 <Fragment>
77 <CustomAction Id="VCSHARP90Setup" Property="VCSHARP90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
78 <PropertyRef Id="VCSHARP90EXPRESS_IDE" />
79
80 <InstallExecuteSequence>
81 <Custom Action="VCSHARP90Setup" Before="InstallFinalize" Overridable="yes">VCSHARP90EXPRESS_IDE</Custom>
82 </InstallExecuteSequence>
83 </Fragment>
84
85 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
86 <Fragment>
87 <CustomAction Id="VCSHARP90InstallVSTemplates" Property="VCSHARP90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
88 <PropertyRef Id="VCSHARP90EXPRESS_IDE" />
89
90 <InstallExecuteSequence>
91 <Custom Action="VCSHARP90InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VCSHARP90EXPRESS_IDE</Custom>
92 </InstallExecuteSequence>
93 </Fragment>
94
95 <!-- Indicates whether the Visual C# project system is installed as a part of -->
96 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
97 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
98 <!-- C# language tools were installed as a part of VS 2008 setup. -->
99 <Fragment>
100 <Property Id="VS90_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
101 <RegistrySearch Id="SearchForVCS90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
102 </Property>
103 </Fragment>
104
105 <!-- Indicates whether the Visual Basic 2008 Express IDE component is installed. -->
106 <!-- If this property is set, that means Visual Basic 2008 Express Edition is -->
107 <!-- installed on the system. -->
108 <Fragment>
109 <Property Id="VB90EXPRESS_IDE" Secure="yes">
110 <ComponentSearch Id="SearchForVbExpressIde90Component" Guid="010A50C6-8604-4BA2-8CA1-4EC3A5B861B2" Type="file">
111 <FileSearch Id="VbExpressIde90" Name="vbexpress.exe"/>
112 </ComponentSearch>
113 </Property>
114 </Fragment>
115
116 <!-- Custom action definition to run vbexpress.exe /setup -->
117 <Fragment>
118 <CustomAction Id="VB90Setup" Property="VB90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
119 <PropertyRef Id="VB90EXPRESS_IDE" />
120
121 <InstallExecuteSequence>
122 <Custom Action="VB90Setup" Before="InstallFinalize" Overridable="yes">VB90EXPRESS_IDE</Custom>
123 </InstallExecuteSequence>
124 </Fragment>
125
126 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
127 <Fragment>
128 <CustomAction Id="VB90InstallVSTemplates" Property="VB90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
129 <PropertyRef Id="VB90EXPRESS_IDE" />
130
131 <InstallExecuteSequence>
132 <Custom Action="VB90InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VB90EXPRESS_IDE</Custom>
133 </InstallExecuteSequence>
134 </Fragment>
135
136 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
137 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
138 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
139 <!-- Basic language tools were installed as a part of VS 2008 setup. -->
140 <Fragment>
141 <Property Id="VS90_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
142 <RegistrySearch Id="SearchForVB90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
143 </Property>
144 </Fragment>
145
146 <!-- Indicates whether the Visual Web Developer 2008 Express IDE component is installed. -->
147 <!-- If this property is set, that means Visual Web Developer 2008 Express Edition is -->
148 <!-- installed on the system. -->
149 <Fragment>
150 <Property Id="VWD90EXPRESS_IDE" Secure="yes">
151 <ComponentSearch Id="SearchForVwdExpressIde90Component" Guid="C7F516CB-CB5C-41B7-9CB4-33927C4DD206" Type="file">
152 <FileSearch Id="VwdExpressIde90" Name="vwdexpress.exe"/>
153 </ComponentSearch>
154 </Property>
155 </Fragment>
156
157 <!-- Custom action definition to run vwdexpress.exe /setup -->
158 <Fragment>
159 <CustomAction Id="VWD90Setup" Property="VWD90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
160 <PropertyRef Id="VWD90EXPRESS_IDE" />
161
162 <InstallExecuteSequence>
163 <Custom Action="VWD90Setup" Before="InstallFinalize" Overridable="yes">VWD90EXPRESS_IDE</Custom>
164 </InstallExecuteSequence>
165 </Fragment>
166
167 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
168 <Fragment>
169 <CustomAction Id="VWD90InstallVSTemplates" Property="VWD90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
170 <PropertyRef Id="VWD90EXPRESS_IDE" />
171
172 <InstallExecuteSequence>
173 <Custom Action="VWD90InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD90EXPRESS_IDE</Custom>
174 </InstallExecuteSequence>
175 </Fragment>
176
177 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
178 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
179 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
180 <!-- Web Developer language tools were installed as a part of VS 2008 setup. -->
181 <Fragment>
182 <Property Id="VS90_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
183 <RegistrySearch Id="SearchForVWD90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
184 </Property>
185 </Fragment>
186
187 <!-- Indicates whether the Visual C++ 2008 Express IDE component is installed. -->
188 <!-- If this property is set, that means Visual C++ 2008 Express Edition is -->
189 <!-- installed on the system. -->
190 <Fragment>
191 <Property Id="VC90EXPRESS_IDE" Secure="yes">
192 <ComponentSearch Id="SearchForVcExpressIde90Component" Guid="147EB31D-8042-4E8F-A3EC-D32C04ED652A" Type="file">
193 <FileSearch Id="VcExpressIde90" Name="vcexpress.exe"/>
194 </ComponentSearch>
195 </Property>
196 </Fragment>
197
198 <!-- Custom action definition to run vcexpress.exe /setup -->
199 <Fragment>
200 <CustomAction Id="VC90Setup" Property="VC90EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
201 <PropertyRef Id="VC90EXPRESS_IDE" />
202
203 <InstallExecuteSequence>
204 <Custom Action="VC90Setup" Before="InstallFinalize" Overridable="yes">VC90EXPRESS_IDE</Custom>
205 </InstallExecuteSequence>
206 </Fragment>
207
208 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
209 <Fragment>
210 <CustomAction Id="VC90InstallVSTemplates" Property="VC90EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
211 <PropertyRef Id="VC90EXPRESS_IDE" />
212
213 <InstallExecuteSequence>
214 <Custom Action="VC90InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VC90EXPRESS_IDE</Custom>
215 </InstallExecuteSequence>
216 </Fragment>
217
218 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
219 <!-- Visual Studio 2008 standard or higher. If this property is set, that -->
220 <!-- means Visual Studio 2008 standard or higher is installed and the Visual -->
221 <!-- C++ language tools were installed as a part of VS 2008 setup. -->
222 <Fragment>
223 <Property Id="VS90_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
224 <RegistrySearch Id="SearchForVC90ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
225 </Property>
226 </Fragment>
227
228 <!-- Indicates whether the Visual Studio Team Test project system is installed -->
229 <Fragment>
230 <Property Id="VS90_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
231 <RegistrySearch Id="SearchForVSTS90TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
232 </Property>
233 </Fragment>
234
235 <!-- Location of the Visual Studio 2008 bootstrapper package install location -->
236 <Fragment>
237 <Property Id="VS90_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
238 <RegistrySearch Id="SearchForVs90BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\3.5" Name="Path" Type="raw" />
239 </Property>
240 </Fragment>
241
242 <!-- Indicates whether the Visual Studio 2008 SP1 version of devenv.exe is -->
243 <!-- installed on the system. -->
244 <Fragment>
245 <Property Id="VS90_SP1" Secure="yes">
246 <RegistrySearch Id="VS90DevEnvDirectorySearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
247 <DirectorySearch Id="VS90DevEnvFilePathSearch">
248 <FileSearch Id="VS90DevEnvFileVersionSearch" Name="devenv.exe" MinVersion="9.0.30729.0"/>
249 </DirectorySearch>
250 </RegistrySearch>
251 </Property>
252 </Fragment>
253
254 <!-- Indicates whether the Visual Studio 2008 SP1 version of vbexpress.exe is -->
255 <!-- installed on the system. -->
256 <Fragment>
257 <Property Id="VB90EXPRESS_SP1" Secure="yes">
258 <ComponentSearch Id="SearchForVbExpressIde90Component" Guid="010A50C6-8604-4BA2-8CA1-4EC3A5B861B2" Type="file">
259 <FileSearch Id="VB90ExpressFileVersionSearch" Name="vbexpress.exe" MinVersion="9.0.30729.0"/>
260 </ComponentSearch>
261 </Property>
262 </Fragment>
263
264 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcexpress.exe is -->
265 <!-- installed on the system. -->
266 <Fragment>
267 <Property Id="VC90EXPRESS_SP1" Secure="yes">
268 <ComponentSearch Id="SearchForVcExpressIde90Component" Guid="147EB31D-8042-4E8F-A3EC-D32C04ED652A" Type="file">
269 <FileSearch Id="VC90ExpressFileVersionSearch" Name="vcexpress.exe" MinVersion="9.0.30729.0"/>
270 </ComponentSearch>
271 </Property>
272 </Fragment>
273
274 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcsexpress.exe is -->
275 <!-- installed on the system. -->
276 <Fragment>
277 <Property Id="VCS90EXPRESS_SP1" Secure="yes">
278 <ComponentSearch Id="SearchForVcsExpressIde90Component" Guid="EF0BC34E-6AAE-47C0-8FEC-7E00C2638209" Type="file" >
279 <FileSearch Id="VCS90ExpressFileVersionSearch" Name="vcsexpress.exe" MinVersion="9.0.30729.0"/>
280 </ComponentSearch>
281 </Property>
282 </Fragment>
283
284 <!-- Indicates whether the Visual Studio 2008 SP1 version of vcsexpress.exe is -->
285 <!-- installed on the system. -->
286 <Fragment>
287 <Property Id="VWD90EXPRESS_SP1" Secure="yes">
288 <ComponentSearch Id="SearchForVwdExpressIde90Component" Guid="C7F516CB-CB5C-41B7-9CB4-33927C4DD206" Type="file">
289 <FileSearch Id="VWD90ExpressFileVersionSearch" Name="vwdexpress.exe" MinVersion="9.0.30729.0"/>
290 </ComponentSearch>
291 </Property>
292 </Fragment>
293
294 <!-- Indicates whether or not the Document Explorer 2008 runtime components are installed. -->
295 <Fragment>
296 <Property Id="DEXPLORE_2008_INSTALLED" Secure="yes">
297 <RegistrySearch Id="Dexplore2008RegKey" Root="HKLM" Key="Software\Microsoft\DExplore\v9.0.21022\1033" Name="Install" Type="raw" />
298 </Property>
299 </Fragment>
300</Wix>
diff --git a/src/wixlib/VS2010.wxs b/src/wixlib/VS2010.wxs
new file mode 100644
index 00000000..d0d899cc
--- /dev/null
+++ b/src/wixlib/VS2010.wxs
@@ -0,0 +1,313 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2010_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS2010DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS2010ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS2010_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS2010DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS2010ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2010_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS2010ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="10.0" Type="raw">
25 <DirectorySearch Id="VS2010XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS2010XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS2010_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS2010DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS2010ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS2010_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVs2010BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2010_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS2010RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="10.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS2010DEVENV" Secure="yes">
54 <RegistrySearch Id="VS2010DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS2010Setup" Property="VS2010DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS2010DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS2010Setup" Before="InstallFinalize" Overridable="yes">VS2010DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS2010InstallVSTemplates" Property="VS2010DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS2010DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2010DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# 2010 Express IDE component is installed. -->
77 <!-- If this property is set, that means Visual C# 2010 Express Edition is -->
78 <!-- installed on the system. -->
79 <Fragment>
80 <Property Id="VCSHARP2010EXPRESS_IDE" Secure="yes">
81 <ComponentSearch Id="SearchForVcsExpressIde2010Component" Guid="A4945167-D8A4-4B10-9B78-99C2CDC243EC" Type="file" >
82 <FileSearch Id="VcsExpressIde2010" Name="vcsexpress.exe"/>
83 </ComponentSearch>
84 </Property>
85 </Fragment>
86
87 <!-- Custom action definition to run vcsexpress.exe /setup -->
88 <Fragment>
89 <CustomAction Id="VCSHARP2010Setup" Property="VCSHARP2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
90 <PropertyRef Id="VCSHARP2010EXPRESS_IDE" />
91
92 <InstallExecuteSequence>
93 <Custom Action="VCSHARP2010Setup" Before="InstallFinalize" Overridable="yes">VCSHARP2010EXPRESS_IDE</Custom>
94 </InstallExecuteSequence>
95 </Fragment>
96
97 <!-- Custom action definition to run vcsexpress.exe /InstallVSTemplates -->
98 <Fragment>
99 <CustomAction Id="VCSHARP2010InstallVSTemplates" Property="VCSHARP2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
100 <PropertyRef Id="VCSHARP2010EXPRESS_IDE" />
101
102 <InstallExecuteSequence>
103 <Custom Action="VCSHARP2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VCSHARP2010EXPRESS_IDE</Custom>
104 </InstallExecuteSequence>
105 </Fragment>
106
107 <!-- Indicates whether the Visual C# project system is installed as a part of -->
108 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
109 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
110 <!-- C# language tools were installed as a part of VS 2010 setup. -->
111 <Fragment>
112 <Property Id="VS2010_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
113 <RegistrySearch Id="SearchForVCS2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Name="DefaultProjectExtension" Type="raw" />
114 </Property>
115 </Fragment>
116
117 <!-- Indicates whether the Visual Basic 2010 Express IDE component is installed. -->
118 <!-- If this property is set, that means Visual Basic 2010 Express Edition is -->
119 <!-- installed on the system. -->
120 <Fragment>
121 <Property Id="VB2010EXPRESS_IDE" Secure="yes">
122 <ComponentSearch Id="SearchForVbExpressIde2010Component" Guid="3EDEF607-9E3A-4A64-BFE1-104979CF2899" Type="file">
123 <FileSearch Id="VbExpressIde2010" Name="vbexpress.exe"/>
124 </ComponentSearch>
125 </Property>
126 </Fragment>
127
128 <!-- Custom action definition to run vbexpress.exe /setup -->
129 <Fragment>
130 <CustomAction Id="VB2010Setup" Property="VB2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
131 <PropertyRef Id="VB2010EXPRESS_IDE" />
132
133 <InstallExecuteSequence>
134 <Custom Action="VB2010Setup" Before="InstallFinalize" Overridable="yes">VB2010EXPRESS_IDE</Custom>
135 </InstallExecuteSequence>
136 </Fragment>
137
138 <!-- Custom action definition to run vbexpress.exe /InstallVSTemplates -->
139 <Fragment>
140 <CustomAction Id="VB2010InstallVSTemplates" Property="VB2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
141 <PropertyRef Id="VB2010EXPRESS_IDE" />
142
143 <InstallExecuteSequence>
144 <Custom Action="VB2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VB2010EXPRESS_IDE</Custom>
145 </InstallExecuteSequence>
146 </Fragment>
147
148 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
149 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
150 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
151 <!-- Basic language tools were installed as a part of VS 2010 setup. -->
152 <Fragment>
153 <Property Id="VS2010_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
154 <RegistrySearch Id="SearchForVB2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{F184B08F-C81C-45f6-A57F-5ABD9991F28F}" Name="DefaultProjectExtension" Type="raw" />
155 </Property>
156 </Fragment>
157
158 <!-- Indicates whether the Visual Web Developer 2010 Express IDE component is installed. -->
159 <!-- If this property is set, that means Visual Web Developer 2010 Express Edition is -->
160 <!-- installed on the system. -->
161 <Fragment>
162 <Property Id="VWD2010EXPRESS_IDE" Secure="yes">
163 <ComponentSearch Id="SearchForVwdExpressIde2010Component" Guid="771B6CF7-C8D2-4D85-BACD-ED01600256DC" Type="file">
164 <FileSearch Id="VwdExpressIde2010" Name="vwdexpress.exe"/>
165 </ComponentSearch>
166 </Property>
167 </Fragment>
168
169 <!-- Custom action definition to run vwdexpress.exe /setup -->
170 <Fragment>
171 <CustomAction Id="VWD2010Setup" Property="VWD2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
172 <PropertyRef Id="VWD2010EXPRESS_IDE" />
173
174 <InstallExecuteSequence>
175 <Custom Action="VWD2010Setup" Before="InstallFinalize" Overridable="yes">VWD2010EXPRESS_IDE</Custom>
176 </InstallExecuteSequence>
177 </Fragment>
178
179 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
180 <Fragment>
181 <CustomAction Id="VWD2010InstallVSTemplates" Property="VWD2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
182 <PropertyRef Id="VWD2010EXPRESS_IDE" />
183
184 <InstallExecuteSequence>
185 <Custom Action="VWD2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD2010EXPRESS_IDE</Custom>
186 </InstallExecuteSequence>
187 </Fragment>
188
189 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
190 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
191 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
192 <!-- Web Developer language tools were installed as a part of VS 2010 setup. -->
193 <Fragment>
194 <Property Id="VS2010_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
195 <RegistrySearch Id="SearchForVWD2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}" Name="DefaultProjectExtension" Type="raw" />
196 </Property>
197 </Fragment>
198
199 <!-- Indicates whether the Visual C++ 2010 Express IDE component is installed. -->
200 <!-- If this property is set, that means Visual C++ 2010 Express Edition is -->
201 <!-- installed on the system. -->
202 <Fragment>
203 <Property Id="VC2010EXPRESS_IDE" Secure="yes">
204 <ComponentSearch Id="SearchForVcExpressIde2010Component" Guid="B455E8D3-90CB-47F6-AB7B-9B31E5DE6266" Type="file">
205 <FileSearch Id="VcExpressIde2010" Name="vcexpress.exe"/>
206 </ComponentSearch>
207 </Property>
208 </Fragment>
209
210 <!-- Custom action definition to run vcexpress.exe /setup -->
211 <Fragment>
212 <CustomAction Id="VC2010Setup" Property="VC2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
213 <PropertyRef Id="VC2010EXPRESS_IDE" />
214
215 <InstallExecuteSequence>
216 <Custom Action="VC2010Setup" Before="InstallFinalize" Overridable="yes">VC2010EXPRESS_IDE</Custom>
217 </InstallExecuteSequence>
218 </Fragment>
219
220 <!-- Custom action definition to run vcexpress.exe /InstallVSTemplates -->
221 <Fragment>
222 <CustomAction Id="VC2010InstallVSTemplates" Property="VC2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
223 <PropertyRef Id="VC2010EXPRESS_IDE" />
224
225 <InstallExecuteSequence>
226 <Custom Action="VC2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VC2010EXPRESS_IDE</Custom>
227 </InstallExecuteSequence>
228 </Fragment>
229
230 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
231 <!-- Visual Studio 2010 standard or higher. If this property is set, that -->
232 <!-- means Visual Studio 2010 standard or higher is installed and the Visual -->
233 <!-- C++ language tools were installed as a part of VS 2010 setup. -->
234 <Fragment>
235 <Property Id="VS2010_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
236 <RegistrySearch Id="SearchForVC2010ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" Name="DefaultProjectExtension" Type="raw" />
237 </Property>
238 </Fragment>
239
240 <!-- Indicates whether the Visual Studio 2010 Express for Windows Phone IDE component is -->
241 <!-- installed. If this property is set, that means Visual Studio 2010 Express for -->
242 <!-- Windows Phone is installed on the system. -->
243 <Fragment>
244 <Property Id="VPD2010EXPRESS_IDE" Secure="yes">
245 <ComponentSearch Id="SearchForVpdExpressIde2010Component" Guid="80C81DB2-E95B-4C03-A559-C664E8411DDF" Type="file">
246 <FileSearch Id="VpdExpressIde2010" Name="vpdexpress.exe"/>
247 </ComponentSearch>
248 </Property>
249 </Fragment>
250
251 <!-- Custom action definition to run vpdexpress.exe /setup -->
252 <Fragment>
253 <CustomAction Id="VPD2010Setup" Property="VPD2010EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
254 <PropertyRef Id="VPD2010EXPRESS_IDE" />
255
256 <InstallExecuteSequence>
257 <Custom Action="VPD2010Setup" Before="InstallFinalize" Overridable="yes">VPD2010EXPRESS_IDE</Custom>
258 </InstallExecuteSequence>
259 </Fragment>
260
261 <!-- Custom action definition to run vpdexpress.exe /InstallVSTemplates -->
262 <Fragment>
263 <CustomAction Id="VPD2010InstallVSTemplates" Property="VPD2010EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
264 <PropertyRef Id="VPD2010EXPRESS_IDE" />
265
266 <InstallExecuteSequence>
267 <Custom Action="VPD2010InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VPD2010EXPRESS_IDE</Custom>
268 </InstallExecuteSequence>
269 </Fragment>
270
271 <!-- Indicates whether the Visual Studio 2010 Team Test project system is installed -->
272 <Fragment>
273 <Property Id="VS2010_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
274 <RegistrySearch Id="SearchForVSTS2010TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
275 </Property>
276 </Fragment>
277
278 <!-- Indicates whether the Visual Studio 2010 Database project system is installed -->
279 <Fragment>
280 <Property Id="VS2010_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
281 <RegistrySearch Id="SearchForVSTS2010DBSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{C8D11400-126E-41CD-887F-60BD40844F9E}" Name="Package" Type="raw" />
282 </Property>
283 </Fragment>
284
285 <!-- Indicates whether the Visual Studio 2010 Deployment project system (setup project) is installed -->
286 <Fragment>
287 <Property Id="VS2010_IDE_VSD_PROJECTSYSTEM_INSTALLED" Secure="yes">
288 <RegistrySearch Id="SearchForVSTS2010VSDSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{54435603-DBB4-11D2-8724-00A0C9A8B90C}" Name="Package" Type="raw" />
289 </Property>
290 </Fragment>
291
292 <!-- Indicates whether the WiX project system is installed for VS2010 -->
293 <Fragment>
294 <Property Id="VS2010_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
295 <!-- Component search for the .pkgdef file for VS2010 -->
296 <ComponentSearch Id="SearchForVS2010WixSystemUnderVSSetup" Guid="3C5BA30B-0713-5E28-8EEA-171E7A5E4864" Type="file" />
297 </Property>
298 </Fragment>
299
300 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
301 <Fragment>
302 <Property Id="VS2010_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
303 <RegistrySearch Id="SearchForVSTS2010ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
304 </Property>
305 </Fragment>
306
307 <!-- Indicates whether the Visual Studio F# project system is installed -->
308 <Fragment>
309 <Property Id="VS2010_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
310 <RegistrySearch Id="SearchForVSTS2010FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Projects\{f2a71f9b-5d33-465a-a702-920d77279786}" Name="Package" Type="raw" />
311 </Property>
312 </Fragment>
313</Wix>
diff --git a/src/wixlib/VS2012.wxs b/src/wixlib/VS2012.wxs
new file mode 100644
index 00000000..c4baa2c9
--- /dev/null
+++ b/src/wixlib/VS2012.wxs
@@ -0,0 +1,256 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2012_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS2012DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS2012ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS2012_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS2012DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS2012ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2012_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS2012ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw">
25 <DirectorySearch Id="VS2012XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS2012XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS2012_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS2012DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS2012ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS2012_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVs2012BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2012_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS2012RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS2012DEVENV" Secure="yes">
54 <RegistrySearch Id="VS2012DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS2012Setup" Property="VS2012DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS2012DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS2012Setup" Before="InstallFinalize" Overridable="yes">VS2012DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS2012InstallVSTemplates" Property="VS2012DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS2012DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2012DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# project system is installed as a part of -->
77 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
78 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
79 <!-- C# language tools were installed as a part of VS 2012 setup. -->
80 <Fragment>
81 <Property Id="VS2012_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
82 <RegistrySearch Id="SearchForVCS2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC#" Name="ProductDir" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
87 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
88 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
89 <!-- Basic language tools were installed as a part of VS 2012 setup. -->
90 <Fragment>
91 <Property Id="VS2012_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
92 <RegistrySearch Id="SearchForVB2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VB" Name="ProductDir" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- Indicates whether the Visual Web Developer 2012 Express IDE component is installed. -->
97 <!-- If this property is set, that means Visual Web Developer 2012 Express Edition is -->
98 <!-- installed on the system. -->
99 <Fragment>
100 <Property Id="VWD2012EXPRESS_IDE" Secure="yes">
101 <ComponentSearch Id="SearchForVwdExpressIde2012Component" Guid="92A0CBA0-BF39-422D-87FA-AB64564CD136" Type="file">
102 <FileSearch Id="VwdExpressIde2012" Name="vwdexpress.exe" />
103 </ComponentSearch>
104 </Property>
105 </Fragment>
106 <!-- Custom action definition to run vwdexpress.exe /setup -->
107 <Fragment>
108 <CustomAction Id="VWD2012Setup" Property="VWD2012EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
109 <PropertyRef Id="VWD2012EXPRESS_IDE" />
110 <InstallExecuteSequence>
111 <Custom Action="VWD2012Setup" Before="InstallFinalize" Overridable="yes">VWD2012EXPRESS_IDE</Custom>
112 </InstallExecuteSequence>
113 </Fragment>
114 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
115 <Fragment>
116 <CustomAction Id="VWD2012InstallVSTemplates" Property="VWD2012EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
117 <PropertyRef Id="VWD2012EXPRESS_IDE" />
118 <InstallExecuteSequence>
119 <Custom Action="VWD2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD2012EXPRESS_IDE</Custom>
120 </InstallExecuteSequence>
121 </Fragment>
122
123 <!-- Indicates whether the Visual Studio 2012 Express IDE for Phone component is installed. -->
124 <Fragment>
125 <Property Id="VPD2012EXPRESS_IDE" Secure="yes">
126 <RegistrySearch Id="VPD2012ExpressForPhoneEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VPDExpress\11.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
127 </Property>
128 </Fragment>
129 <!-- Custom action definition to run VPDexpress.exe /setup -->
130 <Fragment>
131 <CustomAction Id="VPD2012Setup" Property="VPD2012EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
132 <PropertyRef Id="VPD2012EXPRESS_IDE" />
133 <InstallExecuteSequence>
134 <Custom Action="VPD2012Setup" Before="InstallFinalize" Overridable="yes">VPD2012EXPRESS_IDE</Custom>
135 </InstallExecuteSequence>
136 </Fragment>
137 <!-- Custom action definition to run VPDexpress.exe /InstallVSTemplates -->
138 <Fragment>
139 <CustomAction Id="VPD2012InstallVSTemplates" Property="VPD2012EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
140 <PropertyRef Id="VPD2012EXPRESS_IDE" />
141 <InstallExecuteSequence>
142 <Custom Action="VPD2012InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VPD2012EXPRESS_IDE</Custom>
143 </InstallExecuteSequence>
144 </Fragment>
145
146 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
147 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
148 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
149 <!-- Web Developer language tools were installed as a part of VS 2012 setup. -->
150 <Fragment>
151 <Property Id="VS2012_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
152 <ComponentSearch Id="SearchForVWD2012ProjectSystemUnderVSSetup" Guid="03E73DF8-BED3-44BB-BE2E-BAC10FAE723E" />
153 <ComponentSearch Id="SearchForVWD2012ProjectSystemUnderVWDSetup" Guid="3D7D4A9F-E3D7-4F13-9907-AF4F3CD75D33" Type="directory" />
154 </Property>
155 </Fragment>
156
157 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
158 <!-- Visual Studio 2012 standard or higher. If this property is set, that -->
159 <!-- means Visual Studio 2012 standard or higher is installed and the Visual -->
160 <!-- C++ language tools were installed as a part of VS 2012 setup. -->
161 <Fragment>
162 <Property Id="VS2012_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
163 <RegistrySearch Id="SearchForVC2012ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VC" Name="ProductDir" Type="raw" />
164 </Property>
165 </Fragment>
166
167 <!-- Indicates whether the Visual Studio 2012 Team Test project system is installed -->
168 <Fragment>
169 <Property Id="VS2012_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
170 <RegistrySearch Id="SearchForVSTS2012TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
171 </Property>
172 </Fragment>
173
174 <!-- Indicates whether the Visual Studio 2012 Database project system is installed -->
175 <Fragment>
176 <Property Id="VS2012_IDE_DB_PROJECTSYSTEM_INSTALLED" Secure="yes">
177 <ComponentSearch Id="SearchForVS2012DBSystemUnderVSSetup" Guid="E781FFA7-55F5-4E8C-9275-7B7EF035B13B" />
178 </Property>
179 </Fragment>
180
181 <!-- Indicates whether the WiX project system is installed for VS2012 -->
182 <Fragment>
183 <Property Id="VS2012_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
184 <!-- Component search for the .pkgdef file for VS2012 -->
185 <ComponentSearch Id="SearchForVS2012WixSystemUnderVSSetup" Guid="55489E7A-7DCA-5228-975E-39C51BE332D9" />
186 </Property>
187 </Fragment>
188
189 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
190 <Fragment>
191 <Property Id="VS2012_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
192 <RegistrySearch Id="SearchForVSTS2012ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
193 </Property>
194 </Fragment>
195
196 <!-- Indicates whether the Visual Studio F# project system is installed -->
197 <Fragment>
198 <Property Id="VS2012_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
199 <RegistrySearch Id="SearchForVSTS2012FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#" Name="ProductDir" Type="raw" />
200 </Property>
201 </Fragment>
202
203 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
204 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
205 <!-- on the system. -->
206 <Fragment>
207 <Property Id="VS2012WINEXPRESS_IDE" Secure="yes">
208 <ComponentSearch Id="SearchForVS2012WinExpressIdeComponent" Guid="A7A5FD99-1DFE-4AA8-A563-4DF5E0DD89E1" Type="file">
209 <FileSearch Id="VS2012WinExpressIde" Name="vswinexpress.exe" />
210 </ComponentSearch>
211 </Property>
212 </Fragment>
213 <!-- Custom action definition to run vswinexpress.exe /setup -->
214 <Fragment>
215 <CustomAction Id="VS2012WinExpressSetup" Property="VS2012WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
216 <PropertyRef Id="VS2012WINEXPRESS_IDE" />
217 <InstallExecuteSequence>
218 <Custom Action="VS2012WinExpressSetup" Before="InstallFinalize" Overridable="yes">VS2012WINEXPRESS_IDE</Custom>
219 </InstallExecuteSequence>
220 </Fragment>
221 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
222 <Fragment>
223 <CustomAction Id="VS2012WinExpressInstallVSTemplates" Property="VS2012WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
224 <PropertyRef Id="VS2012WINEXPRESS_IDE" />
225 <InstallExecuteSequence>
226 <Custom Action="VS2012WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2012WINEXPRESS_IDE</Custom>
227 </InstallExecuteSequence>
228 </Fragment>
229
230 <!-- Indicates whether the Visual Studio Express for Windows Desktop IDE component is installed. -->
231 <!-- If this property is set, that means Visual Studio Express for Windows Desktop is installed -->
232 <!-- on the system. -->
233 <Fragment>
234 <Property Id="VS2012WDEXPRESS_IDE" Secure="yes">
235 <ComponentSearch Id="SearchForVS2012WDExpressIdeComponent" Guid="{55C6B9D6-A824-4AFC-8D08-20E581B6F42C}" Type="file">
236 <FileSearch Id="VS2012WDExpressIde" Name="WDExpress.exe" />
237 </ComponentSearch>
238 </Property>
239 </Fragment>
240 <!-- Custom action definition to run WDExpress.exe /setup -->
241 <Fragment>
242 <CustomAction Id="VS2012WDExpressSetup" Property="VS2012WDEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
243 <PropertyRef Id="VS2012WDEXPRESS_IDE" />
244 <InstallExecuteSequence>
245 <Custom Action="VS2012WDExpressSetup" Before="InstallFinalize" Overridable="yes">VS2012WDEXPRESS_IDE</Custom>
246 </InstallExecuteSequence>
247 </Fragment>
248 <!-- Custom action definition to run WDExpress.exe /InstallVSTemplates -->
249 <Fragment>
250 <CustomAction Id="VS2012WDExpressInstallVSTemplates" Property="VS2012WDEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
251 <PropertyRef Id="VS2012WDEXPRESS_IDE" />
252 <InstallExecuteSequence>
253 <Custom Action="VS2012WDExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2012WDEXPRESS_IDE</Custom>
254 </InstallExecuteSequence>
255 </Fragment>
256</Wix>
diff --git a/src/wixlib/VS2013.wxs b/src/wixlib/VS2013.wxs
new file mode 100644
index 00000000..fa774ff0
--- /dev/null
+++ b/src/wixlib/VS2013.wxs
@@ -0,0 +1,253 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2013_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS2013DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS2013ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS2013_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS2013DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS2013ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2013_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS2013ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="12.0" Type="raw">
25 <DirectorySearch Id="VS2013XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS2013XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS2013_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS2013DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS2013ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS2013_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVS2013BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\12.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2013_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS2013RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="12.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS2013DEVENV" Secure="yes">
54 <RegistrySearch Id="VS2013DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS2013Setup" Property="VS2013DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS2013DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS2013Setup" Before="InstallFinalize" Overridable="yes">VS2013DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS2013InstallVSTemplates" Property="VS2013DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS2013DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2013DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# project system is installed as a part of -->
77 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
78 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
79 <!-- C# language tools were installed as a part of VS 2013 setup. -->
80 <Fragment>
81 <Property Id="VS2013_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
82 <RegistrySearch Id="SearchForVCS2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VC#" Name="ProductDir" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
87 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
88 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
89 <!-- Basic language tools were installed as a part of VS 2013 setup. -->
90 <Fragment>
91 <Property Id="VS2013_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
92 <RegistrySearch Id="SearchForVB2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VB" Name="ProductDir" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- Indicates whether the Visual Web Developer 2013 Express IDE component is installed. -->
97 <!-- If this property is set, that means Visual Web Developer 2013 Express Edition is -->
98 <!-- installed on the system. -->
99 <Fragment>
100 <Property Id="VWD2013EXPRESS_IDE" Secure="yes">
101 <ComponentSearch Id="SearchForVwdExpressIde2013Component" Guid="{04B98358-C73B-40F7-9946-AA80B316DA84}" Type="file">
102 <FileSearch Id="VwdExpressIde2013" Name="vwdexpress.exe" />
103 </ComponentSearch>
104 </Property>
105 </Fragment>
106 <!-- Custom action definition to run vwdexpress.exe /setup -->
107 <Fragment>
108 <CustomAction Id="VWD2013Setup" Property="VWD2013EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
109 <PropertyRef Id="VWD2013EXPRESS_IDE" />
110 <InstallExecuteSequence>
111 <Custom Action="VWD2013Setup" Before="InstallFinalize" Overridable="yes">VWD2013EXPRESS_IDE</Custom>
112 </InstallExecuteSequence>
113 </Fragment>
114 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
115 <Fragment>
116 <CustomAction Id="VWD2013InstallVSTemplates" Property="VWD2013EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
117 <PropertyRef Id="VWD2013EXPRESS_IDE" />
118 <InstallExecuteSequence>
119 <Custom Action="VWD2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD2013EXPRESS_IDE</Custom>
120 </InstallExecuteSequence>
121 </Fragment>
122
123 <!-- Indicates whether the Visual Studio 2013 Express IDE for Phone component is installed. -->
124 <Fragment>
125 <Property Id="VPD2013EXPRESS_IDE" Secure="yes">
126 <RegistrySearch Id="VPD2013ExpressForPhoneEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VPDExpress\12.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
127 </Property>
128 </Fragment>
129 <!-- Custom action definition to run VPDexpress.exe /setup -->
130 <Fragment>
131 <CustomAction Id="VPD2013Setup" Property="VPD2013EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
132 <PropertyRef Id="VPD2013EXPRESS_IDE" />
133 <InstallExecuteSequence>
134 <Custom Action="VPD2013Setup" Before="InstallFinalize" Overridable="yes">VPD2013EXPRESS_IDE</Custom>
135 </InstallExecuteSequence>
136 </Fragment>
137 <!-- Custom action definition to run VPDexpress.exe /InstallVSTemplates -->
138 <Fragment>
139 <CustomAction Id="VPD2013InstallVSTemplates" Property="VPD2013EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
140 <PropertyRef Id="VPD2013EXPRESS_IDE" />
141 <InstallExecuteSequence>
142 <Custom Action="VPD2013InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VPD2013EXPRESS_IDE</Custom>
143 </InstallExecuteSequence>
144 </Fragment>
145
146 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
147 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
148 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
149 <!-- Web Developer language tools were installed as a part of VS 2013 setup. -->
150 <Fragment>
151 <Property Id="VS2013_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
152 <ComponentSearch Id="SearchForVWD2013ProjectSystemUnderVSSetup" Guid="{CDA2DE5A-F6F4-48D0-B9BA-58CFD381143C}" />
153 <ComponentSearch Id="SearchForVWD2013ProjectSystemUnderVWDSetup" Guid="{C6E8D1B3-85F3-4F3A-A6AE-4166F917C9FD}" Type="directory" />
154 </Property>
155 </Fragment>
156
157 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
158 <!-- Visual Studio 2013 Pro or higher. If this property is set, that -->
159 <!-- means Visual Studio 2013 Pro or higher is installed and the Visual -->
160 <!-- C++ language tools were installed as a part of VS 2013 setup. -->
161 <Fragment>
162 <Property Id="VS2013_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
163 <RegistrySearch Id="SearchForVC2013ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VC" Name="ProductDir" Type="raw" />
164 </Property>
165 </Fragment>
166
167 <!-- Indicates whether the Visual Studio 2013 Team Test project system is installed -->
168 <Fragment>
169 <Property Id="VS2013_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
170 <RegistrySearch Id="SearchForVSTS2013TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
171 </Property>
172 </Fragment>
173
174 <!-- Indicates whether the Windows Installer XML project system is installed for VS2013 -->
175 <Fragment>
176 <Property Id="VS2013_IDE_WIX_PROJECTSYSTEM_INSTALLED" Secure="yes">
177 <!-- Component search for the .pkgdef file for VS2013 -->
178 <ComponentSearch Id="SearchForVS2013WixSystemUnderVSSetup" Guid="{768F32E1-BAAB-5203-822D-3BD85F9BD26E}" />
179 </Property>
180 </Fragment>
181
182 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
183 <Fragment>
184 <Property Id="VS2013_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
185 <RegistrySearch Id="SearchForVSTS2013ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
186 </Property>
187 </Fragment>
188
189 <!-- Indicates whether the Visual Studio F# project system is installed -->
190 <Fragment>
191 <Property Id="VS2013_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
192 <RegistrySearch Id="SearchForVSTS2013FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\F#" Name="ProductDir" Type="raw" />
193 </Property>
194 </Fragment>
195
196 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
197 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
198 <!-- on the system. -->
199 <Fragment>
200 <Property Id="VS2013WINEXPRESS_IDE" Secure="yes">
201 <ComponentSearch Id="SearchForVS2013WinExpressIdeComponent" Guid="{5E7D5287-3ADA-4A8E-9953-C6B702BD1F01}" Type="file">
202 <FileSearch Id="VS2013WinExpressIde" Name="vswinexpress.exe" />
203 </ComponentSearch>
204 </Property>
205 </Fragment>
206
207 <!-- Custom action definition to run vswinexpress.exe /setup -->
208 <Fragment>
209 <CustomAction Id="VS2013WinExpressSetup" Property="VS2013WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
210 <PropertyRef Id="VS2013WINEXPRESS_IDE" />
211 <InstallExecuteSequence>
212 <Custom Action="VS2013WinExpressSetup" Before="InstallFinalize" Overridable="yes">VS2013WINEXPRESS_IDE</Custom>
213 </InstallExecuteSequence>
214 </Fragment>
215
216 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
217 <Fragment>
218 <CustomAction Id="VS2013WinExpressInstallVSTemplates" Property="VS2013WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
219 <PropertyRef Id="VS2013WINEXPRESS_IDE" />
220 <InstallExecuteSequence>
221 <Custom Action="VS2013WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2013WINEXPRESS_IDE</Custom>
222 </InstallExecuteSequence>
223 </Fragment>
224
225 <!-- Indicates whether the Visual Studio Express for Windows Desktop IDE component is installed. -->
226 <!-- If this property is set, that means Visual Studio Express for Windows Desktop is installed -->
227 <!-- on the system. -->
228 <Fragment>
229 <Property Id="VS2013WDEXPRESS_IDE" Secure="yes">
230 <ComponentSearch Id="SearchForVS2013WDExpressIdeComponent" Guid="{6C65247B-900C-45AD-8ED8-3F20E668348E}" Type="file">
231 <FileSearch Id="VS2013WDExpressIde" Name="WDExpress.exe" />
232 </ComponentSearch>
233 </Property>
234 </Fragment>
235
236 <!-- Custom action definition to run WDExpress.exe /setup -->
237 <Fragment>
238 <CustomAction Id="VS2013WDExpressSetup" Property="VS2013WDEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
239 <PropertyRef Id="VS2013WDEXPRESS_IDE" />
240 <InstallExecuteSequence>
241 <Custom Action="VS2013WDExpressSetup" Before="InstallFinalize" Overridable="yes">VS2013WDEXPRESS_IDE</Custom>
242 </InstallExecuteSequence>
243 </Fragment>
244
245 <!-- Custom action definition to run WDExpress.exe /InstallVSTemplates -->
246 <Fragment>
247 <CustomAction Id="VS2013WDExpressInstallVSTemplates" Property="VS2013WDEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
248 <PropertyRef Id="VS2013WDEXPRESS_IDE" />
249 <InstallExecuteSequence>
250 <Custom Action="VS2013WDExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2013WDEXPRESS_IDE</Custom>
251 </InstallExecuteSequence>
252 </Fragment>
253</Wix>
diff --git a/src/wixlib/VS2015.wxs b/src/wixlib/VS2015.wxs
new file mode 100644
index 00000000..b7fb7b4d
--- /dev/null
+++ b/src/wixlib/VS2015.wxs
@@ -0,0 +1,187 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2015_EXTENSIONS_DIR" Secure="yes">
8 <RegistrySearch Id="VS2015DevEnvForExtensionsSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
9 <DirectorySearch Id="VS2015ExtensionsPathSearch" Path="Extensions" Depth="1" />
10 </RegistrySearch>
11 </Property>
12 </Fragment>
13
14 <Fragment>
15 <Property Id="VS2015_PROJECTTEMPLATES_DIR" Secure="yes">
16 <RegistrySearch Id="VS2015DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
17 <DirectorySearch Id="VS2015ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
18 </RegistrySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2015_SCHEMAS_DIR" Secure="yes">
24 <RegistrySearch Id="VS2015ProductPathSearch" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw">
25 <DirectorySearch Id="VS2015XmlPathSearch" Path="Xml" Depth="1">
26 <DirectorySearch Id="VS2015XmlSchemasPathSearch" Path="Schemas" Depth="1" />
27 </DirectorySearch>
28 </RegistrySearch>
29 </Property>
30 </Fragment>
31
32 <Fragment>
33 <Property Id="VS2015_ITEMTEMPLATES_DIR" Secure="yes">
34 <RegistrySearch Id="VS2015DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
35 <DirectorySearch Id="VS2015ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
36 </RegistrySearch>
37 </Property>
38 </Fragment>
39
40 <Fragment>
41 <Property Id="VS2015_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
42 <RegistrySearch Id="SearchForVS2015BootstrapperPackageFolder" Root="HKLM" Key="Software\Microsoft\GenericBootstrapper\4.0" Name="Path" Type="raw" />
43 </Property>
44 </Fragment>
45
46 <Fragment>
47 <Property Id="VS2015_ROOT_FOLDER" Secure="yes">
48 <RegistrySearch Id="SearchForVS2015RootPath" Root="HKLM" Key="Software\Microsoft\VisualStudio\SxS\VS7" Name="14.0" Type="raw" />
49 </Property>
50 </Fragment>
51
52 <Fragment>
53 <Property Id="VS2015DEVENV" Secure="yes">
54 <RegistrySearch Id="VS2015DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
55 </Property>
56 </Fragment>
57
58 <Fragment>
59 <CustomAction Id="VS2015Setup" Property="VS2015DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
60 <PropertyRef Id="VS2015DEVENV" />
61
62 <InstallExecuteSequence>
63 <Custom Action="VS2015Setup" Before="InstallFinalize" Overridable="yes">VS2015DEVENV</Custom>
64 </InstallExecuteSequence>
65 </Fragment>
66
67 <Fragment>
68 <CustomAction Id="VS2015InstallVSTemplates" Property="VS2015DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
69 <PropertyRef Id="VS2015DEVENV" />
70
71 <InstallExecuteSequence>
72 <Custom Action="VS2015InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2015DEVENV</Custom>
73 </InstallExecuteSequence>
74 </Fragment>
75
76 <!-- Indicates whether the Visual C# project system is installed as a part of -->
77 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
78 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
79 <!-- C# language tools were installed as a part of VS 2015 setup. -->
80 <Fragment>
81 <Property Id="VS2015_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
82 <RegistrySearch Id="SearchForVCS2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC#" Name="ProductDir" Type="raw" />
83 </Property>
84 </Fragment>
85
86 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
87 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
88 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
89 <!-- Basic language tools were installed as a part of VS 2015 setup. -->
90 <Fragment>
91 <Property Id="VS2015_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes">
92 <RegistrySearch Id="SearchForVB2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VB" Name="ProductDir" Type="raw" />
93 </Property>
94 </Fragment>
95
96 <!-- Indicates whether the Visual Web Developer 2015 Express IDE component is installed. -->
97 <!-- If this property is set, that means Visual Web Developer 2015 Express Edition is -->
98 <!-- installed on the system. -->
99 <Fragment>
100 <Property Id="VWD2015EXPRESS_IDE" Secure="yes">
101 <RegistrySearch Id="VWD2015ExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
102 </Property>
103 </Fragment>
104 <!-- Custom action definition to run vwdexpress.exe /setup -->
105 <Fragment>
106 <CustomAction Id="VWD2015Setup" Property="VWD2015EXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
107 <PropertyRef Id="VWD2015EXPRESS_IDE" />
108 <InstallExecuteSequence>
109 <Custom Action="VWD2015Setup" Before="InstallFinalize" Overridable="yes">VWD2015EXPRESS_IDE</Custom>
110 </InstallExecuteSequence>
111 </Fragment>
112 <!-- Custom action definition to run vwdexpress.exe /InstallVSTemplates -->
113 <Fragment>
114 <CustomAction Id="VWD2015InstallVSTemplates" Property="VWD2015EXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
115 <PropertyRef Id="VWD2015EXPRESS_IDE" />
116 <InstallExecuteSequence>
117 <Custom Action="VWD2015InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VWD2015EXPRESS_IDE</Custom>
118 </InstallExecuteSequence>
119 </Fragment>
120
121 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
122 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
123 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
124 <!-- Web Developer language tools were installed as a part of VS 2015 setup. -->
125 <Fragment>
126 <Property Id="VS2015_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes">
127 <ComponentSearch Id="SearchForVWD2015ProjectSystemUnderVSSetup" Guid="274EB373-6B78-5EBD-8A6C-6D8094E58ECB" />
128 <ComponentSearch Id="SearchForVWD2015ProjectSystemUnderVWDSetup" Guid="71EBDA4A-4A15-426F-95C4-4FC051FD7AA4" Type="directory" />
129 </Property>
130 </Fragment>
131
132 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
133 <!-- Visual Studio 2015 standard or higher. If this property is set, that -->
134 <!-- means Visual Studio 2015 standard or higher is installed and the Visual -->
135 <!-- C++ language tools were installed as a part of VS 2015 setup. -->
136 <Fragment>
137 <Property Id="VS2015_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes">
138 <RegistrySearch Id="SearchForVC2015ProjectSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VC" Name="ProductDir" Type="raw" />
139 </Property>
140 </Fragment>
141
142 <!-- Indicates whether the Visual Studio 2015 Team Test project system is installed -->
143 <Fragment>
144 <Property Id="VS2015_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes">
145 <RegistrySearch Id="SearchForVSTS2015TestSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{3AC096D0-A1C2-E12C-1390-A8335801FDAB}" Name="Package" Type="raw" />
146 </Property>
147 </Fragment>
148
149 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
150 <Fragment>
151 <Property Id="VS2015_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes">
152 <RegistrySearch Id="SearchForVSTS2015ModelingSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Projects\{f088123c-0e9e-452a-89e6-6ba2f21d5cac}" Name="Package" Type="raw" />
153 </Property>
154 </Fragment>
155
156 <!-- Indicates whether the Visual Studio F# project system is installed -->
157 <Fragment>
158 <Property Id="VS2015_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes">
159 <RegistrySearch Id="SearchForVSTS2015FSharpSystemUnderVSSetup" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\F#" Name="ProductDir" Type="raw" />
160 </Property>
161 </Fragment>
162
163 <!-- Indicates whether the Visual Studio Express for Windows IDE component is installed. -->
164 <!-- If this property is set, that means Visual Studio Express for Windows is installed -->
165 <!-- on the system. -->
166 <Fragment>
167 <Property Id="VS2015WINEXPRESS_IDE" Secure="yes">
168 <RegistrySearch Id="VS2015WinExpressSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VSWinExpress\14.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
169 </Property>
170 </Fragment>
171 <!-- Custom action definition to run vswinexpress.exe /setup -->
172 <Fragment>
173 <CustomAction Id="VS2015WinExpressSetup" Property="VS2015WINEXPRESS_IDE" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
174 <PropertyRef Id="VS2015WINEXPRESS_IDE" />
175 <InstallExecuteSequence>
176 <Custom Action="VS2015WinExpressSetup" Before="InstallFinalize" Overridable="yes">VS2015WINEXPRESS_IDE</Custom>
177 </InstallExecuteSequence>
178 </Fragment>
179 <!-- Custom action definition to run vswinexpress.exe /InstallVSTemplates -->
180 <Fragment>
181 <CustomAction Id="VS2015WinExpressInstallVSTemplates" Property="VS2015WINEXPRESS_IDE" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
182 <PropertyRef Id="VS2015WINEXPRESS_IDE" />
183 <InstallExecuteSequence>
184 <Custom Action="VS2015WinExpressInstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2015WINEXPRESS_IDE</Custom>
185 </InstallExecuteSequence>
186 </Fragment>
187</Wix>
diff --git a/src/wixlib/VS2017.wxs b/src/wixlib/VS2017.wxs
new file mode 100644
index 00000000..acc96d67
--- /dev/null
+++ b/src/wixlib/VS2017.wxs
@@ -0,0 +1,143 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2017_ROOT_FOLDER" Secure="yes" />
8
9 <!-- Currently supported only on x86 -->
10 <CustomActionRef Id="VSFindInstances" />
11 </Fragment>
12
13 <Fragment>
14 <PropertyRef Id="VS2017_ROOT_FOLDER" />
15 <Property Id="VS2017_IDE_DIR" Secure="yes">
16 <DirectorySearch Id="VS2017DirectorySearch" Path="[VS2017_ROOT_FOLDER]">
17 <DirectorySearch Id="VS2017EnvironmentDirectorySearch" Path="Common7\IDE" Depth="1" />
18 </DirectorySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2017_EXTENSIONS_DIR" Secure="yes">
24 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
25 <DirectorySearch Id="VS2017ExtensionsDirectorySearch" Path="Extensions" Depth="1" />
26 </DirectorySearchRef>
27 </Property>
28 </Fragment>
29
30 <Fragment>
31 <Property Id="VS2017_PROJECTTEMPLATES_DIR" Secure="yes">
32 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
33 <DirectorySearch Id="VS2017ProjectTemplatesDirectorySearch" Path="ProjectTemplates" Depth="1" />
34 </DirectorySearchRef>
35 </Property>
36 </Fragment>
37
38 <Fragment>
39 <PropertyRef Id="VS2017_ROOT_FOLDER" />
40 <Property Id="VS2017_SCHEMAS_DIR" Secure="yes">
41 <DirectorySearch Id="VS2017XmlDirectorySearch" Path="[VS2017_ROOT_FOLDER]\Xml" Depth="1">
42 <DirectorySearch Id="VS2017XmlSchemasDirectorySearch" Path="Schemas" Depth="1" />
43 </DirectorySearch>
44 </Property>
45 </Fragment>
46
47 <Fragment>
48 <Property Id="VS2017_ITEMTEMPLATES_DIR" Secure="yes">
49 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
50 <DirectorySearch Id="VS2017ItemTemplatesDirectorySearch" Path="ItemTemplates" Depth="1" />
51 </DirectorySearchRef>
52 </Property>
53 </Fragment>
54
55 <Fragment>
56 <PropertyRef Id="VS2017_ROOT_FOLDER" />
57 <Property Id="VS2017_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
58 <DirectorySearch Id="VS2017SDKDirectorySearch" Path="[VS2017_ROOT_FOLDER]\SDK" Depth="1">
59 <DirectorySearch Id="SearchForVS2017BootstrapperPackageDirectory" Path="Bootstrapper" Depth="1" />
60 </DirectorySearch>
61 </Property>
62 </Fragment>
63
64 <Fragment>
65 <Property Id="VS2017DEVENV" Secure="yes">
66 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
67 <FileSearch Id="VS2017DevEnvSearch" Name="devenv.exe" />
68 </DirectorySearchRef>
69 </Property>
70 </Fragment>
71
72 <Fragment>
73 <CustomAction Id="VS2017Setup" Property="VS2017DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
74 <PropertyRef Id="VS2017DEVENV" />
75
76 <InstallExecuteSequence>
77 <Custom Action="VS2017Setup" Before="InstallFinalize" Overridable="yes">VS2017DEVENV</Custom>
78 </InstallExecuteSequence>
79 </Fragment>
80
81 <Fragment>
82 <CustomAction Id="VS2017InstallVSTemplates" Property="VS2017DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
83 <PropertyRef Id="VS2017DEVENV" />
84
85 <InstallExecuteSequence>
86 <Custom Action="VS2017InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2017DEVENV</Custom>
87 </InstallExecuteSequence>
88 </Fragment>
89
90 <!-- Indicates whether the Visual C# project system is installed as a part of -->
91 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
92 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
93 <!-- C# language tools were installed as a part of VS 2017 setup. -->
94 <Fragment>
95 <Property Id="VS2017_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
96 <CustomActionRef Id="VSFindInstances" />
97 </Fragment>
98
99 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
100 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
101 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
102 <!-- Basic language tools were installed as a part of VS 2017 setup. -->
103 <Fragment>
104 <Property Id="VS2017_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes" />
105 <CustomActionRef Id="VSFindInstances" />
106 </Fragment>
107
108 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
109 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
110 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
111 <!-- Web Developer language tools were installed as a part of VS 2017 setup. -->
112 <Fragment>
113 <Property Id="VS2017_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes" />
114 <CustomActionRef Id="VSFindInstances" />
115 </Fragment>
116
117 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
118 <!-- Visual Studio 2017 standard or higher. If this property is set, that -->
119 <!-- means Visual Studio 2017 standard or higher is installed and the Visual -->
120 <!-- C++ language tools were installed as a part of VS 2017 setup. -->
121 <Fragment>
122 <Property Id="VS2017_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes" />
123 <CustomActionRef Id="VSFindInstances" />
124 </Fragment>
125
126 <!-- Indicates whether the Visual Studio 2017 Team Test project system is installed -->
127 <Fragment>
128 <Property Id="VS2017_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes" />
129 <CustomActionRef Id="VSFindInstances" />
130 </Fragment>
131
132 <!-- Indicates whether the Visual Studio Modeling project system is installed -->
133 <Fragment>
134 <Property Id="VS2017_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes" />
135 <CustomActionRef Id="VSFindInstances" />
136 </Fragment>
137
138 <!-- Indicates whether the Visual Studio F# project system is installed -->
139 <Fragment>
140 <Property Id="VS2017_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
141 <CustomActionRef Id="VSFindInstances" />
142 </Fragment>
143</Wix>
diff --git a/src/wixlib/VSExtension_Platform.wxi b/src/wixlib/VSExtension_Platform.wxi
new file mode 100644
index 00000000..30d107ef
--- /dev/null
+++ b/src/wixlib/VSExtension_Platform.wxi
@@ -0,0 +1,18 @@
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 <?include caSuffix.wxi ?>
6 <Fragment>
7 <CustomAction Id="VSFindInstances$(var.Suffix)" BinaryKey="VSCA$(var.Suffix)" DllEntry="FindInstances" Execute="firstSequence" Return="check" SuppressModularization="yes" />
8 <InstallExecuteSequence>
9 <Custom Action="VSFindInstances$(var.Suffix)" Before="AppSearch" Overridable="yes" />
10 </InstallExecuteSequence>
11 <InstallUISequence>
12 <Custom Action="VSFindInstances$(var.Suffix)" Before="AppSearch" Overridable="yes" />
13 </InstallUISequence>
14 </Fragment>
15 <Fragment>
16 <Binary Id="VSCA$(var.Suffix)" SourceFile="vsca.dll" />
17 </Fragment>
18</Include>
diff --git a/src/wixlib/VSExtension_x86.wxs b/src/wixlib/VSExtension_x86.wxs
new file mode 100644
index 00000000..288cf687
--- /dev/null
+++ b/src/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/wixlib/VsixPackage.wxs b/src/wixlib/VsixPackage.wxs
new file mode 100644
index 00000000..8149c55b
--- /dev/null
+++ b/src/wixlib/VsixPackage.wxs
@@ -0,0 +1,61 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment>
7 <Property Id="VS2010_VSIX_INSTALLER_PATH" Secure="yes">
8 <RegistrySearch Id="WixVS2010EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
9 <FileSearch Id="WixVS2010VsixInstaller" Name="VSIXInstaller.exe" />
10 </RegistrySearch>
11 </Property>
12
13 <Property Id="VS2012_VSIX_INSTALLER_PATH" Secure="yes">
14 <RegistrySearch Id="WixVS2012EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
15 <FileSearch Id="WixVS2012VsixInstaller" Name="VSIXInstaller.exe" />
16 </RegistrySearch>
17 </Property>
18
19 <Property Id="VS2013_VSIX_INSTALLER_PATH" Secure="yes">
20 <RegistrySearch Id="WixVS2013EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\12.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
21 <FileSearch Id="WixVS2013VsixInstaller" Name="VSIXInstaller.exe" />
22 </RegistrySearch>
23 </Property>
24
25 <!-- VS2015 is the latest VSIX at this point in time, so search for that by default. -->
26 <Property Id="VS2015_VSIX_INSTALLER_PATH" Secure="yes">
27 <RegistrySearch Id="WixVS2015EnvDir" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\14.0\Setup\VS" Name="EnvironmentDirectory" Type="directory">
28 <FileSearch Id="WixVS2015VsixInstaller" Name="VSIXInstaller.exe" />
29 </RegistrySearch>
30 </Property>
31
32 <Property Id="VS_VSIX_INSTALLER_PATH" Secure="yes" />
33
34 <!-- VWD2012 registers differently than the rest of Visual Studio, so search for it in the case VS2012 is missing. -->
35 <Property Id="VWD2012_VSIX_INSTALL_ROOT">
36 <RegistrySearch Id="Vwd2012Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\11.0\Setup\VS" Name="ProductDir" Type="raw" />
37 </Property>
38
39 <!-- VWD2013 registers differently than the rest of Visual Studio, so search for it in the case VS2013 is missing. -->
40 <Property Id="VWD2013_VSIX_INSTALL_ROOT">
41 <RegistrySearch Id="Vwd2013Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\12.0\Setup\VS" Name="ProductDir" Type="raw" />
42 </Property>
43
44 <!-- VWD2015 registers differently than the rest of Visual Studio, so search for it in the case VS2015 is missing. -->
45 <Property Id="VWD2015_VSIX_INSTALL_ROOT">
46 <RegistrySearch Id="Vwd2015Search" Root="HKLM" Key="SOFTWARE\Microsoft\VWDExpress\14.0\Setup\VS" Name="ProductDir" Type="raw" />
47 </Property>
48
49 <!-- Use the latest VS- or VWD-installed VSIXInstaller.exe. -->
50 <SetProperty Action="SetVS2015Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2015_VSIX_INSTALLER_PATH]" Sequence="both" After="AppSearch">NOT VS_VSIX_INSTALLER_PATH AND VS2015_VSIX_INSTALLER_PATH</SetProperty>
51 <SetProperty Action="Vwd2015VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2015_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2015Vsix">NOT VS_VSIX_INSTALLER_PATH AND VWD2015_VSIX_INSTALL_ROOT</SetProperty>
52
53 <SetProperty Action="SetVS2013Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2013_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2015VsixWhenVSAbsent">NOT VS_VSIX_INSTALLER_PATH AND VS2013_VSIX_INSTALLER_PATH</SetProperty>
54 <SetProperty Action="Vwd2013VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2013_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2013Vsix">NOT VS_VSIX_INSTALLER_PATH AND VWD2013_VSIX_INSTALL_ROOT</SetProperty>
55
56 <SetProperty Action="SetVS2012Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2012_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2013VsixWhenVSAbsent">NOT VS_VSIX_INSTALLER_PATH AND VS2012_VSIX_INSTALLER_PATH</SetProperty>
57 <SetProperty Action="Vwd2012VsixWhenVSAbsent" Id="VS_VSIX_INSTALLER_PATH" Value="[VWD2012_VSIX_INSTALL_ROOT]\Common7\IDE\VSIXInstaller.exe" Sequence="both" After="SetVS2012Vsix">NOT VS_VSIX_INSTALLER_PATH AND VWD2012_VSIX_INSTALL_ROOT</SetProperty>
58
59 <SetProperty Action="SetVS2010Vsix" Id="VS_VSIX_INSTALLER_PATH" Value="[VS2010_VSIX_INSTALLER_PATH]" Sequence="both" After="Vwd2012VsixWhenVSAbsent">NOT VS_VSIX_INSTALLER_PATH AND VS2010_VSIX_INSTALLER_PATH</SetProperty>
60 </Fragment>
61</Wix>
diff --git a/src/wixlib/caSuffix.wxi b/src/wixlib/caSuffix.wxi
new file mode 100644
index 00000000..a56a2393
--- /dev/null
+++ b/src/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/wixlib/packages.config b/src/wixlib/packages.config
new file mode 100644
index 00000000..7120dc24
--- /dev/null
+++ b/src/wixlib/packages.config
@@ -0,0 +1,5 @@
1<?xml version="1.0" encoding="utf-8"?>
2<packages>
3 <package id="Nerdbank.GitVersioning" version="2.0.41" developmentDependency="true" />
4 <package id="WixToolset.Core.InternalPackage" version="4.0.15" targetFramework="net40" developmentDependency="true" />
5</packages> \ No newline at end of file
diff --git a/src/wixlib/vs.wixproj b/src/wixlib/vs.wixproj
new file mode 100644
index 00000000..15dd5092
--- /dev/null
+++ b/src/wixlib/vs.wixproj
@@ -0,0 +1,65 @@
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" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
5 <Import Project="..\..\packages\WixToolset.Core.InternalPackage.4.0.15\build\WixToolset.Core.InternalPackage.props" Condition="Exists('..\..\packages\WixToolset.Core.InternalPackage.4.0.15\build\WixToolset.Core.InternalPackage.props')" />
6 <Import Project="..\FindLocalWix.props" />
7
8 <PropertyGroup>
9 <ProjectGuid>{14345C9D-8AF8-435A-BB1B-E067CE7EB321}</ProjectGuid>
10 <OutputName>vs</OutputName>
11 <OutputType>Library</OutputType>
12 <BindFiles>true</BindFiles>
13 <Pedantic>true</Pedantic>
14 <Cultures>en-us</Cultures>
15 </PropertyGroup>
16
17 <ItemGroup>
18 <Compile Include="HTML_Help_Registration__RTL_X86.wxs" />
19 <Compile Include="Vs2003.wxs" />
20 <Compile Include="Vs2005.wxs" />
21 <Compile Include="Vs2008.wxs" />
22 <Compile Include="Vs2010.wxs" />
23 <Compile Include="Vs11.wxs" />
24 <Compile Include="Vs2012.wxs" />
25 <Compile Include="Vs2013.wxs" />
26 <Compile Include="VS14.wxs" />
27 <Compile Include="VS2015.wxs" />
28 <Compile Include="VS2017.wxs" />
29 <Compile Include="VSExtension_x86.wxs" />
30 <Compile Include="VsixPackage.wxs" />
31 <Compile Include="vs2005\vs2005_VSIPCC_Collection_Files_RTL.wxs" />
32 <Compile Include="vs2008\vs2008_VSIPCC_Collection_Files_RTL.wxs" />
33 </ItemGroup>
34
35 <ItemGroup>
36 <Folder Include="vs2005\" />
37 <Folder Include="vs2008\" />
38 </ItemGroup>
39
40 <ItemGroup>
41 <None Include="packages.config" />
42 </ItemGroup>
43
44 <ItemGroup>
45 <ProjectReference Include="..\ca\vsca.vcxproj">
46 <Name>vsca</Name>
47 <Project>{45308b85-0628-4978-8fc8-6ad9e1ad5949}</Project>
48 </ProjectReference>
49 </ItemGroup>
50
51 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " />
52 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets') " />
53 <Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
54 <Error Text="FG-WiX or WiX Toolset build tools (v3.11 or later) must be installed to build this project. To download FG-WiX, go to https://www.firegiant.com/downloads/. To download the WiX Toolset, go to http://wixtoolset.org/releases/." />
55 </Target>
56
57 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
58 <PropertyGroup>
59 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
60 </PropertyGroup>
61 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.0.41\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.0.41\build\Nerdbank.GitVersioning.targets'))" />
62 <Error Condition="!Exists('..\..\packages\WixToolset.Core.InternalPackage.4.0.15\build\WixToolset.Core.InternalPackage.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.Core.InternalPackage.4.0.15\build\WixToolset.Core.InternalPackage.props'))" />
63 </Target>
64 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.0.41\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.0.41\build\Nerdbank.GitVersioning.targets')" />
65</Project>
diff --git a/src/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs b/src/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs
new file mode 100644
index 00000000..bb0dfd62
--- /dev/null
+++ b/src/wixlib/vs2005/VS2005_VSIPCC_Collection_Files_RTL.wxs
@@ -0,0 +1,64 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment Id="VS2005_Namespace">
7 <DirectoryRef Id="VSIPCC">
8 <Component Id="VSIPCC_Reg" Guid="96F72137-191F-4120-A2FA-9DA8F6C2C993" KeyPath="yes">
9 <CreateFolder />
10 <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" />
11 </Component>
12 <Directory Id="vsipcc_v8.0" Name="v8.0" FileSource="$(sys.SOURCEFILEDIR)\Redist">
13 <Component Id="vsipcc_collection________" Guid="454FF049-0B57-4927-8A0C-AA10608A480C">
14 <File Id="FL_vsipcc_reg_hxs_86878________" Name="vsipcc_reg.hxs" KeyPath="yes" />
15 <File Id="FL_vsipcc_hxc_86879________" Name="vsipcc.hxc" />
16 <File Id="FL_vsipcc_hxt_86880________" Name="vsipcc.hxt" />
17 <File Id="FL_vsipccALinks_hxk_86881________" Name="vsipccALinks.hxk" />
18 <File Id="FL_vsipccBLinks_hxk_86882________" Name="vsipccBLinks.hxk" />
19 <File Id="FL_vsipccFLinks_hxk_86885________" Name="vsipccFLinks.hxk" />
20 <File Id="FL_vsipccKLinks_hxk_86886________" Name="vsipccKLinks.hxk" />
21 <File Id="FL_vsipccNamedURLs_hxk_86888________.3643236F_FC70_11D3_A536_0090278A1BB" Name="vsipccNamedURLs.hxk" />
22 <File Id="FL_vsipccSlinks_hxk_93825________" Name="vsipccSlinks.hxk" />
23 <File Id="FL_VsipCCSamples_HxK_103959________" Name="VsipCCSamples.HxK" />
24 </Component>
25 </Directory>
26 </DirectoryRef>
27 <CustomAction Id="CA_HxMerge_VSIPCC_VSCC" Return="ignore" Execute="commit" Impersonate="no" BinaryKey="BIN_File_60377" ExeCommand="ms-help://MS.VSCC.v80" />
28 <CustomAction Id="CA_HxMerge_VSIPCC_VSExpCC" Return="ignore" Execute="commit" Impersonate="no" BinaryKey="BIN_File_60377" ExeCommand="ms-help://MS.VSExpressCC.v80" />
29 <InstallExecuteSequence>
30 <Custom Action="CA_HxMerge_VSIPCC_VSCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8"/>
31 <Custom Action="CA_HxMerge_VSIPCC_VSExpCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8"/>
32 </InstallExecuteSequence>
33 <Binary Id="BIN_File_60377" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_File_60377.dll" />
34 <CustomTable Id="HelpPlugin">
35 <Row>
36 <Data Column="HelpNamespace_">MS_VSIPCC_v80</Data>
37 <Data Column="HelpNamespace_Parent">MS_VSCC_v80</Data>
38 <Data Column="File_HxT">FL_vsipcc_hxt_86880________</Data>
39 <Data Column="File_HxA" />
40 <Data Column="File_ParentHxT" />
41 </Row>
42 <Row>
43 <Data Column="HelpNamespace_">MS_VSIPCC_v80</Data>
44 <Data Column="HelpNamespace_Parent">MS_VSExpressCC_v80</Data>
45 <Data Column="File_HxT">FL_vsipcc_hxt_86880________</Data>
46 <Data Column="File_HxA" />
47 <Data Column="File_ParentHxT" />
48 </Row>
49 </CustomTable>
50 <CustomTable Id="HelpNamespace">
51 <Row>
52 <Data Column="NamespaceKey">MS_VSIPCC_v80</Data>
53 <Data Column="NamespaceName">MS.VSIPCC.v80</Data>
54 <Data Column="File_Collection">FL_vsipcc_hxc_86879________</Data>
55 <Data Column="Description">VSIP Documentation</Data>
56 </Row>
57 </CustomTable>
58
59 <ComponentGroup Id="Help2_VS2005_Namespace_Components">
60 <ComponentRef Id="VSIPCC_Reg"/>
61 <ComponentRef Id="vsipcc_collection________"/>
62 </ComponentGroup>
63 </Fragment>
64</Wix>
diff --git a/src/wixlib/vs2005/redist/BIN_File_60377.dll b/src/wixlib/vs2005/redist/BIN_File_60377.dll
new file mode 100644
index 00000000..dfdddf66
--- /dev/null
+++ b/src/wixlib/vs2005/redist/BIN_File_60377.dll
Binary files differ
diff --git a/src/wixlib/vs2005/redist/vsipCCSamples.HxK b/src/wixlib/vs2005/redist/vsipCCSamples.HxK
new file mode 100644
index 00000000..00db745c
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipcc.hxc b/src/wixlib/vs2005/redist/vsipcc.hxc
new file mode 100644
index 00000000..406e7f2b
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipcc.hxt b/src/wixlib/vs2005/redist/vsipcc.hxt
new file mode 100644
index 00000000..613dcfbb
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccALinks.hxk b/src/wixlib/vs2005/redist/vsipccALinks.hxk
new file mode 100644
index 00000000..27017f76
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccBLinks.hxk b/src/wixlib/vs2005/redist/vsipccBLinks.hxk
new file mode 100644
index 00000000..b37d2e18
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccFLinks.hxk b/src/wixlib/vs2005/redist/vsipccFLinks.hxk
new file mode 100644
index 00000000..2d37efbf
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccKLinks.hxk b/src/wixlib/vs2005/redist/vsipccKLinks.hxk
new file mode 100644
index 00000000..2938eff3
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccNamedURLs.hxk b/src/wixlib/vs2005/redist/vsipccNamedURLs.hxk
new file mode 100644
index 00000000..8691c54c
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipccSlinks.hxk b/src/wixlib/vs2005/redist/vsipccSlinks.hxk
new file mode 100644
index 00000000..9d193521
--- /dev/null
+++ b/src/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/wixlib/vs2005/redist/vsipcc_reg.hxs b/src/wixlib/vs2005/redist/vsipcc_reg.hxs
new file mode 100644
index 00000000..3f2905c4
--- /dev/null
+++ b/src/wixlib/vs2005/redist/vsipcc_reg.hxs
Binary files differ
diff --git a/src/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs b/src/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs
new file mode 100644
index 00000000..bfeef18f
--- /dev/null
+++ b/src/wixlib/vs2008/VS2008_VSIPCC_Collection_Files_RTL.wxs
@@ -0,0 +1,61 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <Fragment Id="VS2008_Namespace">
7 <Binary Id="BIN_435439_x86_enu" SourceFile="$(sys.SOURCEFILEDIR)\Redist\BIN_435439_x86_enu.dll" />
8 <CustomAction Id="CA_ScheduleExtHelpPlugin_VSCC_VSIPCC" BinaryKey="BIN_435439_x86_enu" DllEntry="ScheduleExtHelpPlugin" Return="ignore" />
9 <CustomAction Id="CA_ExtHelpPlugin" BinaryKey="BIN_435439_x86_enu" DllEntry="ExtHelpPluginAction" Execute="deferred" Impersonate="no" />
10
11 <DirectoryRef Id="VSIPCC">
12 <Component Id="VSIPCC_Reg_27501" Guid="{7C32E9FB-9C4D-416B-8ACC-9D487ED0ADBD}" KeyPath="yes">
13 <CreateFolder Directory="VSIPCC" />
14 <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" />
15 </Component>
16 <Directory Id="vsipcc_v9.0" Name="v9.0" FileSource="$(sys.SOURCEFILEDIR)\Redist">
17 <Component Id="vsipcc_collection_25097" Guid="{D419D13C-D6D8-4E2A-A3EF-B26398D36524}">
18 <File Id="FL_vsipcc_reg_hxs_86878_86878_cn_ln" Name="vsipcc_reg.hxs" KeyPath="yes" Vital="no"/>
19 <File Id="FL_vsipcc_hxc_86879_86879_cn_ln" Name="_vsipcc90.hxc" Vital="no"/>
20 <File Id="FL_vsipcc_hxt_86880_86880_cn_ln" Name="_vsipcc90.hxt" Vital="no"/>
21 <File Id="FL_vsipccALinks_hxk_86881_86881_cn_ln" Name="_ALinks.hxk" Vital="no"/>
22 <File Id="FL_vsipccBLinks_hxk_86882_86882_cn_ln" Name="_BLinks.hxk" Vital="no"/>
23 <File Id="FL_vsipccCLinks_hxk_cn_ln" Name="_CLinks.hxk" Vital="no"/>
24 <File Id="FL_vsipccFLinks_hxk_86885_86885_cn_ln" Name="_FLinks.hxk" Vital="no"/>
25 <File Id="FL_vsipccKLinks_hxk_86886_86886_cn_ln" Name="_KLinks.hxk" Vital="no"/>
26 <File Id="FL_vsipccNamedURLs_hxk_86888_86888_cn_ln" Name="_vsipcc_namedUrls.hxk" Vital="no"/>
27 <File Id="FL_vsipccSlinks_hxk_93825_93825_cn_ln" Name="_SLinks.hxk" Vital="no"/>
28 <File Id="FL_VsipCCSamples_HxK_103959_103959_cn_ln" Name="_vsipcc_samples.HxK" Vital="no"/>
29 </Component>
30 </Directory>
31 </DirectoryRef>
32 <CustomTable Id="HelpNamespace">
33 <Row>
34 <Data Column="NamespaceKey">MS.VSIPCC.v90</Data>
35 <Data Column="NamespaceName">MS.VSIPCC.v90</Data>
36 <Data Column="File_Collection">FL_vsipcc_hxc_86879_86879_cn_ln</Data>
37 <Data Column="Description">VSIP Documentation</Data>
38 </Row>
39 </CustomTable>
40 <CustomTable Id="HelpPlugin">
41 <Row>
42 <Data Column="HelpNamespace_">MS.VSIPCC.v90</Data>
43 <Data Column="HelpNamespace_Parent">MS.VSCC.v90</Data>
44 <Data Column="File_HxT">FL_vsipcc_hxt_86880_86880_cn_ln</Data>
45 <Data Column="File_HxA" />
46 <Data Column="File_ParentHxT" />
47 </Row>
48 </CustomTable>
49 <Property Id="EXTERNALPLUGINLIST" Value="MS.VSCC.v90;MS.VSIPCC.v90" />
50 <Property Id="DirectoryTable_x86" Value="DirectoryTable" />
51 <Property Id="HHFilterTable" Value="HHFilterTable" />
52 <InstallExecuteSequence>
53 <Custom Action="CA_ScheduleExtHelpPlugin_VSCC_VSIPCC" After="CA_RegisterMicrosoftHelp.3643236F_FC70_11D3_A536_0090278A1BB8">Not Installed</Custom>
54 </InstallExecuteSequence>
55
56 <ComponentGroup Id="Help2_VS2008_Namespace_Components">
57 <ComponentRef Id="VSIPCC_Reg_27501"/>
58 <ComponentRef Id="vsipcc_collection_25097"/>
59 </ComponentGroup>
60 </Fragment>
61</Wix>
diff --git a/src/wixlib/vs2008/redist/BIN_435439_x86_enu.dll b/src/wixlib/vs2008/redist/BIN_435439_x86_enu.dll
new file mode 100644
index 00000000..7f5e9436
--- /dev/null
+++ b/src/wixlib/vs2008/redist/BIN_435439_x86_enu.dll
Binary files differ
diff --git a/src/wixlib/vs2008/redist/_ALinks.hxk b/src/wixlib/vs2008/redist/_ALinks.hxk
new file mode 100644
index 00000000..dd6df168
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_BLinks.hxk b/src/wixlib/vs2008/redist/_BLinks.hxk
new file mode 100644
index 00000000..a2288162
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_CLinks.hxk b/src/wixlib/vs2008/redist/_CLinks.hxk
new file mode 100644
index 00000000..da0df730
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_FLinks.hxk b/src/wixlib/vs2008/redist/_FLinks.hxk
new file mode 100644
index 00000000..37dfda34
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_KLinks.hxk b/src/wixlib/vs2008/redist/_KLinks.hxk
new file mode 100644
index 00000000..2303ed0c
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_SLinks.hxk b/src/wixlib/vs2008/redist/_SLinks.hxk
new file mode 100644
index 00000000..9f65eca3
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_vsipcc90.hxc b/src/wixlib/vs2008/redist/_vsipcc90.hxc
new file mode 100644
index 00000000..9ad6869e
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_vsipcc90.hxt b/src/wixlib/vs2008/redist/_vsipcc90.hxt
new file mode 100644
index 00000000..3ac4d5d6
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk b/src/wixlib/vs2008/redist/_vsipcc_namedUrls.hxk
new file mode 100644
index 00000000..aaa79158
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/_vsipcc_samples.HxK b/src/wixlib/vs2008/redist/_vsipcc_samples.HxK
new file mode 100644
index 00000000..00db745c
--- /dev/null
+++ b/src/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/wixlib/vs2008/redist/vsipcc_reg.hxs b/src/wixlib/vs2008/redist/vsipcc_reg.hxs
new file mode 100644
index 00000000..f6446867
--- /dev/null
+++ b/src/wixlib/vs2008/redist/vsipcc_reg.hxs
Binary files differ