aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPainter, Christopher P <chrpai@iswix.com>2018-12-20 13:57:18 -0600
committerPainter, Christopher P <chrpai@iswix.com>2018-12-20 13:57:18 -0600
commitfd7f8754b3c8807d39dcf8295a12ff32ec0264b4 (patch)
treef33d389b5e2b831eb04b8e92edf2ae9e2a6a0c15
parent600a864d8f22ca53bfbf70a111b21f4a83c33d07 (diff)
downloadwix-fd7f8754b3c8807d39dcf8295a12ff32ec0264b4.tar.gz
wix-fd7f8754b3c8807d39dcf8295a12ff32ec0264b4.tar.bz2
wix-fd7f8754b3c8807d39dcf8295a12ff32ec0264b4.zip
VS2019 Support
-rw-r--r--src/ca/vsca.cpp81
-rw-r--r--src/wixlib/VS2019.wxs143
-rw-r--r--src/wixlib/vs.wixproj1
3 files changed, 225 insertions, 0 deletions
diff --git a/src/ca/vsca.cpp b/src/ca/vsca.cpp
index 30174672..ac045db8 100644
--- a/src/ca/vsca.cpp
+++ b/src/ca/vsca.cpp
@@ -47,6 +47,12 @@ static HRESULT ProcessVS2017(
47 __in BOOL fComplete 47 __in BOOL fComplete
48 ); 48 );
49 49
50static HRESULT ProcessVS2019(
51 __in_opt ISetupInstance* pInstance,
52 __in DWORD64 qwVersion,
53 __in BOOL fComplete
54);
55
50static HRESULT SetPropertyForComponent( 56static HRESULT SetPropertyForComponent(
51 __in DWORD cComponents, 57 __in DWORD cComponents,
52 __in VS_COMPONENT_PROPERTY* rgComponents, 58 __in VS_COMPONENT_PROPERTY* rgComponents,
@@ -56,6 +62,7 @@ static HRESULT SetPropertyForComponent(
56static VS_INSTANCE vrgInstances[] = 62static VS_INSTANCE vrgInstances[] =
57{ 63{
58 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 }, 64 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 },
65 { FILEMAKEVERSION(16, 0, 0, 0), FILEMAKEVERSION(16, 0xffff, 0xffff, 0xffff), ProcessVS2019 },
59}; 66};
60 67
61/****************************************************************** 68/******************************************************************
@@ -407,6 +414,80 @@ LExit:
407 return hr; 414 return hr;
408} 415}
409 416
417static HRESULT ProcessVS2019(
418 __in_opt ISetupInstance* pInstance,
419 __in DWORD64 qwVersion,
420 __in BOOL fComplete
421)
422{
423 static ISetupInstance* pLatest = NULL;
424 static DWORD64 qwLatest = 0;
425
426 static LPCWSTR rgwzProducts[] =
427 {
428 L"Microsoft.VisualStudio.Product.Community",
429 L"Microsoft.VisualStudio.Product.Professional",
430 L"Microsoft.VisualStudio.Product.Enterprise",
431 };
432
433 // TODO: Consider making table-driven with these defaults per-version for easy customization.
434 static VS_COMPONENT_PROPERTY rgComponents[] =
435 {
436 { L"Microsoft.VisualStudio.Component.FSharp", L"VS2019_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" },
437 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2019_IDE_VB_PROJECTSYSTEM_INSTALLED" },
438 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" },
439 { L"Microsoft.VisualStudio.Component.TestTools.Core", L"VS2019_IDE_VSTS_TESTSYSTEM_INSTALLED" },
440 { L"Microsoft.VisualStudio.Component.VC.CoreIde", L"VS2019_IDE_VC_PROJECTSYSTEM_INSTALLED" },
441 { L"Microsoft.VisualStudio.Component.Web", L"VS2019_IDE_VWD_PROJECTSYSTEM_INSTALLED" },
442 { L"Microsoft.VisualStudio.PackageGroup.DslRuntime", L"VS2019_IDE_MODELING_PROJECTSYSTEM_INSTALLED" },
443 };
444
445 HRESULT hr = S_OK;
446
447 if (fComplete)
448 {
449 if (pLatest)
450 {
451 hr = ProcessInstance(pLatest, L"VS2019_ROOT_FOLDER", countof(rgComponents), rgComponents);
452 ExitOnFailure(hr, "Failed to process VS2019 instance.");
453 }
454 }
455 else if (pInstance)
456 {
457 hr = InstanceInProducts(pInstance, countof(rgwzProducts), rgwzProducts);
458 ExitOnFailure(hr, "Failed to compare product IDs.");
459
460 if (S_FALSE == hr)
461 {
462 ExitFunction();
463 }
464
465 hr = InstanceIsGreater(pLatest, qwLatest, pInstance, qwVersion);
466 ExitOnFailure(hr, "Failed to compare instances.");
467
468 if (S_FALSE == hr)
469 {
470 ExitFunction();
471 }
472
473 ReleaseNullObject(pLatest);
474
475 pLatest = pInstance;
476 qwLatest = qwVersion;
477
478 // Caller will do a final Release() otherwise.
479 pLatest->AddRef();
480 }
481
482LExit:
483 if (fComplete)
484 {
485 ReleaseObject(pLatest);
486 }
487
488 return hr;
489}
490
410static HRESULT SetPropertyForComponent( 491static HRESULT SetPropertyForComponent(
411 __in DWORD cComponents, 492 __in DWORD cComponents,
412 __in VS_COMPONENT_PROPERTY* rgComponents, 493 __in VS_COMPONENT_PROPERTY* rgComponents,
diff --git a/src/wixlib/VS2019.wxs b/src/wixlib/VS2019.wxs
new file mode 100644
index 00000000..57ae6168
--- /dev/null
+++ b/src/wixlib/VS2019.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="VS2019_ROOT_FOLDER" Secure="yes" />
8
9 <!-- Currently supported only on x86 -->
10 <CustomActionRef Id="VSFindInstances" />
11 </Fragment>
12
13 <Fragment>
14 <PropertyRef Id="VS2019_ROOT_FOLDER" />
15 <Property Id="VS2019_IDE_DIR" Secure="yes">
16 <DirectorySearch Id="VS2019DirectorySearch" Path="[VS2019_ROOT_FOLDER]">
17 <DirectorySearch Id="VS2019EnvironmentDirectorySearch" Path="Common7\IDE" Depth="1" />
18 </DirectorySearch>
19 </Property>
20 </Fragment>
21
22 <Fragment>
23 <Property Id="VS2019_EXTENSIONS_DIR" Secure="yes">
24 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
25 <DirectorySearch Id="VS2019ExtensionsDirectorySearch" Path="Extensions" Depth="1" />
26 </DirectorySearchRef>
27 </Property>
28 </Fragment>
29
30 <Fragment>
31 <Property Id="VS2019_PROJECTTEMPLATES_DIR" Secure="yes">
32 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
33 <DirectorySearch Id="VS2019ProjectTemplatesDirectorySearch" Path="ProjectTemplates" Depth="1" />
34 </DirectorySearchRef>
35 </Property>
36 </Fragment>
37
38 <Fragment>
39 <PropertyRef Id="VS2019_ROOT_FOLDER" />
40 <Property Id="VS2019_SCHEMAS_DIR" Secure="yes">
41 <DirectorySearch Id="VS2019XmlDirectorySearch" Path="[VS2019_ROOT_FOLDER]\Xml" Depth="1">
42 <DirectorySearch Id="VS2019XmlSchemasDirectorySearch" Path="Schemas" Depth="1" />
43 </DirectorySearch>
44 </Property>
45 </Fragment>
46
47 <Fragment>
48 <Property Id="VS2019_ITEMTEMPLATES_DIR" Secure="yes">
49 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
50 <DirectorySearch Id="VS2019ItemTemplatesDirectorySearch" Path="ItemTemplates" Depth="1" />
51 </DirectorySearchRef>
52 </Property>
53 </Fragment>
54
55 <Fragment>
56 <PropertyRef Id="VS2019_ROOT_FOLDER" />
57 <Property Id="VS2019_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
58 <DirectorySearch Id="VS2019SDKDirectorySearch" Path="[VS2019_ROOT_FOLDER]\SDK" Depth="1">
59 <DirectorySearch Id="SearchForVS2019BootstrapperPackageDirectory" Path="Bootstrapper" Depth="1" />
60 </DirectorySearch>
61 </Property>
62 </Fragment>
63
64 <Fragment>
65 <Property Id="VS2019DEVENV" Secure="yes">
66 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
67 <FileSearch Id="VS2019DevEnvSearch" Name="devenv.exe" />
68 </DirectorySearchRef>
69 </Property>
70 </Fragment>
71
72 <Fragment>
73 <CustomAction Id="VS2019Setup" Property="VS2019DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
74 <PropertyRef Id="VS2019DEVENV" />
75
76 <InstallExecuteSequence>
77 <Custom Action="VS2019Setup" Before="InstallFinalize" Overridable="yes">VS2019DEVENV</Custom>
78 </InstallExecuteSequence>
79 </Fragment>
80
81 <Fragment>
82 <CustomAction Id="VS2019InstallVSTemplates" Property="VS2019DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
83 <PropertyRef Id="VS2019DEVENV" />
84
85 <InstallExecuteSequence>
86 <Custom Action="VS2019InstallVSTemplates" Before="InstallFinalize" Overridable="yes">VS2019DEVENV</Custom>
87 </InstallExecuteSequence>
88 </Fragment>
89
90 <!-- Indicates whether the Visual C# project system is installed as a part of -->
91 <!-- Visual Studio 2019 standard or higher. If this property is set, that -->
92 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
93 <!-- C# language tools were installed as a part of VS 2019 setup. -->
94 <Fragment>
95 <Property Id="VS2019_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 2019 standard or higher. If this property is set, that -->
101 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
102 <!-- Basic language tools were installed as a part of VS 2019 setup. -->
103 <Fragment>
104 <Property Id="VS2019_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 2019 standard or higher. If this property is set, that -->
110 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
111 <!-- Web Developer language tools were installed as a part of VS 2019 setup. -->
112 <Fragment>
113 <Property Id="VS2019_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 2019 standard or higher. If this property is set, that -->
119 <!-- means Visual Studio 2019 standard or higher is installed and the Visual -->
120 <!-- C++ language tools were installed as a part of VS 2019 setup. -->
121 <Fragment>
122 <Property Id="VS2019_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes" />
123 <CustomActionRef Id="VSFindInstances" />
124 </Fragment>
125
126 <!-- Indicates whether the Visual Studio 2019 Team Test project system is installed -->
127 <Fragment>
128 <Property Id="VS2019_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="VS2019_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="VS2019_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
141 <CustomActionRef Id="VSFindInstances" />
142 </Fragment>
143</Wix>
diff --git a/src/wixlib/vs.wixproj b/src/wixlib/vs.wixproj
index f283e6ef..e18a52cd 100644
--- a/src/wixlib/vs.wixproj
+++ b/src/wixlib/vs.wixproj
@@ -23,6 +23,7 @@
23 <Compile Include="VS14.wxs" /> 23 <Compile Include="VS14.wxs" />
24 <Compile Include="VS2015.wxs" /> 24 <Compile Include="VS2015.wxs" />
25 <Compile Include="VS2017.wxs" /> 25 <Compile Include="VS2017.wxs" />
26 <Compile Include="VS2019.wxs" />
26 <Compile Include="VSExtension_x86.wxs" /> 27 <Compile Include="VSExtension_x86.wxs" />
27 <Compile Include="VsixPackage.wxs" /> 28 <Compile Include="VsixPackage.wxs" />
28 <Compile Include="vs2005\vs2005_VSIPCC_Collection_Files_RTL.wxs" /> 29 <Compile Include="vs2005\vs2005_VSIPCC_Collection_Files_RTL.wxs" />