aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2019-02-04 20:06:58 -0600
committerSean Hall <r.sean.hall@gmail.com>2019-02-04 20:11:32 -0600
commitc239e0cc3a28a50c42c63b086ee62e17cf699104 (patch)
tree5ba3e85a9bb1aef22a9162629b248a8e27e2c43f
parentcbc09b6cd6d0d0b8bf095a88d4d8333616637f71 (diff)
downloadwix-c239e0cc3a28a50c42c63b086ee62e17cf699104.tar.gz
wix-c239e0cc3a28a50c42c63b086ee62e17cf699104.tar.bz2
wix-c239e0cc3a28a50c42c63b086ee62e17cf699104.zip
Integrate into latest v4.
-rw-r--r--.editorconfig37
-rw-r--r--ComPlus.wixext.sln64
-rw-r--r--appveyor.cmd16
-rw-r--r--appveyor.yml42
-rw-r--r--nuget.config16
-rw-r--r--src/Cpp.Build.props106
-rw-r--r--src/Directory.Build.props28
-rw-r--r--src/Directory.Build.targets48
-rw-r--r--src/FindLocalWix.props8
-rw-r--r--src/Wix.Build.props31
-rw-r--r--src/ca/complusca.def (renamed from src/ca/cpexec.def)4
-rw-r--r--src/ca/complusca.vcxproj99
-rw-r--r--src/ca/cpappexec.cpp4
-rw-r--r--src/ca/cpappsched.cpp10
-rw-r--r--src/ca/cpasmexec.cpp133
-rw-r--r--src/ca/cpasmsched.cpp82
-rw-r--r--src/ca/cpasmsched.h30
-rw-r--r--src/ca/cpexec.cpp43
-rw-r--r--src/ca/cppartexec.cpp4
-rw-r--r--src/ca/cppartsched.cpp12
-rw-r--r--src/ca/cpsched.cpp36
-rw-r--r--src/ca/cpsubssched.cpp6
-rw-r--r--src/ca/cpsubssched.h2
-rw-r--r--src/ca/cputilexec.cpp56
-rw-r--r--src/ca/cputilexec.h14
-rw-r--r--src/ca/cputilsched.cpp28
-rw-r--r--src/ca/cputilsched.h26
-rw-r--r--src/ca/custommsierrors.h29
-rw-r--r--src/ca/dllmain.cpp27
-rw-r--r--src/ca/packages.config5
-rw-r--r--src/ca/precomp.h33
-rw-r--r--src/test/WixToolsetTest.ComPlus/ComPlusExtensionFixture.cs32
-rw-r--r--src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.en-us.wxl11
-rw-r--r--src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.wxs22
-rw-r--r--src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/PackageComponents.wxs12
-rw-r--r--src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/example.txt1
-rw-r--r--src/test/WixToolsetTest.ComPlus/WixToolsetTest.ComPlus.csproj38
-rw-r--r--src/wixext/ComPlusCompiler.cs1079
-rw-r--r--src/wixext/ComPlusDecompiler.cs4
-rw-r--r--src/wixext/ComPlusErrors.cs72
-rw-r--r--src/wixext/ComPlusExtensionData.cs50
-rw-r--r--src/wixext/ComPlusExtensionFactory.cs18
-rw-r--r--src/wixext/ComPlusWarnings.cs31
-rw-r--r--src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs26
-rw-r--r--src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusApplicationTuple.cs79
-rw-r--r--src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs55
-rw-r--r--src/wixext/Tuples/ComPlusAssemblyTuple.cs103
-rw-r--r--src/wixext/Tuples/ComPlusComponentPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusComponentTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusInterfaceTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusMethodPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusMethodTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusPartitionRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionUserTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForComponentTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForMethodTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusSubscriptionTuple.cs95
-rw-r--r--src/wixext/Tuples/ComPlusTupleDefinitions.cs135
-rw-r--r--src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs71
-rw-r--r--src/wixext/WixComPlusExtension.csproj50
-rw-r--r--src/wixext/WixToolset.ComPlus.wixext.csproj33
-rw-r--r--src/wixext/WixToolset.ComPlus.wixext.targets11
-rw-r--r--src/wixext/messages.xml77
-rw-r--r--src/wixlib/ComPlusExtension.wixproj26
-rw-r--r--src/wixlib/ComPlusExtension.wxs58
-rw-r--r--src/wixlib/caerr.wxi96
-rw-r--r--src/wixlib/complus.wixproj36
-rw-r--r--src/wixlib/packages.config5
-rw-r--r--version.json11
80 files changed, 3717 insertions, 1047 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..1d72e683
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,37 @@
1# Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2#
3# Do NOT modify this file. Update the canonical version in Home\repo-template\src\.editorconfig
4# then update all of the repos.
5
6root = true
7
8[*]
9charset = utf-8
10indent_style = space
11indent_size = 4
12trim_trailing_whitespace = true
13
14[*.{cs,vb}]
15dotnet_sort_system_directives_first = true
16
17[*.cs]
18csharp_indent_case_contents = true : error
19csharp_indent_switch_labels = true : error
20csharp_new_line_before_open_brace = all
21csharp_prefer_braces = true : error
22csharp_style_expression_bodied_methods = when_on_single_line : suggestion
23csharp_style_expression_bodied_constructors = when_on_single_line : suggestion
24csharp_style_expression_bodied_operators = when_on_single_line : suggestion
25csharp_style_expression_bodied_properties = when_on_single_line : suggestion
26csharp_style_expression_bodied_indexers = when_on_single_line : suggestion
27csharp_style_expression_bodied_accessors = when_on_single_line : suggestion
28csharp_style_var_elsewhere = true : suggestion
29csharp_style_var_for_built_in_types = true : suggestion
30csharp_style_var_when_type_is_apparent = true : suggestion
31dotnet_style_qualification_for_event = true : error
32dotnet_style_qualification_for_field = true : error
33dotnet_style_qualification_for_method = true : error
34dotnet_style_qualification_for_property = true : error
35
36[*.targets]
37indent_size = 2
diff --git a/ComPlus.wixext.sln b/ComPlus.wixext.sln
new file mode 100644
index 00000000..f117e399
--- /dev/null
+++ b/ComPlus.wixext.sln
@@ -0,0 +1,64 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15
4VisualStudioVersion = 15.0.28010.2016
5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "complusca", "src\ca\complusca.vcxproj", "{BDEF51ED-E242-4FA2-801A-01B127DF851A}"
7EndProject
8Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "complus", "src\wixlib\complus.wixproj", "{E191E61E-E098-4F71-888F-51A79F952022}"
9 ProjectSection(ProjectDependencies) = postProject
10 {BDEF51ED-E242-4FA2-801A-01B127DF851A} = {BDEF51ED-E242-4FA2-801A-01B127DF851A}
11 EndProjectSection
12EndProject
13Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.ComPlus.wixext", "src\wixext\WixToolset.ComPlus.wixext.csproj", "{1497B777-330B-4CFE-927A-22850CD24D64}"
14EndProject
15Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.ComPlus", "src\test\WixToolsetTest.ComPlus\WixToolsetTest.ComPlus.csproj", "{2FC5F039-EACF-428B-BA87-8CDE1D25E121}"
16EndProject
17Global
18 GlobalSection(SolutionConfigurationPlatforms) = preSolution
19 Debug|Any CPU = Debug|Any CPU
20 Debug|x86 = Debug|x86
21 Release|Any CPU = Release|Any CPU
22 Release|x86 = Release|x86
23 EndGlobalSection
24 GlobalSection(ProjectConfigurationPlatforms) = postSolution
25 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Debug|Any CPU.ActiveCfg = Debug|Win32
26 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Debug|Any CPU.Build.0 = Debug|Win32
27 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Debug|x86.ActiveCfg = Debug|Win32
28 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Debug|x86.Build.0 = Debug|Win32
29 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Release|Any CPU.ActiveCfg = Release|Win32
30 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Release|Any CPU.Build.0 = Release|Win32
31 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Release|x86.ActiveCfg = Release|Win32
32 {BDEF51ED-E242-4FA2-801A-01B127DF851A}.Release|x86.Build.0 = Release|Win32
33 {E191E61E-E098-4F71-888F-51A79F952022}.Debug|Any CPU.ActiveCfg = Debug|x86
34 {E191E61E-E098-4F71-888F-51A79F952022}.Debug|Any CPU.Build.0 = Debug|x86
35 {E191E61E-E098-4F71-888F-51A79F952022}.Debug|x86.ActiveCfg = Debug|x86
36 {E191E61E-E098-4F71-888F-51A79F952022}.Debug|x86.Build.0 = Debug|x86
37 {E191E61E-E098-4F71-888F-51A79F952022}.Release|Any CPU.ActiveCfg = Release|x86
38 {E191E61E-E098-4F71-888F-51A79F952022}.Release|Any CPU.Build.0 = Release|x86
39 {E191E61E-E098-4F71-888F-51A79F952022}.Release|x86.ActiveCfg = Release|x86
40 {E191E61E-E098-4F71-888F-51A79F952022}.Release|x86.Build.0 = Release|x86
41 {1497B777-330B-4CFE-927A-22850CD24D64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
42 {1497B777-330B-4CFE-927A-22850CD24D64}.Debug|Any CPU.Build.0 = Debug|Any CPU
43 {1497B777-330B-4CFE-927A-22850CD24D64}.Debug|x86.ActiveCfg = Debug|Any CPU
44 {1497B777-330B-4CFE-927A-22850CD24D64}.Debug|x86.Build.0 = Debug|Any CPU
45 {1497B777-330B-4CFE-927A-22850CD24D64}.Release|Any CPU.ActiveCfg = Release|Any CPU
46 {1497B777-330B-4CFE-927A-22850CD24D64}.Release|Any CPU.Build.0 = Release|Any CPU
47 {1497B777-330B-4CFE-927A-22850CD24D64}.Release|x86.ActiveCfg = Release|Any CPU
48 {1497B777-330B-4CFE-927A-22850CD24D64}.Release|x86.Build.0 = Release|Any CPU
49 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
50 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Debug|Any CPU.Build.0 = Debug|Any CPU
51 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Debug|x86.ActiveCfg = Debug|Any CPU
52 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Debug|x86.Build.0 = Debug|Any CPU
53 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Release|Any CPU.ActiveCfg = Release|Any CPU
54 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Release|Any CPU.Build.0 = Release|Any CPU
55 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Release|x86.ActiveCfg = Release|Any CPU
56 {2FC5F039-EACF-428B-BA87-8CDE1D25E121}.Release|x86.Build.0 = Release|Any CPU
57 EndGlobalSection
58 GlobalSection(SolutionProperties) = preSolution
59 HideSolutionNode = FALSE
60 EndGlobalSection
61 GlobalSection(ExtensibilityGlobals) = postSolution
62 SolutionGuid = {3E1857C4-5EE1-4C9E-9390-9954E041546D}
63 EndGlobalSection
64EndGlobal
diff --git a/appveyor.cmd b/appveyor.cmd
new file mode 100644
index 00000000..8a48fe2b
--- /dev/null
+++ b/appveyor.cmd
@@ -0,0 +1,16 @@
1@setlocal
2@pushd %~dp0
3
4nuget restore
5
6msbuild -p:Configuration=Release -t:Restore
7
8msbuild -p:Configuration=Release -p:Platform=Win32 src\ca\complusca.vcxproj
9msbuild -p:Configuration=Release -p:Platform=x64 src\ca\complusca.vcxproj
10
11msbuild -p:Configuration=Release src\test\WixToolsetTest.ComPlus\WixToolsetTest.ComPlus.csproj
12
13msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.ComPlus.wixext.csproj
14
15@popd
16@endlocal \ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 00000000..8d80c6af
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,42 @@
1# Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2#
3# Do NOT modify this file. Update the canonical version in Home\repo-template\src\appveyor.yml
4# then update all of the repos.
5
6branches:
7 only:
8 - master
9 - develop
10
11image: Visual Studio 2017
12
13version: 0.0.0.{build}
14configuration: Release
15
16environment:
17 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
18 DOTNET_CLI_TELEMETRY_OPTOUT: 1
19 NUGET_XMLDOC_MODE: skip
20
21build_script:
22 - appveyor.cmd
23
24pull_requests:
25 do_not_increment_build_number: true
26
27nuget:
28 disable_publish_on_pr: true
29
30skip_branch_with_pr: true
31skip_tags: true
32
33artifacts:
34- path: build\Release\**\*.nupkg
35 name: nuget
36- path: build\Release\**\*.msi
37 name: msi
38
39notifications:
40- provider: Slack
41 incoming_webhook:
42 secure: p5xuu+4x2JHfwGDMDe5KcG1k7gZxqYc4jWVwvyNZv5cvkubPD2waJs5yXMAXZNN7Z63/3PWHb7q4KoY/99AjauYa1nZ4c5qYqRPFRBKTHfA=
diff --git a/nuget.config b/nuget.config
new file mode 100644
index 00000000..aaee3228
--- /dev/null
+++ b/nuget.config
@@ -0,0 +1,16 @@
1<?xml version="1.0" encoding="utf-8"?>
2<configuration>
3 <packageSources>
4 <clear />
5 <add key="wixtoolset-data" value="https://ci.appveyor.com/nuget/wixtoolset-data" />
6 <add key="wixtoolset-extensibility" value="https://ci.appveyor.com/nuget/wixtoolset-extensibility" />
7 <add key="wixtoolset-core" value="https://ci.appveyor.com/nuget/wixtoolset-core" />
8 <add key="wixtoolset-core-native" value="https://ci.appveyor.com/nuget/wixtoolset-core-native" />
9 <add key="wixtoolset-dtf" value="https://ci.appveyor.com/nuget/wixtoolset-dtf" />
10 <add key="wixtoolset-dutil" value="https://ci.appveyor.com/nuget/wixtoolset-dutil" />
11 <add key="wixtoolset-wcautil" value="https://ci.appveyor.com/nuget/wixtoolset-wcautil" />
12 <add key="wixtoolset-tools" value="https://ci.appveyor.com/nuget/wixtoolset-tools" />
13 <add key="wixbuildtools" value="https://ci.appveyor.com/nuget/wixbuildtools" />
14 <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
15 </packageSources>
16</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..c6ced58e
--- /dev/null
+++ b/src/Cpp.Build.props
@@ -0,0 +1,106 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project>
5 <PropertyGroup>
6 <Platform Condition=" '$(Platform)' == '' OR '$(Platform)' == 'AnyCPU' OR '$(Platform)' == 'x86' ">Win32</Platform>
7 <NormalizedPlatform Condition=" '$(Platform)'=='Win32' ">x86</NormalizedPlatform>
8 <NormalizedPlatform Condition=" '$(NormalizedPlatform)'=='' ">$(Platform)</NormalizedPlatform>
9 <IntDir>$(BaseIntermediateOutputPath)$(Configuration)\$(NormalizedPlatform)\</IntDir>
10 <OutDir>$(OutputPath)$(NormalizedPlatform)\</OutDir>
11 </PropertyGroup>
12
13 <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' AND '$(VisualStudioVersion)'=='15.0'">
14 <WindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion>
15 </PropertyGroup>
16
17 <ItemDefinitionGroup>
18 <ClCompile>
19 <DisableSpecificWarnings>$(DisableSpecificCompilerWarnings)</DisableSpecificWarnings>
20 <WarningLevel>Level4</WarningLevel>
21 <AdditionalIncludeDirectories>$(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
22 <PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
23 <PrecompiledHeader>Use</PrecompiledHeader>
24 <PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
25 <CallingConvention Condition="'$(Platform)'=='Win32'">StdCall</CallingConvention>
26 <TreatWarningAsError>true</TreatWarningAsError>
27 <ExceptionHandling>false</ExceptionHandling>
28 <AdditionalOptions>-YlprecompDefine</AdditionalOptions>
29 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
30 <MultiProcessorCompilation Condition=" $(NUMBER_OF_PROCESSORS) &gt; 4 ">true</MultiProcessorCompilation>
31 </ClCompile>
32 <ResourceCompile>
33 <PreprocessorDefinitions>$(ArmPreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
34 <AdditionalIncludeDirectories>$(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
35 </ResourceCompile>
36 <Lib>
37 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
38 </Lib>
39 <Link>
40 <SubSystem>$(ProjectSubSystem)</SubSystem>
41 <ModuleDefinitionFile>$(ProjectModuleDefinitionFile)</ModuleDefinitionFile>
42 <NoEntryPoint>$(ResourceOnlyDll)</NoEntryPoint>
43 <GenerateDebugInformation>true</GenerateDebugInformation>
44 <AdditionalDependencies>$(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
45 <AdditionalLibraryDirectories>$(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
46 <AdditionalOptions Condition=" $(PlatformToolset.StartsWith('v14')) ">/IGNORE:4099 %(AdditionalOptions)</AdditionalOptions>
47 </Link>
48 </ItemDefinitionGroup>
49
50 <ItemDefinitionGroup Condition=" '$(Platform)'=='Win32' and '$(PlatformToolset)'!='v100'">
51 <ClCompile>
52 <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
53 </ClCompile>
54 </ItemDefinitionGroup>
55 <ItemDefinitionGroup Condition=" '$(Platform)'=='arm' ">
56 <ClCompile>
57 <CallingConvention>CDecl</CallingConvention>
58 </ClCompile>
59 </ItemDefinitionGroup>
60 <ItemDefinitionGroup Condition=" '$(ConfigurationType)'=='StaticLibrary' ">
61 <ClCompile>
62 <DebugInformationFormat>OldStyle</DebugInformationFormat>
63 <OmitDefaultLibName>true</OmitDefaultLibName>
64 <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
65 </ClCompile>
66 </ItemDefinitionGroup>
67 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' ">
68 <ClCompile>
69 <Optimization>Disabled</Optimization>
70 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
71 <PreprocessorDefinitions>_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
72 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
73 </ClCompile>
74 </ItemDefinitionGroup>
75 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Debug' and '$(CLRSupport)'=='true' ">
76 <ClCompile>
77 <BasicRuntimeChecks></BasicRuntimeChecks>
78 <RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
79 </ClCompile>
80 </ItemDefinitionGroup>
81 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' ">
82 <ClCompile>
83 <Optimization>MinSpace</Optimization>
84 <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
85 <FunctionLevelLinking>true</FunctionLevelLinking>
86 <IntrinsicFunctions>true</IntrinsicFunctions>
87 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
88 </ClCompile>
89 <Link>
90 <EnableCOMDATFolding>true</EnableCOMDATFolding>
91 <OptimizeReferences>true</OptimizeReferences>
92 </Link>
93 </ItemDefinitionGroup>
94 <ItemDefinitionGroup Condition=" '$(Configuration)'=='Release' and '$(CLRSupport)'=='true' ">
95 <ClCompile>
96 <BasicRuntimeChecks></BasicRuntimeChecks>
97 <RuntimeLibrary>MultiThreadedDll</RuntimeLibrary>
98 </ClCompile>
99 </ItemDefinitionGroup>
100 <ItemDefinitionGroup Condition=" '$(CLRSupport)'=='true' ">
101 <Link>
102 <KeyFile>$(LinkKeyFile)</KeyFile>
103 <DelaySign>$(LinkDelaySign)</DelaySign>
104 </Link>
105 </ItemDefinitionGroup>
106</Project>
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 00000000..a22f4470
--- /dev/null
+++ b/src/Directory.Build.props
@@ -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 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.props
5 then update all of the repos.
6-->
7<Project>
8 <PropertyGroup>
9 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
10 <EnableSourceLink Condition=" '$(NCrunch)' == '1' ">false</EnableSourceLink>
11 <MSBuildWarningsAsMessages>MSB3246</MSBuildWarningsAsMessages>
12
13 <ProjectName Condition=" '$(ProjectName)' == '' ">$(MSBuildProjectName)</ProjectName>
14 <BaseOutputPath>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\build\))</BaseOutputPath>
15 <BaseIntermediateOutputPath>$(BaseOutputPath)obj\$(ProjectName)\</BaseIntermediateOutputPath>
16 <OutputPath>$(BaseOutputPath)$(Configuration)\</OutputPath>
17
18 <Authors>WiX Toolset Team</Authors>
19 <Company>WiX Toolset</Company>
20 <Copyright>Copyright (c) .NET Foundation and contributors. All rights reserved.</Copyright>
21 <PackageLicenseExpression>MS-RL</PackageLicenseExpression>
22 <Product>WiX Toolset</Product>
23 </PropertyGroup>
24
25 <Import Project="Cpp.Build.props" Condition=" Exists('Cpp.Build.props') And '$(MSBuildProjectExtension)'=='.vcxproj' " />
26 <Import Project="Wix.Build.props" Condition=" Exists('Wix.Build.props') And '$(MSBuildProjectExtension)'=='.wixproj' " />
27 <Import Project="Custom.Build.props" Condition=" Exists('Custom.Build.props') " />
28</Project>
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
new file mode 100644
index 00000000..dac7452a
--- /dev/null
+++ b/src/Directory.Build.targets
@@ -0,0 +1,48 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3<!--
4 Do NOT modify this file. Update the canonical version in Home\repo-template\src\Directory.Build.targets
5 then update all of the repos.
6-->
7<!--
8 Replace PackageReferences with ProjectReferences when the projects can be found in .sln.
9 See the original here: https://github.com/dotnet/sdk/issues/1151#issuecomment-385133284
10-->
11<Project>
12 <PropertyGroup>
13 <ReplacePackageReferences>true</ReplacePackageReferences>
14 <TheSolutionPath Condition=" '$(NCrunch)'=='' ">$(SolutionPath)</TheSolutionPath>
15 <TheSolutionPath Condition=" '$(NCrunch)'=='1' ">$(NCrunchOriginalSolutionPath)</TheSolutionPath>
16 </PropertyGroup>
17
18 <Choose>
19 <When Condition="$(ReplacePackageReferences) AND '$(TheSolutionPath)' != '' AND '$(TheSolutionPath)' != '*undefined*' AND Exists('$(TheSolutionPath)')">
20
21 <PropertyGroup>
22 <SolutionFileContent>$([System.IO.File]::ReadAllText($(TheSolutionPath)))</SolutionFileContent>
23 <SmartSolutionDir>$([System.IO.Path]::GetDirectoryName( $(TheSolutionPath) ))</SmartSolutionDir>
24 <RegexPattern>(?&lt;="[PackageName]", ")(.*)(?=", ")</RegexPattern>
25 </PropertyGroup>
26
27 <ItemGroup>
28 <!-- Keep the identity of the PackageReference -->
29 <SmartPackageReference Include="@(PackageReference)">
30 <PackageName>%(Identity)</PackageName>
31 <InSolution>$(SolutionFileContent.Contains('\%(Identity).csproj'))</InSolution>
32 </SmartPackageReference>
33
34 <!-- Filter them by mapping them to another ItemGroup using the WithMetadataValue item function -->
35 <PackageInSolution Include="@(SmartPackageReference->WithMetadataValue('InSolution', True))">
36 <Pattern>$(RegexPattern.Replace('[PackageName]','%(PackageName)') )</Pattern>
37 <SmartPath>$([System.Text.RegularExpressions.Regex]::Match('$(SolutionFileContent)', '%(Pattern)'))</SmartPath>
38 </PackageInSolution>
39
40 <ProjectReference Include="@(PackageInSolution->'$(SmartSolutionDir)\%(SmartPath)' )"/>
41
42 <!-- Remove the package references that are now referenced as projects -->
43 <PackageReference Remove="@(PackageInSolution->'%(PackageName)' )"/>
44 </ItemGroup>
45
46 </When>
47 </Choose>
48</Project>
diff --git a/src/FindLocalWix.props b/src/FindLocalWix.props
new file mode 100644
index 00000000..a784e352
--- /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)' == 'Debug' And Exists('$(MSBuildThisFileDirectory)..\..\Tools\README.md') ">$(MSBuildThisFileDirectory)..\..\Tools\build\Debug\net461\wix.targets</WixTargetsPath>
7 </PropertyGroup>
8</Project>
diff --git a/src/Wix.Build.props b/src/Wix.Build.props
new file mode 100644
index 00000000..a81c9615
--- /dev/null
+++ b/src/Wix.Build.props
@@ -0,0 +1,31 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project>
5 <PropertyGroup>
6 <DefineConstants>$(DefineConstants);CompanyName=$(Company)</DefineConstants>
7 <OutputPath_x86>$(OutputPath)x86\</OutputPath_x86>
8 <OutputPath_x64>$(OutputPath)x64\</OutputPath_x64>
9 <OutputPath_arm>$(OutputPath)ARM\</OutputPath_arm>
10 <OutputPath_arm64>$(OutputPath)ARM64\</OutputPath_arm64>
11 <OutputPath_win32>$(OutputPath)Win32\</OutputPath_win32>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <BindInputPaths Include="$(OutputPath_x86)">
16 <BindName>x86</BindName>
17 </BindInputPaths>
18 <BindInputPaths Include="$(OutputPath_x64)">
19 <BindName>x64</BindName>
20 </BindInputPaths>
21 <BindInputPaths Include="$(OutputPath_arm)">
22 <BindName>arm</BindName>
23 </BindInputPaths>
24 <BindInputPaths Include="$(OutputPath_arm64)">
25 <BindName>arm64</BindName>
26 </BindInputPaths>
27 <BindInputPaths Include="$(OutputPath_win32)">
28 <BindName>win32</BindName>
29 </BindInputPaths>
30 </ItemGroup>
31</Project>
diff --git a/src/ca/cpexec.def b/src/ca/complusca.def
index 1dad15c2..7c475759 100644
--- a/src/ca/cpexec.def
+++ b/src/ca/complusca.def
@@ -1,6 +1,8 @@
1; Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 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 2
3 3
4LIBRARY "complusca"
5
4EXPORTS 6EXPORTS
5 ComPlusPrepare 7 ComPlusPrepare
6 ComPlusCleanup 8 ComPlusCleanup
@@ -9,3 +11,5 @@ EXPORTS
9 ComPlusRollbackInstallExecute 11 ComPlusRollbackInstallExecute
10 ComPlusUninstallExecute 12 ComPlusUninstallExecute
11 ComPlusRollbackUninstallExecute 13 ComPlusRollbackUninstallExecute
14 ConfigureComPlusInstall
15 ConfigureComPlusUninstall
diff --git a/src/ca/complusca.vcxproj b/src/ca/complusca.vcxproj
new file mode 100644
index 00000000..5085f61d
--- /dev/null
+++ b/src/ca/complusca.vcxproj
@@ -0,0 +1,99 @@
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.16\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.16\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 <ProjectConfiguration Include="Debug|x64">
18 <Configuration>Debug</Configuration>
19 <Platform>x64</Platform>
20 </ProjectConfiguration>
21 <ProjectConfiguration Include="Release|x64">
22 <Configuration>Release</Configuration>
23 <Platform>x64</Platform>
24 </ProjectConfiguration>
25 </ItemGroup>
26
27 <PropertyGroup Label="Globals">
28 <ProjectGuid>{BDEF51ED-E242-4FA2-801A-01B127DF851A}</ProjectGuid>
29 <ConfigurationType>DynamicLibrary</ConfigurationType>
30 <PlatformToolset>v141</PlatformToolset>
31 <CharacterSet>Unicode</CharacterSet>
32 <TargetName>complusca</TargetName>
33 <ProjectModuleDefinitionFile>complusca.def</ProjectModuleDefinitionFile>
34 <Description>WiX Toolset ComPlus CustomAction</Description>
35 </PropertyGroup>
36
37 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
38 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
39
40 <PropertyGroup>
41 <ProjectAdditionalLinkLibraries>msi.lib</ProjectAdditionalLinkLibraries>
42 </PropertyGroup>
43
44 <ItemGroup>
45 <ClCompile Include="cpappexec.cpp" />
46 <ClCompile Include="cpapproleexec.cpp" />
47 <ClCompile Include="cpapprolesched.cpp" />
48 <ClCompile Include="cpappsched.cpp" />
49 <ClCompile Include="cpasmexec.cpp" />
50 <ClCompile Include="cpasmsched.cpp" />
51 <ClCompile Include="cpexec.cpp" />
52 <ClCompile Include="cppartexec.cpp" />
53 <ClCompile Include="cppartroleexec.cpp" />
54 <ClCompile Include="cppartrolesched.cpp" />
55 <ClCompile Include="cppartsched.cpp" />
56 <ClCompile Include="cpsched.cpp" />
57 <ClCompile Include="cpsubsexec.cpp" />
58 <ClCompile Include="cpsubssched.cpp" />
59 <ClCompile Include="cputilexec.cpp" />
60 <ClCompile Include="cputilsched.cpp" />
61 <ClCompile Include="dllmain.cpp">
62 <PrecompiledHeader>Create</PrecompiledHeader>
63 </ClCompile>
64 </ItemGroup>
65
66 <ItemGroup>
67 <ClInclude Include="cpappexec.h" />
68 <ClInclude Include="cpapproleexec.h" />
69 <ClInclude Include="cpapprolesched.h" />
70 <ClInclude Include="cpappsched.h" />
71 <ClInclude Include="cpasmexec.h" />
72 <ClInclude Include="cpasmsched.h" />
73 <ClInclude Include="cpcost.h" />
74 <ClInclude Include="cppartexec.h" />
75 <ClInclude Include="cppartroleexec.h" />
76 <ClInclude Include="cppartrolesched.h" />
77 <ClInclude Include="cppartsched.h" />
78 <ClInclude Include="cpsubsexec.h" />
79 <ClInclude Include="cpsubssched.h" />
80 <ClInclude Include="cputilexec.h" />
81 <ClInclude Include="cputilsched.h" />
82 <ClInclude Include="precomp.h" />
83 </ItemGroup>
84
85 <ItemGroup>
86 <None Include="packages.config" />
87 <None Include="complusca.def" />
88 </ItemGroup>
89
90 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
91
92 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
93 <PropertyGroup>
94 <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>
95 </PropertyGroup>
96 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.16\build\WixToolset.DUtil.props'))" />
97 <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'))" />
98 </Target>
99</Project>
diff --git a/src/ca/cpappexec.cpp b/src/ca/cpappexec.cpp
index 43d6cd6d..48948210 100644
--- a/src/ca/cpappexec.cpp
+++ b/src/ca/cpappexec.cpp
@@ -239,7 +239,7 @@ static HRESULT CreateApplication(
239 WcaLog(LOGMSG_VERBOSE, "Creating application, key: %S", pAttrs->pwzKey); 239 WcaLog(LOGMSG_VERBOSE, "Creating application, key: %S", pAttrs->pwzKey);
240 240
241 // get applications collection 241 // get applications collection
242 hr = CpiGetApplicationsCollection(pAttrs->pwzPartID, &piAppColl); 242 hr = CpiExecGetApplicationsCollection(pAttrs->pwzPartID, &piAppColl);
243 if (S_FALSE == hr) 243 if (S_FALSE == hr)
244 hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); 244 hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
245 ExitOnFailure(hr, "Failed to get applications collection"); 245 ExitOnFailure(hr, "Failed to get applications collection");
@@ -304,7 +304,7 @@ static HRESULT RemoveApplication(
304 WcaLog(LOGMSG_VERBOSE, "Removing application, key: %S", pAttrs->pwzKey); 304 WcaLog(LOGMSG_VERBOSE, "Removing application, key: %S", pAttrs->pwzKey);
305 305
306 // get applications collection 306 // get applications collection
307 hr = CpiGetApplicationsCollection(pAttrs->pwzPartID, &piAppColl); 307 hr = CpiExecGetApplicationsCollection(pAttrs->pwzPartID, &piAppColl);
308 ExitOnFailure(hr, "Failed to get applications collection"); 308 ExitOnFailure(hr, "Failed to get applications collection");
309 309
310 if (S_FALSE == hr) 310 if (S_FALSE == hr)
diff --git a/src/ca/cpappsched.cpp b/src/ca/cpappsched.cpp
index cec99794..1fb2203b 100644
--- a/src/ca/cpappsched.cpp
+++ b/src/ca/cpappsched.cpp
@@ -579,7 +579,7 @@ HRESULT CpiGetRolesCollForApplication(
579 if (pApp->pPartition) 579 if (pApp->pPartition)
580 hr = CpiGetApplicationsCollForPartition(pApp->pPartition, &piAppColl); 580 hr = CpiGetApplicationsCollForPartition(pApp->pPartition, &piAppColl);
581 else 581 else
582 hr = CpiGetApplicationsCollection(&piAppColl); 582 hr = CpiSchedGetApplicationsCollection(&piAppColl);
583 ExitOnFailure(hr, "Failed to get applications collection"); 583 ExitOnFailure(hr, "Failed to get applications collection");
584 584
585 if (S_FALSE == hr) 585 if (S_FALSE == hr)
@@ -593,7 +593,7 @@ HRESULT CpiGetRolesCollForApplication(
593 ExitFunction(); // exit with hr = S_FALSE 593 ExitFunction(); // exit with hr = S_FALSE
594 594
595 // get roles collection 595 // get roles collection
596 hr = CpiGetCatalogCollection(piAppColl, piAppObj, L"Roles", &pApp->piRolesColl); 596 hr = CpiSchedGetCatalogCollection(piAppColl, piAppObj, L"Roles", &pApp->piRolesColl);
597 ExitOnFailure(hr, "Failed to get roles collection"); 597 ExitOnFailure(hr, "Failed to get roles collection");
598 } 598 }
599 599
@@ -632,7 +632,7 @@ HRESULT CpiGetComponentsCollForApplication(
632 if (pApp->pPartition) 632 if (pApp->pPartition)
633 hr = CpiGetApplicationsCollForPartition(pApp->pPartition, &piAppColl); 633 hr = CpiGetApplicationsCollForPartition(pApp->pPartition, &piAppColl);
634 else 634 else
635 hr = CpiGetApplicationsCollection(&piAppColl); 635 hr = CpiSchedGetApplicationsCollection(&piAppColl);
636 ExitOnFailure(hr, "Failed to get applications collection"); 636 ExitOnFailure(hr, "Failed to get applications collection");
637 637
638 if (S_FALSE == hr) 638 if (S_FALSE == hr)
@@ -646,7 +646,7 @@ HRESULT CpiGetComponentsCollForApplication(
646 ExitFunction(); // exit with hr = S_FALSE 646 ExitFunction(); // exit with hr = S_FALSE
647 647
648 // get roles collection 648 // get roles collection
649 hr = CpiGetCatalogCollection(piAppColl, piAppObj, L"Components", &pApp->piCompsColl); 649 hr = CpiSchedGetCatalogCollection(piAppColl, piAppObj, L"Components", &pApp->piCompsColl);
650 ExitOnFailure(hr, "Failed to get components collection"); 650 ExitOnFailure(hr, "Failed to get components collection");
651 } 651 }
652 652
@@ -695,7 +695,7 @@ static HRESULT FindObjectForApplication(
695 if (pItm->pPartition) 695 if (pItm->pPartition)
696 hr = CpiGetApplicationsCollForPartition(pItm->pPartition, &piAppColl); 696 hr = CpiGetApplicationsCollForPartition(pItm->pPartition, &piAppColl);
697 else 697 else
698 hr = CpiGetApplicationsCollection(&piAppColl); 698 hr = CpiSchedGetApplicationsCollection(&piAppColl);
699 ExitOnFailure(hr, "Failed to get applications collection"); 699 ExitOnFailure(hr, "Failed to get applications collection");
700 700
701 if (S_FALSE == hr) 701 if (S_FALSE == hr)
diff --git a/src/ca/cpasmexec.cpp b/src/ca/cpasmexec.cpp
index 339c08e1..3d140027 100644
--- a/src/ca/cpasmexec.cpp
+++ b/src/ca/cpasmexec.cpp
@@ -75,58 +75,47 @@ enum eInstallationFlags {
75}; 75};
76 76
77 77
78// private constants
79
80enum eAssemblyAttributes
81{
82 aaEventClass = (1 << 0),
83 aaDotNetAssembly = (1 << 1),
84 aaPathFromGAC = (1 << 2),
85 aaRunInCommit = (1 << 3)
86};
87
88
89// private structs 78// private structs
90 79
91struct CPI_ROLE_ASSIGNMENT 80struct CPIEXEC_ROLE_ASSIGNMENT
92{ 81{
93 WCHAR wzKey[MAX_DARWIN_KEY + 1]; 82 WCHAR wzKey[MAX_DARWIN_KEY + 1];
94 WCHAR wzRoleName[MAX_DARWIN_COLUMN + 1]; 83 WCHAR wzRoleName[MAX_DARWIN_COLUMN + 1];
95 84
96 CPI_ROLE_ASSIGNMENT* pNext; 85 CPIEXEC_ROLE_ASSIGNMENT* pNext;
97}; 86};
98 87
99struct CPI_METHOD 88struct CPIEXEC_METHOD
100{ 89{
101 WCHAR wzIndex[11 + 1]; 90 WCHAR wzIndex[11 + 1];
102 WCHAR wzName[MAX_DARWIN_COLUMN + 1]; 91 WCHAR wzName[MAX_DARWIN_COLUMN + 1];
103 92
104 CPI_PROPERTY* pPropertyList; 93 CPI_PROPERTY* pPropertyList;
105 CPI_ROLE_ASSIGNMENT* pRoleAssignmentList; 94 CPIEXEC_ROLE_ASSIGNMENT* pRoleAssignmentList;
106 95
107 CPI_METHOD* pNext; 96 CPIEXEC_METHOD* pNext;
108}; 97};
109 98
110struct CPI_INTERFACE 99struct CPIEXEC_INTERFACE
111{ 100{
112 WCHAR wzIID[CPI_MAX_GUID + 1]; 101 WCHAR wzIID[CPI_MAX_GUID + 1];
113 102
114 CPI_PROPERTY* pPropertyList; 103 CPI_PROPERTY* pPropertyList;
115 CPI_ROLE_ASSIGNMENT* pRoleAssignmentList; 104 CPIEXEC_ROLE_ASSIGNMENT* pRoleAssignmentList;
116 CPI_METHOD* pMethodList; 105 CPIEXEC_METHOD* pMethodList;
117 106
118 CPI_INTERFACE* pNext; 107 CPIEXEC_INTERFACE* pNext;
119}; 108};
120 109
121struct CPI_COMPONENT 110struct CPIEXEC_COMPONENT
122{ 111{
123 WCHAR wzCLSID[CPI_MAX_GUID + 1]; 112 WCHAR wzCLSID[CPI_MAX_GUID + 1];
124 113
125 CPI_PROPERTY* pPropertyList; 114 CPI_PROPERTY* pPropertyList;
126 CPI_ROLE_ASSIGNMENT* pRoleAssignmentList; 115 CPIEXEC_ROLE_ASSIGNMENT* pRoleAssignmentList;
127 CPI_INTERFACE* pInterfaceList; 116 CPIEXEC_INTERFACE* pInterfaceList;
128 117
129 CPI_COMPONENT* pNext; 118 CPIEXEC_COMPONENT* pNext;
130}; 119};
131 120
132struct CPI_ASSEMBLY_ATTRIBUTES 121struct CPI_ASSEMBLY_ATTRIBUTES
@@ -141,7 +130,7 @@ struct CPI_ASSEMBLY_ATTRIBUTES
141 LPWSTR pwzAppID; 130 LPWSTR pwzAppID;
142 LPWSTR pwzPartID; 131 LPWSTR pwzPartID;
143 int iAttributes; 132 int iAttributes;
144 CPI_COMPONENT* pCompList; 133 CPIEXEC_COMPONENT* pCompList;
145}; 134};
146 135
147struct CPI_ROLE_ASSIGNMENTS_ATTRIBUTES 136struct CPI_ROLE_ASSIGNMENTS_ATTRIBUTES
@@ -152,7 +141,7 @@ struct CPI_ROLE_ASSIGNMENTS_ATTRIBUTES
152 LPWSTR pwzAppID; 141 LPWSTR pwzAppID;
153 LPWSTR pwzPartID; 142 LPWSTR pwzPartID;
154 int iRoleCount; 143 int iRoleCount;
155 CPI_COMPONENT* pCompList; 144 CPIEXEC_COMPONENT* pCompList;
156}; 145};
157 146
158 147
@@ -187,7 +176,7 @@ static HRESULT UnregisterDotNetAssembly(
187 ); 176 );
188static HRESULT RemoveComponents( 177static HRESULT RemoveComponents(
189 ICatalogCollection* piCompColl, 178 ICatalogCollection* piCompColl,
190 CPI_COMPONENT* pCompList 179 CPIEXEC_COMPONENT* pCompList
191 ); 180 );
192static HRESULT ReadAssemblyAttributes( 181static HRESULT ReadAssemblyAttributes(
193 LPWSTR* ppwzData, 182 LPWSTR* ppwzData,
@@ -206,56 +195,56 @@ static void FreeRoleAssignmentsAttributes(
206static HRESULT ConfigureComponents( 195static HRESULT ConfigureComponents(
207 LPCWSTR pwzPartID, 196 LPCWSTR pwzPartID,
208 LPCWSTR pwzAppID, 197 LPCWSTR pwzAppID,
209 CPI_COMPONENT* pCompList, 198 CPIEXEC_COMPONENT* pCompList,
210 BOOL fCreate, 199 BOOL fCreate,
211 BOOL fProgress 200 BOOL fProgress
212 ); 201 );
213static HRESULT ConfigureInterfaces( 202static HRESULT ConfigureInterfaces(
214 ICatalogCollection* piCompColl, 203 ICatalogCollection* piCompColl,
215 ICatalogObject* piCompObj, 204 ICatalogObject* piCompObj,
216 CPI_INTERFACE* pIntfList, 205 CPIEXEC_INTERFACE* pIntfList,
217 BOOL fCreate 206 BOOL fCreate
218 ); 207 );
219static HRESULT ConfigureMethods( 208static HRESULT ConfigureMethods(
220 ICatalogCollection* piIntfColl, 209 ICatalogCollection* piIntfColl,
221 ICatalogObject* piIntfObj, 210 ICatalogObject* piIntfObj,
222 CPI_METHOD* pMethList, 211 CPIEXEC_METHOD* pMethList,
223 BOOL fCreate 212 BOOL fCreate
224 ); 213 );
225static HRESULT ConfigureRoleAssignments( 214static HRESULT ConfigureRoleAssignments(
226 LPCWSTR pwzCollName, 215 LPCWSTR pwzCollName,
227 ICatalogCollection* piCompColl, 216 ICatalogCollection* piCompColl,
228 ICatalogObject* piCompObj, 217 ICatalogObject* piCompObj,
229 CPI_ROLE_ASSIGNMENT* pRoleList, 218 CPIEXEC_ROLE_ASSIGNMENT* pRoleList,
230 BOOL fCreate 219 BOOL fCreate
231 ); 220 );
232static HRESULT ReadComponentList( 221static HRESULT ReadComponentList(
233 LPWSTR* ppwzData, 222 LPWSTR* ppwzData,
234 CPI_COMPONENT** ppCompList 223 CPIEXEC_COMPONENT** ppCompList
235 ); 224 );
236static HRESULT ReadInterfaceList( 225static HRESULT ReadInterfaceList(
237 LPWSTR* ppwzData, 226 LPWSTR* ppwzData,
238 CPI_INTERFACE** ppIntfList 227 CPIEXEC_INTERFACE** ppIntfList
239 ); 228 );
240static HRESULT ReadMethodList( 229static HRESULT ReadMethodList(
241 LPWSTR* ppwzData, 230 LPWSTR* ppwzData,
242 CPI_METHOD** ppMethList 231 CPIEXEC_METHOD** ppMethList
243 ); 232 );
244static HRESULT ReadRoleAssignmentList( 233static HRESULT ReadRoleAssignmentList(
245 LPWSTR* ppwzData, 234 LPWSTR* ppwzData,
246 CPI_ROLE_ASSIGNMENT** ppRoleList 235 CPIEXEC_ROLE_ASSIGNMENT** ppRoleList
247 ); 236 );
248static void FreeComponentList( 237static void FreeComponentList(
249 CPI_COMPONENT* pList 238 CPIEXEC_COMPONENT* pList
250 ); 239 );
251static void FreeInterfaceList( 240static void FreeInterfaceList(
252 CPI_INTERFACE* pList 241 CPIEXEC_INTERFACE* pList
253 ); 242 );
254static void FreeMethodList( 243static void FreeMethodList(
255 CPI_METHOD* pList 244 CPIEXEC_METHOD* pList
256 ); 245 );
257static void FreeRoleAssignmentList( 246static void FreeRoleAssignmentList(
258 CPI_ROLE_ASSIGNMENT* pList 247 CPIEXEC_ROLE_ASSIGNMENT* pList
259 ); 248 );
260 249
261 250
@@ -648,7 +637,7 @@ static HRESULT UnregisterAssembly(
648 // TODO: handle rollbacks 637 // TODO: handle rollbacks
649 638
650 // get applications collection 639 // get applications collection
651 hr = CpiGetApplicationsCollection(pAttrs->pwzPartID, &piColl); 640 hr = CpiExecGetApplicationsCollection(pAttrs->pwzPartID, &piColl);
652 ExitOnFailure(hr, "Failed to get applications collection"); 641 ExitOnFailure(hr, "Failed to get applications collection");
653 642
654 if (S_FALSE == hr) 643 if (S_FALSE == hr)
@@ -993,7 +982,7 @@ static HRESULT RegisterNativeAssembly(
993 ExitOnNull(bstrPSDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for tlb path"); 982 ExitOnNull(bstrPSDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for tlb path");
994 983
995 // get catalog 984 // get catalog
996 hr = CpiGetAdminCatalog(&piCatalog); 985 hr = CpiExecGetAdminCatalog(&piCatalog);
997 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 986 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
998 987
999 // get ICOMAdminCatalog2 interface 988 // get ICOMAdminCatalog2 interface
@@ -1154,12 +1143,12 @@ LExit:
1154 1143
1155static HRESULT RemoveComponents( 1144static HRESULT RemoveComponents(
1156 ICatalogCollection* piCompColl, 1145 ICatalogCollection* piCompColl,
1157 CPI_COMPONENT* pCompList 1146 CPIEXEC_COMPONENT* pCompList
1158 ) 1147 )
1159{ 1148{
1160 HRESULT hr = S_OK; 1149 HRESULT hr = S_OK;
1161 1150
1162 for (CPI_COMPONENT* pItm = pCompList; pItm; pItm = pItm->pNext) 1151 for (CPIEXEC_COMPONENT* pItm = pCompList; pItm; pItm = pItm->pNext)
1163 { 1152 {
1164 // remove 1153 // remove
1165 hr = CpiRemoveCollectionObject(piCompColl, pItm->wzCLSID, NULL, FALSE); 1154 hr = CpiRemoveCollectionObject(piCompColl, pItm->wzCLSID, NULL, FALSE);
@@ -1291,7 +1280,7 @@ static void FreeRoleAssignmentsAttributes(
1291static HRESULT ConfigureComponents( 1280static HRESULT ConfigureComponents(
1292 LPCWSTR pwzPartID, 1281 LPCWSTR pwzPartID,
1293 LPCWSTR pwzAppID, 1282 LPCWSTR pwzAppID,
1294 CPI_COMPONENT* pCompList, 1283 CPIEXEC_COMPONENT* pCompList,
1295 BOOL fCreate, 1284 BOOL fCreate,
1296 BOOL fProgress 1285 BOOL fProgress
1297 ) 1286 )
@@ -1313,7 +1302,7 @@ static HRESULT ConfigureComponents(
1313 ExitOnFailure(hr, "Failed to get components collection"); 1302 ExitOnFailure(hr, "Failed to get components collection");
1314 1303
1315 // read components 1304 // read components
1316 for (CPI_COMPONENT* pItm = pCompList; pItm; pItm = pItm->pNext) 1305 for (CPIEXEC_COMPONENT* pItm = pCompList; pItm; pItm = pItm->pNext)
1317 { 1306 {
1318 // progress message 1307 // progress message
1319 if (fProgress) 1308 if (fProgress)
@@ -1375,7 +1364,7 @@ LExit:
1375static HRESULT ConfigureInterfaces( 1364static HRESULT ConfigureInterfaces(
1376 ICatalogCollection* piCompColl, 1365 ICatalogCollection* piCompColl,
1377 ICatalogObject* piCompObj, 1366 ICatalogObject* piCompObj,
1378 CPI_INTERFACE* pIntfList, 1367 CPIEXEC_INTERFACE* pIntfList,
1379 BOOL fCreate 1368 BOOL fCreate
1380 ) 1369 )
1381{ 1370{
@@ -1396,7 +1385,7 @@ static HRESULT ConfigureInterfaces(
1396 ExitOnFailure(hr, "Failed to get interfaces collection"); 1385 ExitOnFailure(hr, "Failed to get interfaces collection");
1397 1386
1398 // read interfaces 1387 // read interfaces
1399 for (CPI_INTERFACE* pItm = pIntfList; pItm; pItm = pItm->pNext) 1388 for (CPIEXEC_INTERFACE* pItm = pIntfList; pItm; pItm = pItm->pNext)
1400 { 1389 {
1401 // find interface 1390 // find interface
1402 hr = CpiFindCollectionObjectByStringKey(piIntfColl, pItm->wzIID, &piIntfObj); 1391 hr = CpiFindCollectionObjectByStringKey(piIntfColl, pItm->wzIID, &piIntfObj);
@@ -1448,7 +1437,7 @@ LExit:
1448static HRESULT ConfigureMethods( 1437static HRESULT ConfigureMethods(
1449 ICatalogCollection* piIntfColl, 1438 ICatalogCollection* piIntfColl,
1450 ICatalogObject* piIntfObj, 1439 ICatalogObject* piIntfObj,
1451 CPI_METHOD* pMethList, 1440 CPIEXEC_METHOD* pMethList,
1452 BOOL fCreate 1441 BOOL fCreate
1453 ) 1442 )
1454{ 1443{
@@ -1469,7 +1458,7 @@ static HRESULT ConfigureMethods(
1469 ExitOnFailure(hr, "Failed to get methods collection"); 1458 ExitOnFailure(hr, "Failed to get methods collection");
1470 1459
1471 // read methods 1460 // read methods
1472 for (CPI_METHOD* pItm = pMethList; pItm; pItm = pItm->pNext) 1461 for (CPIEXEC_METHOD* pItm = pMethList; pItm; pItm = pItm->pNext)
1473 { 1462 {
1474 // find method 1463 // find method
1475 if (*pItm->wzIndex) 1464 if (*pItm->wzIndex)
@@ -1519,7 +1508,7 @@ static HRESULT ConfigureRoleAssignments(
1519 LPCWSTR pwzCollName, 1508 LPCWSTR pwzCollName,
1520 ICatalogCollection* piCompColl, 1509 ICatalogCollection* piCompColl,
1521 ICatalogObject* piCompObj, 1510 ICatalogObject* piCompObj,
1522 CPI_ROLE_ASSIGNMENT* pRoleList, 1511 CPIEXEC_ROLE_ASSIGNMENT* pRoleList,
1523 BOOL fCreate 1512 BOOL fCreate
1524 ) 1513 )
1525{ 1514{
@@ -1531,7 +1520,7 @@ static HRESULT ConfigureRoleAssignments(
1531 long lChanges = 0; 1520 long lChanges = 0;
1532 1521
1533 // get roles collection 1522 // get roles collection
1534 hr = CpiGetCatalogCollection(piCompColl, piCompObj, pwzCollName, &piRoleColl); 1523 hr = CpiExecGetCatalogCollection(piCompColl, piCompObj, pwzCollName, &piRoleColl);
1535 if (S_FALSE == hr) 1524 if (S_FALSE == hr)
1536 if (fCreate) 1525 if (fCreate)
1537 hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); 1526 hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
@@ -1540,7 +1529,7 @@ static HRESULT ConfigureRoleAssignments(
1540 ExitOnFailure(hr, "Failed to get role assignments collection"); 1529 ExitOnFailure(hr, "Failed to get role assignments collection");
1541 1530
1542 // read roles 1531 // read roles
1543 for (CPI_ROLE_ASSIGNMENT* pItm = pRoleList; pItm; pItm = pItm->pNext) 1532 for (CPIEXEC_ROLE_ASSIGNMENT* pItm = pRoleList; pItm; pItm = pItm->pNext)
1544 { 1533 {
1545 if (fCreate) 1534 if (fCreate)
1546 { 1535 {
@@ -1588,14 +1577,14 @@ LExit:
1588 1577
1589static HRESULT ReadComponentList( 1578static HRESULT ReadComponentList(
1590 LPWSTR* ppwzData, 1579 LPWSTR* ppwzData,
1591 CPI_COMPONENT** ppCompList 1580 CPIEXEC_COMPONENT** ppCompList
1592 ) 1581 )
1593{ 1582{
1594 HRESULT hr = S_OK; 1583 HRESULT hr = S_OK;
1595 1584
1596 LPWSTR pwzData = NULL; 1585 LPWSTR pwzData = NULL;
1597 1586
1598 CPI_COMPONENT* pItm = NULL; 1587 CPIEXEC_COMPONENT* pItm = NULL;
1599 1588
1600 int iCnt = 0; 1589 int iCnt = 0;
1601 1590
@@ -1606,7 +1595,7 @@ static HRESULT ReadComponentList(
1606 // read components 1595 // read components
1607 for (int i = 0; i < iCnt; i++) 1596 for (int i = 0; i < iCnt; i++)
1608 { 1597 {
1609 pItm = (CPI_COMPONENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_COMPONENT)); 1598 pItm = (CPIEXEC_COMPONENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPIEXEC_COMPONENT));
1610 if (!pItm) 1599 if (!pItm)
1611 ExitFunction1(hr = E_OUTOFMEMORY); 1600 ExitFunction1(hr = E_OUTOFMEMORY);
1612 1601
@@ -1648,14 +1637,14 @@ LExit:
1648 1637
1649static HRESULT ReadInterfaceList( 1638static HRESULT ReadInterfaceList(
1650 LPWSTR* ppwzData, 1639 LPWSTR* ppwzData,
1651 CPI_INTERFACE** ppIntfList 1640 CPIEXEC_INTERFACE** ppIntfList
1652 ) 1641 )
1653{ 1642{
1654 HRESULT hr = S_OK; 1643 HRESULT hr = S_OK;
1655 1644
1656 LPWSTR pwzData = NULL; 1645 LPWSTR pwzData = NULL;
1657 1646
1658 CPI_INTERFACE* pItm = NULL; 1647 CPIEXEC_INTERFACE* pItm = NULL;
1659 1648
1660 int iCnt = 0; 1649 int iCnt = 0;
1661 1650
@@ -1666,7 +1655,7 @@ static HRESULT ReadInterfaceList(
1666 // read interfaces 1655 // read interfaces
1667 for (int i = 0; i < iCnt; i++) 1656 for (int i = 0; i < iCnt; i++)
1668 { 1657 {
1669 pItm = (CPI_INTERFACE*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_INTERFACE)); 1658 pItm = (CPIEXEC_INTERFACE*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPIEXEC_INTERFACE));
1670 if (!pItm) 1659 if (!pItm)
1671 ExitFunction1(hr = E_OUTOFMEMORY); 1660 ExitFunction1(hr = E_OUTOFMEMORY);
1672 1661
@@ -1708,14 +1697,14 @@ LExit:
1708 1697
1709static HRESULT ReadMethodList( 1698static HRESULT ReadMethodList(
1710 LPWSTR* ppwzData, 1699 LPWSTR* ppwzData,
1711 CPI_METHOD** ppMethList 1700 CPIEXEC_METHOD** ppMethList
1712 ) 1701 )
1713{ 1702{
1714 HRESULT hr = S_OK; 1703 HRESULT hr = S_OK;
1715 1704
1716 LPWSTR pwzData = NULL; 1705 LPWSTR pwzData = NULL;
1717 1706
1718 CPI_METHOD* pItm = NULL; 1707 CPIEXEC_METHOD* pItm = NULL;
1719 1708
1720 int iCnt = 0; 1709 int iCnt = 0;
1721 1710
@@ -1726,7 +1715,7 @@ static HRESULT ReadMethodList(
1726 // read methods 1715 // read methods
1727 for (int i = 0; i < iCnt; i++) 1716 for (int i = 0; i < iCnt; i++)
1728 { 1717 {
1729 pItm = (CPI_METHOD*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_METHOD)); 1718 pItm = (CPIEXEC_METHOD*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPIEXEC_METHOD));
1730 if (!pItm) 1719 if (!pItm)
1731 ExitFunction1(hr = E_OUTOFMEMORY); 1720 ExitFunction1(hr = E_OUTOFMEMORY);
1732 1721
@@ -1769,14 +1758,14 @@ LExit:
1769 1758
1770static HRESULT ReadRoleAssignmentList( 1759static HRESULT ReadRoleAssignmentList(
1771 LPWSTR* ppwzData, 1760 LPWSTR* ppwzData,
1772 CPI_ROLE_ASSIGNMENT** ppRoleList 1761 CPIEXEC_ROLE_ASSIGNMENT** ppRoleList
1773 ) 1762 )
1774{ 1763{
1775 HRESULT hr = S_OK; 1764 HRESULT hr = S_OK;
1776 1765
1777 LPWSTR pwzData = NULL; 1766 LPWSTR pwzData = NULL;
1778 1767
1779 CPI_ROLE_ASSIGNMENT* pItm = NULL; 1768 CPIEXEC_ROLE_ASSIGNMENT* pItm = NULL;
1780 1769
1781 int iCnt = 0; 1770 int iCnt = 0;
1782 1771
@@ -1787,7 +1776,7 @@ static HRESULT ReadRoleAssignmentList(
1787 // read roles 1776 // read roles
1788 for (int i = 0; i < iCnt; i++) 1777 for (int i = 0; i < iCnt; i++)
1789 { 1778 {
1790 pItm = (CPI_ROLE_ASSIGNMENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_ROLE_ASSIGNMENT)); 1779 pItm = (CPIEXEC_ROLE_ASSIGNMENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPIEXEC_ROLE_ASSIGNMENT));
1791 if (!pItm) 1780 if (!pItm)
1792 ExitFunction1(hr = E_OUTOFMEMORY); 1781 ExitFunction1(hr = E_OUTOFMEMORY);
1793 1782
@@ -1821,7 +1810,7 @@ LExit:
1821} 1810}
1822 1811
1823static void FreeComponentList( 1812static void FreeComponentList(
1824 CPI_COMPONENT* pList 1813 CPIEXEC_COMPONENT* pList
1825 ) 1814 )
1826{ 1815{
1827 while (pList) 1816 while (pList)
@@ -1833,14 +1822,14 @@ static void FreeComponentList(
1833 if (pList->pInterfaceList) 1822 if (pList->pInterfaceList)
1834 FreeInterfaceList(pList->pInterfaceList); 1823 FreeInterfaceList(pList->pInterfaceList);
1835 1824
1836 CPI_COMPONENT* pDelete = pList; 1825 CPIEXEC_COMPONENT* pDelete = pList;
1837 pList = pList->pNext; 1826 pList = pList->pNext;
1838 ::HeapFree(::GetProcessHeap(), 0, pDelete); 1827 ::HeapFree(::GetProcessHeap(), 0, pDelete);
1839 } 1828 }
1840} 1829}
1841 1830
1842static void FreeInterfaceList( 1831static void FreeInterfaceList(
1843 CPI_INTERFACE* pList 1832 CPIEXEC_INTERFACE* pList
1844 ) 1833 )
1845{ 1834{
1846 while (pList) 1835 while (pList)
@@ -1852,14 +1841,14 @@ static void FreeInterfaceList(
1852 if (pList->pMethodList) 1841 if (pList->pMethodList)
1853 FreeMethodList(pList->pMethodList); 1842 FreeMethodList(pList->pMethodList);
1854 1843
1855 CPI_INTERFACE* pDelete = pList; 1844 CPIEXEC_INTERFACE* pDelete = pList;
1856 pList = pList->pNext; 1845 pList = pList->pNext;
1857 ::HeapFree(::GetProcessHeap(), 0, pDelete); 1846 ::HeapFree(::GetProcessHeap(), 0, pDelete);
1858 } 1847 }
1859} 1848}
1860 1849
1861static void FreeMethodList( 1850static void FreeMethodList(
1862 CPI_METHOD* pList 1851 CPIEXEC_METHOD* pList
1863 ) 1852 )
1864{ 1853{
1865 while (pList) 1854 while (pList)
@@ -1869,19 +1858,19 @@ static void FreeMethodList(
1869 if (pList->pRoleAssignmentList) 1858 if (pList->pRoleAssignmentList)
1870 FreeRoleAssignmentList(pList->pRoleAssignmentList); 1859 FreeRoleAssignmentList(pList->pRoleAssignmentList);
1871 1860
1872 CPI_METHOD* pDelete = pList; 1861 CPIEXEC_METHOD* pDelete = pList;
1873 pList = pList->pNext; 1862 pList = pList->pNext;
1874 ::HeapFree(::GetProcessHeap(), 0, pDelete); 1863 ::HeapFree(::GetProcessHeap(), 0, pDelete);
1875 } 1864 }
1876} 1865}
1877 1866
1878static void FreeRoleAssignmentList( 1867static void FreeRoleAssignmentList(
1879 CPI_ROLE_ASSIGNMENT* pList 1868 CPIEXEC_ROLE_ASSIGNMENT* pList
1880 ) 1869 )
1881{ 1870{
1882 while (pList) 1871 while (pList)
1883 { 1872 {
1884 CPI_ROLE_ASSIGNMENT* pDelete = pList; 1873 CPIEXEC_ROLE_ASSIGNMENT* pDelete = pList;
1885 pList = pList->pNext; 1874 pList = pList->pNext;
1886 ::HeapFree(::GetProcessHeap(), 0, pDelete); 1875 ::HeapFree(::GetProcessHeap(), 0, pDelete);
1887 } 1876 }
diff --git a/src/ca/cpasmsched.cpp b/src/ca/cpasmsched.cpp
index 97ecff61..2d0573a5 100644
--- a/src/ca/cpasmsched.cpp
+++ b/src/ca/cpasmsched.cpp
@@ -169,19 +169,19 @@ static HRESULT InterfacesRead(
169 LPCWSTR pwzCompKey, 169 LPCWSTR pwzCompKey,
170 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 170 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
171 CPI_ASSEMBLY* pAsm, 171 CPI_ASSEMBLY* pAsm,
172 CPI_COMPONENT* pComp 172 CPISCHED_COMPONENT* pComp
173 ); 173 );
174static HRESULT MethodsRead( 174static HRESULT MethodsRead(
175 LPCWSTR pwzIntfKey, 175 LPCWSTR pwzIntfKey,
176 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 176 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
177 CPI_ASSEMBLY* pAsm, 177 CPI_ASSEMBLY* pAsm,
178 CPI_INTERFACE* pIntf 178 CPISCHED_INTERFACE* pIntf
179 ); 179 );
180static HRESULT RoleAssignmentsRead( 180static HRESULT RoleAssignmentsRead(
181 LPCWSTR pwzQuery, 181 LPCWSTR pwzQuery,
182 LPCWSTR pwzKey, 182 LPCWSTR pwzKey,
183 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 183 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
184 CPI_ROLE_ASSIGNMENT** ppRoleList, 184 CPISCHED_ROLE_ASSIGNMENT** ppRoleList,
185 int* piInstallCount, 185 int* piInstallCount,
186 int* piUninstallCount 186 int* piUninstallCount
187 ); 187 );
@@ -238,21 +238,21 @@ static HRESULT AddRoleAssignmentsToActionData(
238 LPWSTR* ppwzActionData 238 LPWSTR* ppwzActionData
239 ); 239 );
240static HRESULT AddComponentToActionData( 240static HRESULT AddComponentToActionData(
241 CPI_COMPONENT* pItm, 241 CPISCHED_COMPONENT* pItm,
242 BOOL fInstall, 242 BOOL fInstall,
243 BOOL fProps, 243 BOOL fProps,
244 BOOL fRoles, 244 BOOL fRoles,
245 LPWSTR* ppwzActionData 245 LPWSTR* ppwzActionData
246 ); 246 );
247static HRESULT AddInterfaceToActionData( 247static HRESULT AddInterfaceToActionData(
248 CPI_INTERFACE* pItm, 248 CPISCHED_INTERFACE* pItm,
249 BOOL fInstall, 249 BOOL fInstall,
250 BOOL fProps, 250 BOOL fProps,
251 BOOL fRoles, 251 BOOL fRoles,
252 LPWSTR* ppwzActionData 252 LPWSTR* ppwzActionData
253 ); 253 );
254static HRESULT AddMethodToActionData( 254static HRESULT AddMethodToActionData(
255 CPI_METHOD* pItm, 255 CPISCHED_METHOD* pItm,
256 BOOL fInstall, 256 BOOL fInstall,
257 BOOL fProps, 257 BOOL fProps,
258 BOOL fRoles, 258 BOOL fRoles,
@@ -261,7 +261,7 @@ static HRESULT AddMethodToActionData(
261static HRESULT AddRolesToActionData( 261static HRESULT AddRolesToActionData(
262 int iRoleInstallCount, 262 int iRoleInstallCount,
263 int iRoleUninstallCount, 263 int iRoleUninstallCount,
264 CPI_ROLE_ASSIGNMENT* pRoleList, 264 CPISCHED_ROLE_ASSIGNMENT* pRoleList,
265 BOOL fInstall, 265 BOOL fInstall,
266 BOOL fRoles, 266 BOOL fRoles,
267 LPWSTR* ppwzActionData 267 LPWSTR* ppwzActionData
@@ -284,16 +284,16 @@ static void ModuleFree(
284 CPI_MODULE* pItm 284 CPI_MODULE* pItm
285 ); 285 );
286static void ComponentsFreeList( 286static void ComponentsFreeList(
287 CPI_COMPONENT* pList 287 CPISCHED_COMPONENT* pList
288 ); 288 );
289static void InterfacesFreeList( 289static void InterfacesFreeList(
290 CPI_INTERFACE* pList 290 CPISCHED_INTERFACE* pList
291 ); 291 );
292static void MethodsFreeList( 292static void MethodsFreeList(
293 CPI_METHOD* pList 293 CPISCHED_METHOD* pList
294 ); 294 );
295static void RoleAssignmentsFreeList( 295static void RoleAssignmentsFreeList(
296 CPI_ROLE_ASSIGNMENT* pList 296 CPISCHED_ROLE_ASSIGNMENT* pList
297 ); 297 );
298 298
299 299
@@ -686,7 +686,7 @@ LExit:
686 686
687HRESULT CpiGetSubscriptionsCollForComponent( 687HRESULT CpiGetSubscriptionsCollForComponent(
688 CPI_ASSEMBLY* pAsm, 688 CPI_ASSEMBLY* pAsm,
689 CPI_COMPONENT* pComp, 689 CPISCHED_COMPONENT* pComp,
690 ICatalogCollection** ppiSubsColl 690 ICatalogCollection** ppiSubsColl
691 ) 691 )
692{ 692{
@@ -713,7 +713,7 @@ HRESULT CpiGetSubscriptionsCollForComponent(
713 ExitFunction(); // exit with hr = S_FALSE 713 ExitFunction(); // exit with hr = S_FALSE
714 714
715 // get roles collection 715 // get roles collection
716 hr = CpiGetCatalogCollection(piCompColl, piCompObj, L"SubscriptionsForComponent", &pComp->piSubsColl); 716 hr = CpiSchedGetCatalogCollection(piCompColl, piCompObj, L"SubscriptionsForComponent", &pComp->piSubsColl);
717 ExitOnFailure(hr, "Failed to get subscriptions collection"); 717 ExitOnFailure(hr, "Failed to get subscriptions collection");
718 } 718 }
719 719
@@ -1372,7 +1372,7 @@ static HRESULT ComponentsRead(
1372 PMSIHANDLE hView; 1372 PMSIHANDLE hView;
1373 PMSIHANDLE hRec; 1373 PMSIHANDLE hRec;
1374 PMSIHANDLE hRecKey; 1374 PMSIHANDLE hRecKey;
1375 CPI_COMPONENT* pItm = NULL; 1375 CPISCHED_COMPONENT* pItm = NULL;
1376 LPWSTR pwzData = NULL; 1376 LPWSTR pwzData = NULL;
1377 1377
1378 // create parameter record 1378 // create parameter record
@@ -1390,7 +1390,7 @@ static HRESULT ComponentsRead(
1390 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 1390 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
1391 { 1391 {
1392 // create entry 1392 // create entry
1393 pItm = (CPI_COMPONENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_COMPONENT)); 1393 pItm = (CPISCHED_COMPONENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPISCHED_COMPONENT));
1394 if (!pItm) 1394 if (!pItm)
1395 ExitFunction1(hr = E_OUTOFMEMORY); 1395 ExitFunction1(hr = E_OUTOFMEMORY);
1396 1396
@@ -1455,14 +1455,14 @@ static HRESULT InterfacesRead(
1455 LPCWSTR pwzCompKey, 1455 LPCWSTR pwzCompKey,
1456 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 1456 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
1457 CPI_ASSEMBLY* pAsm, 1457 CPI_ASSEMBLY* pAsm,
1458 CPI_COMPONENT* pComp 1458 CPISCHED_COMPONENT* pComp
1459 ) 1459 )
1460{ 1460{
1461 HRESULT hr = S_OK; 1461 HRESULT hr = S_OK;
1462 PMSIHANDLE hView; 1462 PMSIHANDLE hView;
1463 PMSIHANDLE hRec; 1463 PMSIHANDLE hRec;
1464 PMSIHANDLE hRecKey; 1464 PMSIHANDLE hRecKey;
1465 CPI_INTERFACE* pItm = NULL; 1465 CPISCHED_INTERFACE* pItm = NULL;
1466 LPWSTR pwzData = NULL; 1466 LPWSTR pwzData = NULL;
1467 1467
1468 // create parameter record 1468 // create parameter record
@@ -1480,7 +1480,7 @@ static HRESULT InterfacesRead(
1480 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 1480 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
1481 { 1481 {
1482 // create entry 1482 // create entry
1483 pItm = (CPI_INTERFACE*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_INTERFACE)); 1483 pItm = (CPISCHED_INTERFACE*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPISCHED_INTERFACE));
1484 if (!pItm) 1484 if (!pItm)
1485 ExitFunction1(hr = E_OUTOFMEMORY); 1485 ExitFunction1(hr = E_OUTOFMEMORY);
1486 1486
@@ -1545,12 +1545,12 @@ static HRESULT MethodsRead(
1545 LPCWSTR pwzIntfKey, 1545 LPCWSTR pwzIntfKey,
1546 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 1546 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
1547 CPI_ASSEMBLY* pAsm, 1547 CPI_ASSEMBLY* pAsm,
1548 CPI_INTERFACE* pIntf 1548 CPISCHED_INTERFACE* pIntf
1549 ) 1549 )
1550{ 1550{
1551 HRESULT hr = S_OK; 1551 HRESULT hr = S_OK;
1552 PMSIHANDLE hView, hRec, hRecKey; 1552 PMSIHANDLE hView, hRec, hRecKey;
1553 CPI_METHOD* pItm = NULL; 1553 CPISCHED_METHOD* pItm = NULL;
1554 LPWSTR pwzData = NULL; 1554 LPWSTR pwzData = NULL;
1555 1555
1556 // create parameter record 1556 // create parameter record
@@ -1568,7 +1568,7 @@ static HRESULT MethodsRead(
1568 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 1568 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
1569 { 1569 {
1570 // create entry 1570 // create entry
1571 pItm = (CPI_METHOD*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_METHOD)); 1571 pItm = (CPISCHED_METHOD*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPISCHED_METHOD));
1572 if (!pItm) 1572 if (!pItm)
1573 ExitFunction1(hr = E_OUTOFMEMORY); 1573 ExitFunction1(hr = E_OUTOFMEMORY);
1574 1574
@@ -1635,7 +1635,7 @@ static HRESULT RoleAssignmentsRead(
1635 LPCWSTR pwzQuery, 1635 LPCWSTR pwzQuery,
1636 LPCWSTR pwzKey, 1636 LPCWSTR pwzKey,
1637 CPI_APPLICATION_ROLE_LIST* pAppRoleList, 1637 CPI_APPLICATION_ROLE_LIST* pAppRoleList,
1638 CPI_ROLE_ASSIGNMENT** ppRoleList, 1638 CPISCHED_ROLE_ASSIGNMENT** ppRoleList,
1639 int* piInstallCount, 1639 int* piInstallCount,
1640 int* piUninstallCount 1640 int* piUninstallCount
1641 ) 1641 )
@@ -1645,7 +1645,7 @@ static HRESULT RoleAssignmentsRead(
1645 1645
1646 PMSIHANDLE hView, hRec, hRecKey; 1646 PMSIHANDLE hView, hRec, hRecKey;
1647 1647
1648 CPI_ROLE_ASSIGNMENT* pItm = NULL; 1648 CPISCHED_ROLE_ASSIGNMENT* pItm = NULL;
1649 LPWSTR pwzData = NULL; 1649 LPWSTR pwzData = NULL;
1650 BOOL fMatchingArchitecture = FALSE; 1650 BOOL fMatchingArchitecture = FALSE;
1651 1651
@@ -1677,7 +1677,7 @@ static HRESULT RoleAssignmentsRead(
1677 } 1677 }
1678 1678
1679 // create entry 1679 // create entry
1680 pItm = (CPI_ROLE_ASSIGNMENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPI_ROLE_ASSIGNMENT)); 1680 pItm = (CPISCHED_ROLE_ASSIGNMENT*)::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CPISCHED_ROLE_ASSIGNMENT));
1681 if (!pItm) 1681 if (!pItm)
1682 ExitFunction1(hr = E_OUTOFMEMORY); 1682 ExitFunction1(hr = E_OUTOFMEMORY);
1683 1683
@@ -1786,7 +1786,7 @@ static HRESULT AddAssemblyToActionData(
1786 1786
1787 if (iCompCount) 1787 if (iCompCount)
1788 { 1788 {
1789 for (CPI_COMPONENT* pComp = pItm->pComponents; pComp; pComp = pComp->pNext) 1789 for (CPISCHED_COMPONENT* pComp = pItm->pComponents; pComp; pComp = pComp->pNext)
1790 { 1790 {
1791 hr = AddComponentToActionData(pComp, fInstall, atCreate == iActionType, FALSE, ppwzActionData); 1791 hr = AddComponentToActionData(pComp, fInstall, atCreate == iActionType, FALSE, ppwzActionData);
1792 ExitOnFailure(hr, "Failed to add component to custom action data, component: %S", pComp->wzKey); 1792 ExitOnFailure(hr, "Failed to add component to custom action data, component: %S", pComp->wzKey);
@@ -1834,7 +1834,7 @@ static HRESULT AddRoleAssignmentsToActionData(
1834 hr = WcaWriteIntegerToCaData(pItm->iComponentCount, ppwzActionData); 1834 hr = WcaWriteIntegerToCaData(pItm->iComponentCount, ppwzActionData);
1835 ExitOnFailure(hr, "Failed to add component count to custom action data"); 1835 ExitOnFailure(hr, "Failed to add component count to custom action data");
1836 1836
1837 for (CPI_COMPONENT* pComp = pItm->pComponents; pComp; pComp = pComp->pNext) 1837 for (CPISCHED_COMPONENT* pComp = pItm->pComponents; pComp; pComp = pComp->pNext)
1838 { 1838 {
1839 hr = AddComponentToActionData(pComp, fInstall, FALSE, TRUE, ppwzActionData); 1839 hr = AddComponentToActionData(pComp, fInstall, FALSE, TRUE, ppwzActionData);
1840 ExitOnFailure(hr, "Failed to add component to custom action data, component: %S", pComp->wzKey); 1840 ExitOnFailure(hr, "Failed to add component to custom action data, component: %S", pComp->wzKey);
@@ -1847,7 +1847,7 @@ LExit:
1847} 1847}
1848 1848
1849static HRESULT AddComponentToActionData( 1849static HRESULT AddComponentToActionData(
1850 CPI_COMPONENT* pItm, 1850 CPISCHED_COMPONENT* pItm,
1851 BOOL fInstall, 1851 BOOL fInstall,
1852 BOOL fProps, 1852 BOOL fProps,
1853 BOOL fRoles, 1853 BOOL fRoles,
@@ -1875,7 +1875,7 @@ static HRESULT AddComponentToActionData(
1875 1875
1876 if (iIntfCount) 1876 if (iIntfCount)
1877 { 1877 {
1878 for (CPI_INTERFACE* pIntf = pItm->pInterfaces; pIntf; pIntf = pIntf->pNext) 1878 for (CPISCHED_INTERFACE* pIntf = pItm->pInterfaces; pIntf; pIntf = pIntf->pNext)
1879 { 1879 {
1880 hr = AddInterfaceToActionData(pIntf, fInstall, fProps, fRoles, ppwzActionData); 1880 hr = AddInterfaceToActionData(pIntf, fInstall, fProps, fRoles, ppwzActionData);
1881 ExitOnFailure(hr, "Failed to add interface custom action data, interface: %S", pIntf->wzKey); 1881 ExitOnFailure(hr, "Failed to add interface custom action data, interface: %S", pIntf->wzKey);
@@ -1889,7 +1889,7 @@ LExit:
1889} 1889}
1890 1890
1891static HRESULT AddInterfaceToActionData( 1891static HRESULT AddInterfaceToActionData(
1892 CPI_INTERFACE* pItm, 1892 CPISCHED_INTERFACE* pItm,
1893 BOOL fInstall, 1893 BOOL fInstall,
1894 BOOL fProps, 1894 BOOL fProps,
1895 BOOL fRoles, 1895 BOOL fRoles,
@@ -1914,7 +1914,7 @@ static HRESULT AddInterfaceToActionData(
1914 hr = WcaWriteIntegerToCaData(pItm->iMethodCount, ppwzActionData); 1914 hr = WcaWriteIntegerToCaData(pItm->iMethodCount, ppwzActionData);
1915 ExitOnFailure(hr, "Failed to add method count to custom action data"); 1915 ExitOnFailure(hr, "Failed to add method count to custom action data");
1916 1916
1917 for (CPI_METHOD* pMeth = pItm->pMethods; pMeth; pMeth = pMeth->pNext) 1917 for (CPISCHED_METHOD* pMeth = pItm->pMethods; pMeth; pMeth = pMeth->pNext)
1918 { 1918 {
1919 hr = AddMethodToActionData(pMeth, fInstall, fProps, fRoles, ppwzActionData); 1919 hr = AddMethodToActionData(pMeth, fInstall, fProps, fRoles, ppwzActionData);
1920 ExitOnFailure(hr, "Failed to add method custom action data, method: %S", pMeth->wzKey); 1920 ExitOnFailure(hr, "Failed to add method custom action data, method: %S", pMeth->wzKey);
@@ -1927,7 +1927,7 @@ LExit:
1927} 1927}
1928 1928
1929static HRESULT AddMethodToActionData( 1929static HRESULT AddMethodToActionData(
1930 CPI_METHOD* pItm, 1930 CPISCHED_METHOD* pItm,
1931 BOOL fInstall, 1931 BOOL fInstall,
1932 BOOL fProps, 1932 BOOL fProps,
1933 BOOL fRoles, 1933 BOOL fRoles,
@@ -1960,7 +1960,7 @@ LExit:
1960static HRESULT AddRolesToActionData( 1960static HRESULT AddRolesToActionData(
1961 int iRoleInstallCount, 1961 int iRoleInstallCount,
1962 int iRoleUninstallCount, 1962 int iRoleUninstallCount,
1963 CPI_ROLE_ASSIGNMENT* pRoleList, 1963 CPISCHED_ROLE_ASSIGNMENT* pRoleList,
1964 BOOL fInstall, 1964 BOOL fInstall,
1965 BOOL fRoles, 1965 BOOL fRoles,
1966 LPWSTR* ppwzActionData 1966 LPWSTR* ppwzActionData
@@ -1974,7 +1974,7 @@ static HRESULT AddRolesToActionData(
1974 1974
1975 if (iRoleCount) 1975 if (iRoleCount)
1976 { 1976 {
1977 for (CPI_ROLE_ASSIGNMENT* pRole = pRoleList; pRole; pRole = pRole->pNext) 1977 for (CPISCHED_ROLE_ASSIGNMENT* pRole = pRoleList; pRole; pRole = pRole->pNext)
1978 { 1978 {
1979 // make sure the install state matches the create flag 1979 // make sure the install state matches the create flag
1980 if (fInstall ? !WcaIsInstalling(pRole->isInstalled, pRole->isAction) : !WcaIsUninstalling(pRole->isInstalled, pRole->isAction)) 1980 if (fInstall ? !WcaIsInstalling(pRole->isInstalled, pRole->isAction) : !WcaIsUninstalling(pRole->isInstalled, pRole->isAction))
@@ -2061,7 +2061,7 @@ static void ModuleFree(
2061} 2061}
2062 2062
2063static void ComponentsFreeList( 2063static void ComponentsFreeList(
2064 CPI_COMPONENT* pList 2064 CPISCHED_COMPONENT* pList
2065 ) 2065 )
2066{ 2066{
2067 while (pList) 2067 while (pList)
@@ -2077,14 +2077,14 @@ static void ComponentsFreeList(
2077 2077
2078 ReleaseObject(pList->piSubsColl); 2078 ReleaseObject(pList->piSubsColl);
2079 2079
2080 CPI_COMPONENT* pDelete = pList; 2080 CPISCHED_COMPONENT* pDelete = pList;
2081 pList = pList->pNext; 2081 pList = pList->pNext;
2082 ::HeapFree(::GetProcessHeap(), 0, pDelete); 2082 ::HeapFree(::GetProcessHeap(), 0, pDelete);
2083 } 2083 }
2084} 2084}
2085 2085
2086static void InterfacesFreeList( 2086static void InterfacesFreeList(
2087 CPI_INTERFACE* pList 2087 CPISCHED_INTERFACE* pList
2088 ) 2088 )
2089{ 2089{
2090 while (pList) 2090 while (pList)
@@ -2098,14 +2098,14 @@ static void InterfacesFreeList(
2098 if (pList->pMethods) 2098 if (pList->pMethods)
2099 MethodsFreeList(pList->pMethods); 2099 MethodsFreeList(pList->pMethods);
2100 2100
2101 CPI_INTERFACE* pDelete = pList; 2101 CPISCHED_INTERFACE* pDelete = pList;
2102 pList = pList->pNext; 2102 pList = pList->pNext;
2103 ::HeapFree(::GetProcessHeap(), 0, pDelete); 2103 ::HeapFree(::GetProcessHeap(), 0, pDelete);
2104 } 2104 }
2105} 2105}
2106 2106
2107static void MethodsFreeList( 2107static void MethodsFreeList(
2108 CPI_METHOD* pList 2108 CPISCHED_METHOD* pList
2109 ) 2109 )
2110{ 2110{
2111 while (pList) 2111 while (pList)
@@ -2116,19 +2116,19 @@ static void MethodsFreeList(
2116 if (pList->pRoles) 2116 if (pList->pRoles)
2117 RoleAssignmentsFreeList(pList->pRoles); 2117 RoleAssignmentsFreeList(pList->pRoles);
2118 2118
2119 CPI_METHOD* pDelete = pList; 2119 CPISCHED_METHOD* pDelete = pList;
2120 pList = pList->pNext; 2120 pList = pList->pNext;
2121 ::HeapFree(::GetProcessHeap(), 0, pDelete); 2121 ::HeapFree(::GetProcessHeap(), 0, pDelete);
2122 } 2122 }
2123} 2123}
2124 2124
2125static void RoleAssignmentsFreeList( 2125static void RoleAssignmentsFreeList(
2126 CPI_ROLE_ASSIGNMENT* pList 2126 CPISCHED_ROLE_ASSIGNMENT* pList
2127 ) 2127 )
2128{ 2128{
2129 while (pList) 2129 while (pList)
2130 { 2130 {
2131 CPI_ROLE_ASSIGNMENT* pDelete = pList; 2131 CPISCHED_ROLE_ASSIGNMENT* pDelete = pList;
2132 pList = pList->pNext; 2132 pList = pList->pNext;
2133 ::HeapFree(::GetProcessHeap(), 0, pDelete); 2133 ::HeapFree(::GetProcessHeap(), 0, pDelete);
2134 } 2134 }
diff --git a/src/ca/cpasmsched.h b/src/ca/cpasmsched.h
index b5a68d7e..ddf4b6c0 100644
--- a/src/ca/cpasmsched.h
+++ b/src/ca/cpasmsched.h
@@ -13,7 +13,7 @@ enum eAssemblyAttributes
13 13
14// structs 14// structs
15 15
16struct CPI_ROLE_ASSIGNMENT 16struct CPISCHED_ROLE_ASSIGNMENT
17{ 17{
18 WCHAR wzKey[MAX_DARWIN_KEY + 1]; 18 WCHAR wzKey[MAX_DARWIN_KEY + 1];
19 19
@@ -21,10 +21,10 @@ struct CPI_ROLE_ASSIGNMENT
21 21
22 CPI_APPLICATION_ROLE* pApplicationRole; 22 CPI_APPLICATION_ROLE* pApplicationRole;
23 23
24 CPI_ROLE_ASSIGNMENT* pNext; 24 CPISCHED_ROLE_ASSIGNMENT* pNext;
25}; 25};
26 26
27struct CPI_METHOD 27struct CPISCHED_METHOD
28{ 28{
29 WCHAR wzKey[MAX_DARWIN_KEY + 1]; 29 WCHAR wzKey[MAX_DARWIN_KEY + 1];
30 WCHAR wzIndex[11 + 1]; 30 WCHAR wzIndex[11 + 1];
@@ -35,12 +35,12 @@ struct CPI_METHOD
35 35
36 int iRoleInstallCount; 36 int iRoleInstallCount;
37 int iRoleUninstallCount; 37 int iRoleUninstallCount;
38 CPI_ROLE_ASSIGNMENT* pRoles; 38 CPISCHED_ROLE_ASSIGNMENT* pRoles;
39 39
40 CPI_METHOD* pNext; 40 CPISCHED_METHOD* pNext;
41}; 41};
42 42
43struct CPI_INTERFACE 43struct CPISCHED_INTERFACE
44{ 44{
45 WCHAR wzKey[MAX_DARWIN_KEY + 1]; 45 WCHAR wzKey[MAX_DARWIN_KEY + 1];
46 WCHAR wzIID[CPI_MAX_GUID + 1]; 46 WCHAR wzIID[CPI_MAX_GUID + 1];
@@ -50,15 +50,15 @@ struct CPI_INTERFACE
50 50
51 int iRoleInstallCount; 51 int iRoleInstallCount;
52 int iRoleUninstallCount; 52 int iRoleUninstallCount;
53 CPI_ROLE_ASSIGNMENT* pRoles; 53 CPISCHED_ROLE_ASSIGNMENT* pRoles;
54 54
55 int iMethodCount; 55 int iMethodCount;
56 CPI_METHOD* pMethods; 56 CPISCHED_METHOD* pMethods;
57 57
58 CPI_INTERFACE* pNext; 58 CPISCHED_INTERFACE* pNext;
59}; 59};
60 60
61struct CPI_COMPONENT 61struct CPISCHED_COMPONENT
62{ 62{
63 WCHAR wzKey[MAX_DARWIN_KEY + 1]; 63 WCHAR wzKey[MAX_DARWIN_KEY + 1];
64 WCHAR wzCLSID[CPI_MAX_GUID + 1]; 64 WCHAR wzCLSID[CPI_MAX_GUID + 1];
@@ -68,14 +68,14 @@ struct CPI_COMPONENT
68 68
69 int iRoleInstallCount; 69 int iRoleInstallCount;
70 int iRoleUninstallCount; 70 int iRoleUninstallCount;
71 CPI_ROLE_ASSIGNMENT* pRoles; 71 CPISCHED_ROLE_ASSIGNMENT* pRoles;
72 72
73 int iInterfaceCount; 73 int iInterfaceCount;
74 CPI_INTERFACE* pInterfaces; 74 CPISCHED_INTERFACE* pInterfaces;
75 75
76 ICatalogCollection* piSubsColl; 76 ICatalogCollection* piSubsColl;
77 77
78 CPI_COMPONENT* pNext; 78 CPISCHED_COMPONENT* pNext;
79}; 79};
80 80
81struct CPI_ASSEMBLY 81struct CPI_ASSEMBLY
@@ -89,7 +89,7 @@ struct CPI_ASSEMBLY
89 int iAttributes; 89 int iAttributes;
90 90
91 int iComponentCount; 91 int iComponentCount;
92 CPI_COMPONENT* pComponents; 92 CPISCHED_COMPONENT* pComponents;
93 93
94 BOOL fReferencedForInstall; 94 BOOL fReferencedForInstall;
95 BOOL fReferencedForUninstall; 95 BOOL fReferencedForUninstall;
@@ -163,6 +163,6 @@ HRESULT CpiRoleAssignmentsUninstall(
163 ); 163 );
164HRESULT CpiGetSubscriptionsCollForComponent( 164HRESULT CpiGetSubscriptionsCollForComponent(
165 CPI_ASSEMBLY* pAsm, 165 CPI_ASSEMBLY* pAsm,
166 CPI_COMPONENT* pComp, 166 CPISCHED_COMPONENT* pComp,
167 ICatalogCollection** ppiSubsColl 167 ICatalogCollection** ppiSubsColl
168 ); 168 );
diff --git a/src/ca/cpexec.cpp b/src/ca/cpexec.cpp
index fa2446d8..9b1691fc 100644
--- a/src/ca/cpexec.cpp
+++ b/src/ca/cpexec.cpp
@@ -3,29 +3,6 @@
3#include "precomp.h" 3#include "precomp.h"
4 4
5/******************************************************************** 5/********************************************************************
6 DllMain - standard entry point for all WiX CustomActions
7
8********************************************************************/
9extern "C" BOOL WINAPI DllMain(
10 IN HINSTANCE hInst,
11 IN ULONG ulReason,
12 IN LPVOID)
13{
14 switch(ulReason)
15 {
16 case DLL_PROCESS_ATTACH:
17 WcaGlobalInitialize(hInst);
18 break;
19
20 case DLL_PROCESS_DETACH:
21 WcaGlobalFinalize();
22 break;
23 }
24
25 return TRUE;
26}
27
28/********************************************************************
29 ComPlusPrepare - CUSTOM ACTION ENTRY POINT 6 ComPlusPrepare - CUSTOM ACTION ENTRY POINT
30 7
31 Input: deferred CustomActionData - ComPlusPrepare 8 Input: deferred CustomActionData - ComPlusPrepare
@@ -133,7 +110,7 @@ extern "C" UINT __stdcall ComPlusInstallExecute(MSIHANDLE hInstall)
133 ExitOnFailure(hr, "Failed to initialize COM"); 110 ExitOnFailure(hr, "Failed to initialize COM");
134 fInitializedCom = TRUE; 111 fInitializedCom = TRUE;
135 112
136 CpiInitialize(); 113 CpiExecInitialize();
137 114
138 // get custom action data 115 // get custom action data
139 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); 116 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData);
@@ -204,7 +181,7 @@ LExit:
204 ::CloseHandle(hRollbackFile); 181 ::CloseHandle(hRollbackFile);
205 182
206 // unitialize 183 // unitialize
207 CpiFinalize(); 184 CpiExecFinalize();
208 185
209 if (fInitializedCom) 186 if (fInitializedCom)
210 ::CoUninitialize(); 187 ::CoUninitialize();
@@ -239,7 +216,7 @@ extern "C" UINT __stdcall ComPlusInstallExecuteCommit(MSIHANDLE hInstall)
239 ExitOnFailure(hr, "Failed to initialize COM"); 216 ExitOnFailure(hr, "Failed to initialize COM");
240 fInitializedCom = TRUE; 217 fInitializedCom = TRUE;
241 218
242 CpiInitialize(); 219 CpiExecInitialize();
243 220
244 // get custom action data 221 // get custom action data
245 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); 222 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData);
@@ -282,7 +259,7 @@ LExit:
282 ::CloseHandle(hRollbackFile); 259 ::CloseHandle(hRollbackFile);
283 260
284 // unitialize 261 // unitialize
285 CpiFinalize(); 262 CpiExecFinalize();
286 263
287 if (fInitializedCom) 264 if (fInitializedCom)
288 ::CoUninitialize(); 265 ::CoUninitialize();
@@ -327,7 +304,7 @@ extern "C" UINT __stdcall ComPlusRollbackInstallExecute(MSIHANDLE hInstall)
327 ExitOnFailure(hr, "Failed to initialize COM"); 304 ExitOnFailure(hr, "Failed to initialize COM");
328 fInitializedCom = TRUE; 305 fInitializedCom = TRUE;
329 306
330 CpiInitialize(); 307 CpiExecInitialize();
331 308
332 // get custom action data 309 // get custom action data
333 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); 310 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData);
@@ -439,7 +416,7 @@ LExit:
439 CpiFreeRollbackDataList(prdSubscriptions); 416 CpiFreeRollbackDataList(prdSubscriptions);
440 417
441 // unitialize 418 // unitialize
442 CpiFinalize(); 419 CpiExecFinalize();
443 420
444 if (fInitializedCom) 421 if (fInitializedCom)
445 ::CoUninitialize(); 422 ::CoUninitialize();
@@ -474,7 +451,7 @@ extern "C" UINT __stdcall ComPlusUninstallExecute(MSIHANDLE hInstall)
474 ExitOnFailure(hr, "Failed to initialize COM"); 451 ExitOnFailure(hr, "Failed to initialize COM");
475 fInitializedCom = TRUE; 452 fInitializedCom = TRUE;
476 453
477 CpiInitialize(); 454 CpiExecInitialize();
478 455
479 // get custom action data 456 // get custom action data
480 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); 457 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData);
@@ -545,7 +522,7 @@ LExit:
545 ::CloseHandle(hRollbackFile); 522 ::CloseHandle(hRollbackFile);
546 523
547 // unitialize 524 // unitialize
548 CpiFinalize(); 525 CpiExecFinalize();
549 526
550 if (fInitializedCom) 527 if (fInitializedCom)
551 ::CoUninitialize(); 528 ::CoUninitialize();
@@ -590,7 +567,7 @@ extern "C" UINT __stdcall ComPlusRollbackUninstallExecute(MSIHANDLE hInstall)
590 ExitOnFailure(hr, "Failed to initialize COM"); 567 ExitOnFailure(hr, "Failed to initialize COM");
591 fInitializedCom = TRUE; 568 fInitializedCom = TRUE;
592 569
593 CpiInitialize(); 570 CpiExecInitialize();
594 571
595 // get custom action data 572 // get custom action data
596 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); 573 hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData);
@@ -694,7 +671,7 @@ LExit:
694 CpiFreeRollbackDataList(prdSubscriptions); 671 CpiFreeRollbackDataList(prdSubscriptions);
695 672
696 // unitialize 673 // unitialize
697 CpiFinalize(); 674 CpiExecFinalize();
698 675
699 if (fInitializedCom) 676 if (fInitializedCom)
700 ::CoUninitialize(); 677 ::CoUninitialize();
diff --git a/src/ca/cppartexec.cpp b/src/ca/cppartexec.cpp
index d8c30c6a..673bdaf9 100644
--- a/src/ca/cppartexec.cpp
+++ b/src/ca/cppartexec.cpp
@@ -399,7 +399,7 @@ static HRESULT CreatePartition(
399 WcaLog(LOGMSG_VERBOSE, "Creating partition, key: %S", pAttrs->pwzKey); 399 WcaLog(LOGMSG_VERBOSE, "Creating partition, key: %S", pAttrs->pwzKey);
400 400
401 // get partitions collection 401 // get partitions collection
402 hr = CpiGetPartitionsCollection(&piPartColl); 402 hr = CpiExecGetPartitionsCollection(&piPartColl);
403 ExitOnFailure(hr, "Failed to get partitions collection"); 403 ExitOnFailure(hr, "Failed to get partitions collection");
404 404
405 // check if partition exists 405 // check if partition exists
@@ -456,7 +456,7 @@ static HRESULT RemovePartition(
456 WcaLog(LOGMSG_VERBOSE, "Removing partition, key: %S", pAttrs->pwzKey); 456 WcaLog(LOGMSG_VERBOSE, "Removing partition, key: %S", pAttrs->pwzKey);
457 457
458 // get partitions collection 458 // get partitions collection
459 hr = CpiGetPartitionsCollection(&piPartColl); 459 hr = CpiExecGetPartitionsCollection(&piPartColl);
460 ExitOnFailure(hr, "Failed to get partitions collection"); 460 ExitOnFailure(hr, "Failed to get partitions collection");
461 461
462 // remove 462 // remove
diff --git a/src/ca/cppartsched.cpp b/src/ca/cppartsched.cpp
index 6643a50b..7cd98791 100644
--- a/src/ca/cppartsched.cpp
+++ b/src/ca/cppartsched.cpp
@@ -199,7 +199,7 @@ HRESULT CpiPartitionsVerifyInstall(
199 // get partitions collection 199 // get partitions collection
200 if (!piPartColl) 200 if (!piPartColl)
201 { 201 {
202 hr = CpiGetPartitionsCollection(&piPartColl); 202 hr = CpiSchedGetPartitionsCollection(&piPartColl);
203 ExitOnFailure(hr, "Failed to get partitions collection"); 203 ExitOnFailure(hr, "Failed to get partitions collection");
204 } 204 }
205 205
@@ -336,7 +336,7 @@ HRESULT CpiPartitionsVerifyUninstall(
336 // get partitions collection 336 // get partitions collection
337 if (!piPartColl) 337 if (!piPartColl)
338 { 338 {
339 hr = CpiGetPartitionsCollection(&piPartColl); 339 hr = CpiSchedGetPartitionsCollection(&piPartColl);
340 ExitOnFailure(hr, "Failed to get partitions collection"); 340 ExitOnFailure(hr, "Failed to get partitions collection");
341 } 341 }
342 342
@@ -526,7 +526,7 @@ HRESULT CpiGetApplicationsCollForPartition(
526 if (!pPart->piApplicationsColl) 526 if (!pPart->piApplicationsColl)
527 { 527 {
528 // get partitions collection from catalog 528 // get partitions collection from catalog
529 hr = CpiGetPartitionsCollection(&piPartColl); 529 hr = CpiSchedGetPartitionsCollection(&piPartColl);
530 ExitOnFailure(hr, "Failed to get partitions collection"); 530 ExitOnFailure(hr, "Failed to get partitions collection");
531 531
532 // find application object 532 // find application object
@@ -540,7 +540,7 @@ HRESULT CpiGetApplicationsCollForPartition(
540 } 540 }
541 541
542 // get roles collection 542 // get roles collection
543 hr = CpiGetCatalogCollection(piPartColl, piPartObj, L"Applications", &pPart->piApplicationsColl); 543 hr = CpiSchedGetCatalogCollection(piPartColl, piPartObj, L"Applications", &pPart->piApplicationsColl);
544 ExitOnFailure(hr, "Failed to get applications collection"); 544 ExitOnFailure(hr, "Failed to get applications collection");
545 } 545 }
546 546
@@ -576,7 +576,7 @@ HRESULT CpiGetRolesCollForPartition(
576 if (!pPart->piRolesColl) 576 if (!pPart->piRolesColl)
577 { 577 {
578 // get partitions collection from catalog 578 // get partitions collection from catalog
579 hr = CpiGetPartitionsCollection(&piPartColl); 579 hr = CpiSchedGetPartitionsCollection(&piPartColl);
580 ExitOnFailure(hr, "Failed to get partitions collection"); 580 ExitOnFailure(hr, "Failed to get partitions collection");
581 581
582 // find partition object 582 // find partition object
@@ -587,7 +587,7 @@ HRESULT CpiGetRolesCollForPartition(
587 ExitFunction(); // exit with hr = S_FALSE 587 ExitFunction(); // exit with hr = S_FALSE
588 588
589 // get roles collection 589 // get roles collection
590 hr = CpiGetCatalogCollection(piPartColl, piPartObj, L"RolesForPartition", &pPart->piRolesColl); 590 hr = CpiSchedGetCatalogCollection(piPartColl, piPartObj, L"RolesForPartition", &pPart->piRolesColl);
591 ExitOnFailure(hr, "Failed to get roles collection"); 591 ExitOnFailure(hr, "Failed to get roles collection");
592 } 592 }
593 593
diff --git a/src/ca/cpsched.cpp b/src/ca/cpsched.cpp
index ac0dda59..ebc547ae 100644
--- a/src/ca/cpsched.cpp
+++ b/src/ca/cpsched.cpp
@@ -29,30 +29,6 @@
29#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit" 29#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit"
30#endif 30#endif
31 31
32
33/********************************************************************
34 DllMain - standard entry point for all WiX CustomActions
35
36********************************************************************/
37extern "C" BOOL WINAPI DllMain(
38 IN HINSTANCE hInst,
39 IN ULONG ulReason,
40 IN LPVOID)
41{
42 switch(ulReason)
43 {
44 case DLL_PROCESS_ATTACH:
45 WcaGlobalInitialize(hInst);
46 break;
47
48 case DLL_PROCESS_DETACH:
49 WcaGlobalFinalize();
50 break;
51 }
52
53 return TRUE;
54}
55
56/******************************************************************** 32/********************************************************************
57 ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components 33 ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components
58 34
@@ -103,7 +79,7 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall)
103 ExitOnFailure(hr, "Failed to initialize COM"); 79 ExitOnFailure(hr, "Failed to initialize COM");
104 fInitializedCom = TRUE; 80 fInitializedCom = TRUE;
105 81
106 CpiInitialize(); 82 CpiSchedInitialize();
107 83
108 // check for the prerequsite tables 84 // check for the prerequsite tables
109 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) 85 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly))
@@ -114,7 +90,7 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall)
114 90
115 // make sure we can access the COM+ admin catalog 91 // make sure we can access the COM+ admin catalog
116 do { 92 do {
117 hr = CpiGetAdminCatalog(&piCatalog); 93 hr = CpiSchedGetAdminCatalog(&piCatalog);
118 if (FAILED(hr)) 94 if (FAILED(hr))
119 { 95 {
120 WcaLog(LOGMSG_STANDARD, "Failed to get COM+ admin catalog"); 96 WcaLog(LOGMSG_STANDARD, "Failed to get COM+ admin catalog");
@@ -320,7 +296,7 @@ LExit:
320 CpiSubscriptionListFree(&subList); 296 CpiSubscriptionListFree(&subList);
321 297
322 // unitialize 298 // unitialize
323 CpiFinalize(); 299 CpiSchedFinalize();
324 300
325 if (fInitializedCom) 301 if (fInitializedCom)
326 ::CoUninitialize(); 302 ::CoUninitialize();
@@ -378,7 +354,7 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall)
378 ExitOnFailure(hr, "Failed to initialize COM"); 354 ExitOnFailure(hr, "Failed to initialize COM");
379 fInitializedCom = TRUE; 355 fInitializedCom = TRUE;
380 356
381 CpiInitialize(); 357 CpiSchedInitialize();
382 358
383 // check for the prerequsite tables 359 // check for the prerequsite tables
384 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) 360 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly))
@@ -389,7 +365,7 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall)
389 365
390 // make sure we can access the COM+ admin catalog 366 // make sure we can access the COM+ admin catalog
391 do { 367 do {
392 hr = CpiGetAdminCatalog(&piCatalog); 368 hr = CpiSchedGetAdminCatalog(&piCatalog);
393 if (FAILED(hr)) 369 if (FAILED(hr))
394 { 370 {
395 WcaLog(LOGMSG_STANDARD, "Failed to get COM+ admin catalog"); 371 WcaLog(LOGMSG_STANDARD, "Failed to get COM+ admin catalog");
@@ -580,7 +556,7 @@ LExit:
580 CpiSubscriptionListFree(&subList); 556 CpiSubscriptionListFree(&subList);
581 557
582 // unitialize 558 // unitialize
583 CpiFinalize(); 559 CpiSchedFinalize();
584 560
585 if (fInitializedCom) 561 if (fInitializedCom)
586 ::CoUninitialize(); 562 ::CoUninitialize();
diff --git a/src/ca/cpsubssched.cpp b/src/ca/cpsubssched.cpp
index 73fd4f6d..df15fd03 100644
--- a/src/ca/cpsubssched.cpp
+++ b/src/ca/cpsubssched.cpp
@@ -53,7 +53,7 @@ static HRESULT ComponentFindByKey(
53 CPI_ASSEMBLY_LIST* pAsmList, 53 CPI_ASSEMBLY_LIST* pAsmList,
54 LPCWSTR pwzKey, 54 LPCWSTR pwzKey,
55 CPI_ASSEMBLY** ppAsmItm, 55 CPI_ASSEMBLY** ppAsmItm,
56 CPI_COMPONENT** ppCompItm 56 CPISCHED_COMPONENT** ppCompItm
57 ); 57 );
58 58
59 59
@@ -586,12 +586,12 @@ static HRESULT ComponentFindByKey(
586 CPI_ASSEMBLY_LIST* pAsmList, 586 CPI_ASSEMBLY_LIST* pAsmList,
587 LPCWSTR pwzKey, 587 LPCWSTR pwzKey,
588 CPI_ASSEMBLY** ppAsmItm, 588 CPI_ASSEMBLY** ppAsmItm,
589 CPI_COMPONENT** ppCompItm 589 CPISCHED_COMPONENT** ppCompItm
590 ) 590 )
591{ 591{
592 for (CPI_ASSEMBLY* pAsmItm = pAsmList->pFirst; pAsmItm; pAsmItm = pAsmItm->pNext) 592 for (CPI_ASSEMBLY* pAsmItm = pAsmList->pFirst; pAsmItm; pAsmItm = pAsmItm->pNext)
593 { 593 {
594 for (CPI_COMPONENT* pCompItm = pAsmItm->pComponents; pCompItm; pCompItm = pCompItm->pNext) 594 for (CPISCHED_COMPONENT* pCompItm = pAsmItm->pComponents; pCompItm; pCompItm = pCompItm->pNext)
595 { 595 {
596 if (0 == lstrcmpW(pCompItm->wzKey, pwzKey)) 596 if (0 == lstrcmpW(pCompItm->wzKey, pwzKey))
597 { 597 {
diff --git a/src/ca/cpsubssched.h b/src/ca/cpsubssched.h
index 3fc18478..83ff1af8 100644
--- a/src/ca/cpsubssched.h
+++ b/src/ca/cpsubssched.h
@@ -18,7 +18,7 @@ struct CPI_SUBSCRIPTION
18 INSTALLSTATE isInstalled, isAction; 18 INSTALLSTATE isInstalled, isAction;
19 19
20 CPI_ASSEMBLY* pAssembly; 20 CPI_ASSEMBLY* pAssembly;
21 CPI_COMPONENT* pComponent; 21 CPISCHED_COMPONENT* pComponent;
22 22
23 CPI_SUBSCRIPTION* pNext; 23 CPI_SUBSCRIPTION* pNext;
24}; 24};
diff --git a/src/ca/cputilexec.cpp b/src/ca/cputilexec.cpp
index e081678b..1c2c8b93 100644
--- a/src/ca/cputilexec.cpp
+++ b/src/ca/cputilexec.cpp
@@ -69,13 +69,13 @@ static ICOMAdminCatalog* gpiCatalog;
69 69
70// function definitions 70// function definitions
71 71
72void CpiInitialize() 72void CpiExecInitialize()
73{ 73{
74 // collections 74 // collections
75 gpiCatalog = NULL; 75 gpiCatalog = NULL;
76} 76}
77 77
78void CpiFinalize() 78void CpiExecFinalize()
79{ 79{
80 // collections 80 // collections
81 ReleaseObject(gpiCatalog); 81 ReleaseObject(gpiCatalog);
@@ -187,7 +187,7 @@ LExit:
187 return hr; 187 return hr;
188} 188}
189 189
190HRESULT CpiGetAdminCatalog( 190HRESULT CpiExecGetAdminCatalog(
191 ICOMAdminCatalog** ppiCatalog 191 ICOMAdminCatalog** ppiCatalog
192 ) 192 )
193{ 193{
@@ -225,11 +225,11 @@ HRESULT CpiLogCatalogErrorInfo()
225 LPWSTR pwzMinorRef = NULL; 225 LPWSTR pwzMinorRef = NULL;
226 226
227 // get catalog 227 // get catalog
228 hr = CpiGetAdminCatalog(&piCatalog); 228 hr = CpiExecGetAdminCatalog(&piCatalog);
229 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 229 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
230 230
231 // get error info collection 231 // get error info collection
232 hr = CpiGetCatalogCollection(L"ErrorInfo", &piErrColl); 232 hr = CpiExecGetCatalogCollection(L"ErrorInfo", &piErrColl);
233 ExitOnFailure(hr, "Failed to get error info collection"); 233 ExitOnFailure(hr, "Failed to get error info collection");
234 234
235 // loop objects 235 // loop objects
@@ -282,7 +282,7 @@ LExit:
282 return hr; 282 return hr;
283} 283}
284 284
285HRESULT CpiGetCatalogCollection( 285HRESULT CpiExecGetCatalogCollection(
286 LPCWSTR pwzName, 286 LPCWSTR pwzName,
287 ICatalogCollection** ppiColl 287 ICatalogCollection** ppiColl
288 ) 288 )
@@ -299,7 +299,7 @@ HRESULT CpiGetCatalogCollection(
299 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name"); 299 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name");
300 300
301 // get catalog 301 // get catalog
302 hr = CpiGetAdminCatalog(&piCatalog); 302 hr = CpiExecGetAdminCatalog(&piCatalog);
303 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 303 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
304 304
305 // get collecton from catalog 305 // get collecton from catalog
@@ -326,7 +326,7 @@ LExit:
326 return hr; 326 return hr;
327} 327}
328 328
329HRESULT CpiGetCatalogCollection( 329HRESULT CpiExecGetCatalogCollection(
330 ICatalogCollection* piColl, 330 ICatalogCollection* piColl,
331 ICatalogObject* piObj, 331 ICatalogObject* piObj,
332 LPCWSTR pwzName, 332 LPCWSTR pwzName,
@@ -348,7 +348,7 @@ HRESULT CpiGetCatalogCollection(
348 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name"); 348 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name");
349 349
350 // get catalog 350 // get catalog
351 hr = CpiGetAdminCatalog(&piCatalog); 351 hr = CpiExecGetAdminCatalog(&piCatalog);
352 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 352 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
353 353
354 // get key 354 // get key
@@ -894,14 +894,14 @@ LExit:
894 return hr; 894 return hr;
895} 895}
896 896
897HRESULT CpiGetPartitionsCollection( 897HRESULT CpiExecGetPartitionsCollection(
898 ICatalogCollection** ppiPartColl 898 ICatalogCollection** ppiPartColl
899 ) 899 )
900{ 900{
901 HRESULT hr = S_OK; 901 HRESULT hr = S_OK;
902 902
903 // get collection 903 // get collection
904 hr = CpiGetCatalogCollection(L"Partitions", ppiPartColl); 904 hr = CpiExecGetCatalogCollection(L"Partitions", ppiPartColl);
905 ExitOnFailure(hr, "Failed to get catalog collection"); 905 ExitOnFailure(hr, "Failed to get catalog collection");
906 906
907 hr = S_OK; 907 hr = S_OK;
@@ -921,7 +921,7 @@ HRESULT CpiGetPartitionRolesCollection(
921 ICatalogObject* piPartObj = NULL; 921 ICatalogObject* piPartObj = NULL;
922 922
923 // get partitions collection 923 // get partitions collection
924 hr = CpiGetPartitionsCollection(&piPartColl); 924 hr = CpiExecGetPartitionsCollection(&piPartColl);
925 ExitOnFailure(hr, "Failed to get partitions collection"); 925 ExitOnFailure(hr, "Failed to get partitions collection");
926 926
927 if (S_FALSE == hr) 927 if (S_FALSE == hr)
@@ -935,7 +935,7 @@ HRESULT CpiGetPartitionRolesCollection(
935 ExitFunction(); // partition not found, exit with hr = S_FALSE 935 ExitFunction(); // partition not found, exit with hr = S_FALSE
936 936
937 // get roles collection 937 // get roles collection
938 hr = CpiGetCatalogCollection(piPartColl, piPartObj, L"RolesForPartition", ppiRolesColl); 938 hr = CpiExecGetCatalogCollection(piPartColl, piPartObj, L"RolesForPartition", ppiRolesColl);
939 ExitOnFailure(hr, "Failed to get catalog collection"); 939 ExitOnFailure(hr, "Failed to get catalog collection");
940 940
941 hr = S_OK; 941 hr = S_OK;
@@ -974,7 +974,7 @@ HRESULT CpiGetUsersInPartitionRoleCollection(
974 ExitFunction(); // user not found, exit with hr = S_FALSE 974 ExitFunction(); // user not found, exit with hr = S_FALSE
975 975
976 // get roles collection 976 // get roles collection
977 hr = CpiGetCatalogCollection(piRoleColl, piRoleObj, L"UsersInPartitionRole", ppiUsrInRoleColl); 977 hr = CpiExecGetCatalogCollection(piRoleColl, piRoleObj, L"UsersInPartitionRole", ppiUsrInRoleColl);
978 ExitOnFailure(hr, "Failed to get catalog collection"); 978 ExitOnFailure(hr, "Failed to get catalog collection");
979 979
980 hr = S_OK; 980 hr = S_OK;
@@ -994,7 +994,7 @@ HRESULT CpiGetPartitionUsersCollection(
994 HRESULT hr = S_OK; 994 HRESULT hr = S_OK;
995 995
996 // get roles collection 996 // get roles collection
997 hr = CpiGetCatalogCollection(L"PartitionUsers", ppiUserColl); 997 hr = CpiExecGetCatalogCollection(L"PartitionUsers", ppiUserColl);
998 ExitOnFailure(hr, "Failed to get catalog collection"); 998 ExitOnFailure(hr, "Failed to get catalog collection");
999 999
1000 hr = S_OK; 1000 hr = S_OK;
@@ -1003,7 +1003,7 @@ LExit:
1003 return hr; 1003 return hr;
1004} 1004}
1005 1005
1006HRESULT CpiGetApplicationsCollection( 1006HRESULT CpiExecGetApplicationsCollection(
1007 LPCWSTR pwzPartID, 1007 LPCWSTR pwzPartID,
1008 ICatalogCollection** ppiAppColl 1008 ICatalogCollection** ppiAppColl
1009 ) 1009 )
@@ -1018,7 +1018,7 @@ HRESULT CpiGetApplicationsCollection(
1018 ICatalogObject* piPartObj = NULL; 1018 ICatalogObject* piPartObj = NULL;
1019 1019
1020 // get catalog 1020 // get catalog
1021 hr = CpiGetAdminCatalog(&piCatalog); 1021 hr = CpiExecGetAdminCatalog(&piCatalog);
1022 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 1022 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
1023 1023
1024 // get ICOMAdminCatalog2 interface 1024 // get ICOMAdminCatalog2 interface
@@ -1038,7 +1038,7 @@ HRESULT CpiGetApplicationsCollection(
1038 } 1038 }
1039 1039
1040 // get partitions collection 1040 // get partitions collection
1041 hr = CpiGetPartitionsCollection(&piPartColl); 1041 hr = CpiExecGetPartitionsCollection(&piPartColl);
1042 ExitOnFailure(hr, "Failed to get partitions collection"); 1042 ExitOnFailure(hr, "Failed to get partitions collection");
1043 1043
1044 // find object 1044 // find object
@@ -1049,7 +1049,7 @@ HRESULT CpiGetApplicationsCollection(
1049 ExitFunction(); // partition not found, exit with hr = S_FALSE 1049 ExitFunction(); // partition not found, exit with hr = S_FALSE
1050 1050
1051 // get applications collection 1051 // get applications collection
1052 hr = CpiGetCatalogCollection(piPartColl, piPartObj, L"Applications", ppiAppColl); 1052 hr = CpiExecGetCatalogCollection(piPartColl, piPartObj, L"Applications", ppiAppColl);
1053 ExitOnFailure(hr, "Failed to get catalog collection for partition"); 1053 ExitOnFailure(hr, "Failed to get catalog collection for partition");
1054 } 1054 }
1055 1055
@@ -1061,7 +1061,7 @@ HRESULT CpiGetApplicationsCollection(
1061 ExitOnFailure(hr = E_FAIL, "Partitions are not supported by this version of COM+"); 1061 ExitOnFailure(hr = E_FAIL, "Partitions are not supported by this version of COM+");
1062 1062
1063 // get applications collection 1063 // get applications collection
1064 hr = CpiGetCatalogCollection(L"Applications", ppiAppColl); 1064 hr = CpiExecGetCatalogCollection(L"Applications", ppiAppColl);
1065 ExitOnFailure(hr, "Failed to get catalog collection"); 1065 ExitOnFailure(hr, "Failed to get catalog collection");
1066 } 1066 }
1067 1067
@@ -1091,7 +1091,7 @@ HRESULT CpiGetRolesCollection(
1091 ICatalogObject* piAppObj = NULL; 1091 ICatalogObject* piAppObj = NULL;
1092 1092
1093 // get applications collection 1093 // get applications collection
1094 hr = CpiGetApplicationsCollection(pwzPartID, &piAppColl); 1094 hr = CpiExecGetApplicationsCollection(pwzPartID, &piAppColl);
1095 ExitOnFailure(hr, "Failed to get applications collection"); 1095 ExitOnFailure(hr, "Failed to get applications collection");
1096 1096
1097 if (S_FALSE == hr) 1097 if (S_FALSE == hr)
@@ -1105,7 +1105,7 @@ HRESULT CpiGetRolesCollection(
1105 ExitFunction(); // application not found, exit with hr = S_FALSE 1105 ExitFunction(); // application not found, exit with hr = S_FALSE
1106 1106
1107 // get roles collection 1107 // get roles collection
1108 hr = CpiGetCatalogCollection(piAppColl, piAppObj, L"Roles", ppiRolesColl); 1108 hr = CpiExecGetCatalogCollection(piAppColl, piAppObj, L"Roles", ppiRolesColl);
1109 ExitOnFailure(hr, "Failed to catalog collection"); 1109 ExitOnFailure(hr, "Failed to catalog collection");
1110 1110
1111 hr = S_OK; 1111 hr = S_OK;
@@ -1145,7 +1145,7 @@ HRESULT CpiGetUsersInRoleCollection(
1145 ExitFunction(); // role not found, exit with hr = S_FALSE 1145 ExitFunction(); // role not found, exit with hr = S_FALSE
1146 1146
1147 // get roles collection 1147 // get roles collection
1148 hr = CpiGetCatalogCollection(piRoleColl, piRoleObj, L"UsersInRole", ppiUsrInRoleColl); 1148 hr = CpiExecGetCatalogCollection(piRoleColl, piRoleObj, L"UsersInRole", ppiUsrInRoleColl);
1149 ExitOnFailure(hr, "Failed to get catalog collection"); 1149 ExitOnFailure(hr, "Failed to get catalog collection");
1150 1150
1151 hr = S_OK; 1151 hr = S_OK;
@@ -1170,7 +1170,7 @@ HRESULT CpiGetComponentsCollection(
1170 ICatalogObject* piAppObj = NULL; 1170 ICatalogObject* piAppObj = NULL;
1171 1171
1172 // get applications collection 1172 // get applications collection
1173 hr = CpiGetApplicationsCollection(pwzPartID, &piAppColl); 1173 hr = CpiExecGetApplicationsCollection(pwzPartID, &piAppColl);
1174 ExitOnFailure(hr, "Failed to get applications collection"); 1174 ExitOnFailure(hr, "Failed to get applications collection");
1175 1175
1176 if (S_FALSE == hr) 1176 if (S_FALSE == hr)
@@ -1184,7 +1184,7 @@ HRESULT CpiGetComponentsCollection(
1184 ExitFunction(); // application not found, exit with hr = S_FALSE 1184 ExitFunction(); // application not found, exit with hr = S_FALSE
1185 1185
1186 // get components collection 1186 // get components collection
1187 hr = CpiGetCatalogCollection(piAppColl, piAppObj, L"Components", ppiCompsColl); 1187 hr = CpiExecGetCatalogCollection(piAppColl, piAppObj, L"Components", ppiCompsColl);
1188 ExitOnFailure(hr, "Failed to get catalog collection"); 1188 ExitOnFailure(hr, "Failed to get catalog collection");
1189 1189
1190 hr = S_OK; 1190 hr = S_OK;
@@ -1206,7 +1206,7 @@ HRESULT CpiGetInterfacesCollection(
1206 HRESULT hr = S_OK; 1206 HRESULT hr = S_OK;
1207 1207
1208 // get interfaces collection 1208 // get interfaces collection
1209 hr = CpiGetCatalogCollection(piCompColl, piCompObj, L"InterfacesForComponent", ppiIntfColl); 1209 hr = CpiExecGetCatalogCollection(piCompColl, piCompObj, L"InterfacesForComponent", ppiIntfColl);
1210 ExitOnFailure(hr, "Failed to get catalog collection"); 1210 ExitOnFailure(hr, "Failed to get catalog collection");
1211 1211
1212 hr = S_OK; 1212 hr = S_OK;
@@ -1224,7 +1224,7 @@ HRESULT CpiGetMethodsCollection(
1224 HRESULT hr = S_OK; 1224 HRESULT hr = S_OK;
1225 1225
1226 // get interfaces collection 1226 // get interfaces collection
1227 hr = CpiGetCatalogCollection(piIntfColl, piIntfObj, L"MethodsForInterface", ppiMethColl); 1227 hr = CpiExecGetCatalogCollection(piIntfColl, piIntfObj, L"MethodsForInterface", ppiMethColl);
1228 ExitOnFailure(hr, "Failed to get catalog collection"); 1228 ExitOnFailure(hr, "Failed to get catalog collection");
1229 1229
1230 hr = S_OK; 1230 hr = S_OK;
@@ -1260,7 +1260,7 @@ HRESULT CpiGetSubscriptionsCollection(
1260 ExitFunction(); // component not found, exit with hr = S_FALSE 1260 ExitFunction(); // component not found, exit with hr = S_FALSE
1261 1261
1262 // get subscriptions collection 1262 // get subscriptions collection
1263 hr = CpiGetCatalogCollection(piCompColl, piCompObj, L"SubscriptionsForComponent", ppiSubsColl); 1263 hr = CpiExecGetCatalogCollection(piCompColl, piCompObj, L"SubscriptionsForComponent", ppiSubsColl);
1264 ExitOnFailure(hr, "Failed to get catalog collection"); 1264 ExitOnFailure(hr, "Failed to get catalog collection");
1265 1265
1266 hr = S_OK; 1266 hr = S_OK;
diff --git a/src/ca/cputilexec.h b/src/ca/cputilexec.h
index 51b47583..b900883d 100644
--- a/src/ca/cputilexec.h
+++ b/src/ca/cputilexec.h
@@ -28,8 +28,8 @@ struct CPI_ROLLBACK_DATA
28 28
29// function prototypes 29// function prototypes
30 30
31void CpiInitialize(); 31void CpiExecInitialize();
32void CpiFinalize(); 32void CpiExecFinalize();
33HRESULT CpiActionStartMessage( 33HRESULT CpiActionStartMessage(
34 LPWSTR* ppwzActionData, 34 LPWSTR* ppwzActionData,
35 BOOL fSuppress 35 BOOL fSuppress
@@ -38,15 +38,15 @@ HRESULT CpiActionDataMessage(
38 DWORD cArgs, 38 DWORD cArgs,
39 ... 39 ...
40 ); 40 );
41HRESULT CpiGetAdminCatalog( 41HRESULT CpiExecGetAdminCatalog(
42 ICOMAdminCatalog** ppiCatalog 42 ICOMAdminCatalog** ppiCatalog
43 ); 43 );
44HRESULT CpiLogCatalogErrorInfo(); 44HRESULT CpiLogCatalogErrorInfo();
45HRESULT CpiGetCatalogCollection( 45HRESULT CpiExecGetCatalogCollection(
46 LPCWSTR pwzName, 46 LPCWSTR pwzName,
47 ICatalogCollection** ppiColl 47 ICatalogCollection** ppiColl
48 ); 48 );
49HRESULT CpiGetCatalogCollection( 49HRESULT CpiExecGetCatalogCollection(
50 ICatalogCollection* piColl, 50 ICatalogCollection* piColl,
51 ICatalogObject* piObj, 51 ICatalogObject* piObj,
52 LPCWSTR pwzName, 52 LPCWSTR pwzName,
@@ -105,7 +105,7 @@ HRESULT CpiFindUserCollectionObject(
105 PSID pSid, 105 PSID pSid,
106 ICatalogObject** ppiObj 106 ICatalogObject** ppiObj
107 ); 107 );
108HRESULT CpiGetPartitionsCollection( 108HRESULT CpiExecGetPartitionsCollection(
109 ICatalogCollection** ppiPartColl 109 ICatalogCollection** ppiPartColl
110 ); 110 );
111HRESULT CpiGetPartitionRolesCollection( 111HRESULT CpiGetPartitionRolesCollection(
@@ -120,7 +120,7 @@ HRESULT CpiGetUsersInPartitionRoleCollection(
120HRESULT CpiGetPartitionUsersCollection( 120HRESULT CpiGetPartitionUsersCollection(
121 ICatalogCollection** ppiUserColl 121 ICatalogCollection** ppiUserColl
122 ); 122 );
123HRESULT CpiGetApplicationsCollection( 123HRESULT CpiExecGetApplicationsCollection(
124 LPCWSTR pwzPartID, 124 LPCWSTR pwzPartID,
125 ICatalogCollection** ppiAppColl 125 ICatalogCollection** ppiAppColl
126 ); 126 );
diff --git a/src/ca/cputilsched.cpp b/src/ca/cputilsched.cpp
index 9dbe21ec..1a958c56 100644
--- a/src/ca/cputilsched.cpp
+++ b/src/ca/cputilsched.cpp
@@ -43,7 +43,7 @@ static int giTables;
43 43
44// function definitions 44// function definitions
45 45
46void CpiInitialize() 46void CpiSchedInitialize()
47{ 47{
48 // collections 48 // collections
49 gpiCatalog = NULL; 49 gpiCatalog = NULL;
@@ -80,7 +80,7 @@ void CpiInitialize()
80 if (S_OK == WcaTableExists(L"ComPlusSubscriptionProperty")) giTables |= cptComPlusSubscriptionProperty; 80 if (S_OK == WcaTableExists(L"ComPlusSubscriptionProperty")) giTables |= cptComPlusSubscriptionProperty;
81} 81}
82 82
83void CpiFinalize() 83void CpiSchedFinalize()
84{ 84{
85 // collections 85 // collections
86 ReleaseObject(gpiCatalog); 86 ReleaseObject(gpiCatalog);
@@ -95,7 +95,7 @@ BOOL CpiTableExists(
95 return (giTables & iTable) == iTable; 95 return (giTables & iTable) == iTable;
96} 96}
97 97
98HRESULT CpiGetAdminCatalog( 98HRESULT CpiSchedGetAdminCatalog(
99 ICOMAdminCatalog** ppiCatalog 99 ICOMAdminCatalog** ppiCatalog
100 ) 100 )
101{ 101{
@@ -118,7 +118,7 @@ LExit:
118 return hr; 118 return hr;
119} 119}
120 120
121HRESULT CpiGetCatalogCollection( 121HRESULT CpiSchedGetCatalogCollection(
122 LPCWSTR pwzName, 122 LPCWSTR pwzName,
123 ICatalogCollection** ppiColl 123 ICatalogCollection** ppiColl
124 ) 124 )
@@ -134,7 +134,7 @@ HRESULT CpiGetCatalogCollection(
134 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name"); 134 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name");
135 135
136 // get catalog 136 // get catalog
137 hr = CpiGetAdminCatalog(&piCatalog); 137 hr = CpiSchedGetAdminCatalog(&piCatalog);
138 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 138 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
139 139
140 // get collecton from catalog 140 // get collecton from catalog
@@ -159,7 +159,7 @@ LExit:
159 return hr; 159 return hr;
160} 160}
161 161
162HRESULT CpiGetCatalogCollection( 162HRESULT CpiSchedGetCatalogCollection(
163 ICatalogCollection* piColl, 163 ICatalogCollection* piColl,
164 ICatalogObject* piObj, 164 ICatalogObject* piObj,
165 LPCWSTR pwzName, 165 LPCWSTR pwzName,
@@ -180,7 +180,7 @@ HRESULT CpiGetCatalogCollection(
180 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name"); 180 ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for collection name");
181 181
182 // get catalog 182 // get catalog
183 hr = CpiGetAdminCatalog(&piCatalog); 183 hr = CpiSchedGetAdminCatalog(&piCatalog);
184 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 184 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
185 185
186 // get key 186 // get key
@@ -331,7 +331,7 @@ LExit:
331 return hr; 331 return hr;
332} 332}
333 333
334HRESULT CpiGetPartitionsCollection( 334HRESULT CpiSchedGetPartitionsCollection(
335 ICatalogCollection** ppiPartColl 335 ICatalogCollection** ppiPartColl
336 ) 336 )
337{ 337{
@@ -340,7 +340,7 @@ HRESULT CpiGetPartitionsCollection(
340 if (!gpiPartColl) 340 if (!gpiPartColl)
341 { 341 {
342 // get collection 342 // get collection
343 hr = CpiGetCatalogCollection(L"Partitions", &gpiPartColl); 343 hr = CpiSchedGetCatalogCollection(L"Partitions", &gpiPartColl);
344 ExitOnFailure(hr, "Failed to get partitions collection"); 344 ExitOnFailure(hr, "Failed to get partitions collection");
345 } 345 }
346 346
@@ -354,7 +354,7 @@ LExit:
354 return hr; 354 return hr;
355} 355}
356 356
357HRESULT CpiGetApplicationsCollection( 357HRESULT CpiSchedGetApplicationsCollection(
358 ICatalogCollection** ppiAppColl 358 ICatalogCollection** ppiAppColl
359 ) 359 )
360{ 360{
@@ -369,7 +369,7 @@ HRESULT CpiGetApplicationsCollection(
369 if (!gpiAppColl) 369 if (!gpiAppColl)
370 { 370 {
371 // get catalog 371 // get catalog
372 hr = CpiGetAdminCatalog(&piCatalog); 372 hr = CpiSchedGetAdminCatalog(&piCatalog);
373 ExitOnFailure(hr, "Failed to get COM+ admin catalog"); 373 ExitOnFailure(hr, "Failed to get COM+ admin catalog");
374 374
375 // get ICOMAdminCatalog2 interface 375 // get ICOMAdminCatalog2 interface
@@ -385,7 +385,7 @@ HRESULT CpiGetApplicationsCollection(
385 ExitOnFailure(hr, "Failed to get global partition id"); 385 ExitOnFailure(hr, "Failed to get global partition id");
386 386
387 // get partitions collection 387 // get partitions collection
388 hr = CpiGetPartitionsCollection(&piPartColl); 388 hr = CpiSchedGetPartitionsCollection(&piPartColl);
389 ExitOnFailure(hr, "Failed to get partitions collection"); 389 ExitOnFailure(hr, "Failed to get partitions collection");
390 390
391 // find object 391 // find object
@@ -396,7 +396,7 @@ HRESULT CpiGetApplicationsCollection(
396 ExitFunction(); // partition not found, exit with hr = S_FALSE 396 ExitFunction(); // partition not found, exit with hr = S_FALSE
397 397
398 // get applications collection 398 // get applications collection
399 hr = CpiGetCatalogCollection(piPartColl, piPartObj, L"Applications", &gpiAppColl); 399 hr = CpiSchedGetCatalogCollection(piPartColl, piPartObj, L"Applications", &gpiAppColl);
400 ExitOnFailure(hr, "Failed to get applications collection"); 400 ExitOnFailure(hr, "Failed to get applications collection");
401 } 401 }
402 402
@@ -404,7 +404,7 @@ HRESULT CpiGetApplicationsCollection(
404 else 404 else
405 { 405 {
406 // get applications collection 406 // get applications collection
407 hr = CpiGetCatalogCollection(L"Applications", &gpiAppColl); 407 hr = CpiSchedGetCatalogCollection(L"Applications", &gpiAppColl);
408 ExitOnFailure(hr, "Failed to get applications collection"); 408 ExitOnFailure(hr, "Failed to get applications collection");
409 } 409 }
410 } 410 }
diff --git a/src/ca/cputilsched.h b/src/ca/cputilsched.h
index 61aaab84..1f315576 100644
--- a/src/ca/cputilsched.h
+++ b/src/ca/cputilsched.h
@@ -2,12 +2,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. 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 3
4 4
5#define CPI_MAX_GUID 38
6
7enum eRunMode { rmDeferred = 1, rmCommit, rmRollback }; 5enum eRunMode { rmDeferred = 1, rmCommit, rmRollback };
8 6
9enum eActionType { atNoOp = 0, atCreate, atRemove };
10
11enum eComPlusPropertyType { cpptNone = 0, cpptBoolean, cpptInteger, cpptString, cpptUser }; 7enum eComPlusPropertyType { cpptNone = 0, cpptBoolean, cpptInteger, cpptString, cpptUser };
12 8
13enum eComPlusTables 9enum eComPlusTables
@@ -42,14 +38,6 @@ enum eComPlusTables
42 38
43// structs 39// structs
44 40
45struct CPI_PROPERTY
46{
47 WCHAR wzName[MAX_DARWIN_KEY + 1];
48 LPWSTR pwzValue;
49
50 CPI_PROPERTY* pNext;
51};
52
53struct CPI_PROPERTY_DEFINITION 41struct CPI_PROPERTY_DEFINITION
54{ 42{
55 LPCWSTR pwzName; 43 LPCWSTR pwzName;
@@ -60,19 +48,19 @@ struct CPI_PROPERTY_DEFINITION
60 48
61// function prototypes 49// function prototypes
62 50
63void CpiInitialize(); 51void CpiSchedInitialize();
64void CpiFinalize(); 52void CpiSchedFinalize();
65BOOL CpiTableExists( 53BOOL CpiTableExists(
66 int iTable 54 int iTable
67 ); 55 );
68HRESULT CpiGetAdminCatalog( 56HRESULT CpiSchedGetAdminCatalog(
69 ICOMAdminCatalog** ppiCatalog 57 ICOMAdminCatalog** ppiCatalog
70 ); 58 );
71HRESULT CpiGetCatalogCollection( 59HRESULT CpiSchedGetCatalogCollection(
72 LPCWSTR pwzName, 60 LPCWSTR pwzName,
73 ICatalogCollection** ppiColl 61 ICatalogCollection** ppiColl
74 ); 62 );
75HRESULT CpiGetCatalogCollection( 63HRESULT CpiSchedGetCatalogCollection(
76 ICatalogCollection* piColl, 64 ICatalogCollection* piColl,
77 ICatalogObject* piObj, 65 ICatalogObject* piObj,
78 LPCWSTR pwzName, 66 LPCWSTR pwzName,
@@ -89,10 +77,10 @@ HRESULT CpiFindCollectionObject(
89 LPCWSTR pwzName, 77 LPCWSTR pwzName,
90 ICatalogObject** ppiObj 78 ICatalogObject** ppiObj
91 ); 79 );
92HRESULT CpiGetPartitionsCollection( 80HRESULT CpiSchedGetPartitionsCollection(
93 ICatalogCollection** ppiPartColl 81 ICatalogCollection** ppiPartColl
94 ); 82 );
95HRESULT CpiGetApplicationsCollection( 83HRESULT CpiSchedGetApplicationsCollection(
96 ICatalogCollection** ppiAppColl 84 ICatalogCollection** ppiAppColl
97 ); 85 );
98HRESULT CpiAddActionTextToActionData( 86HRESULT CpiAddActionTextToActionData(
diff --git a/src/ca/custommsierrors.h b/src/ca/custommsierrors.h
new file mode 100644
index 00000000..219df698
--- /dev/null
+++ b/src/ca/custommsierrors.h
@@ -0,0 +1,29 @@
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#define msierrComPlusCannotConnect 28001
6#define msierrComPlusPartitionReadFailed 28002
7#define msierrComPlusPartitionRoleReadFailed 28003
8#define msierrComPlusUserInPartitionRoleReadFailed 28004
9#define msierrComPlusPartitionUserReadFailed 28005
10#define msierrComPlusApplicationReadFailed 28006
11#define msierrComPlusApplicationRoleReadFailed 28007
12#define msierrComPlusUserInApplicationRoleReadFailed 28008
13#define msierrComPlusAssembliesReadFailed 28009
14#define msierrComPlusSubscriptionReadFailed 28010
15#define msierrComPlusPartitionDependency 28011
16#define msierrComPlusPartitionNotFound 28012
17#define msierrComPlusPartitionIdConflict 28013
18#define msierrComPlusPartitionNameConflict 28014
19#define msierrComPlusApplicationDependency 28015
20#define msierrComPlusApplicationNotFound 28016
21#define msierrComPlusApplicationIdConflict 28017
22#define msierrComPlusApplicationNameConflict 28018
23#define msierrComPlusApplicationRoleDependency 28019
24#define msierrComPlusApplicationRoleNotFound 28020
25#define msierrComPlusApplicationRoleConflict 28021
26#define msierrComPlusAssemblyDependency 28022
27#define msierrComPlusSubscriptionIdConflict 28023
28#define msierrComPlusSubscriptionNameConflict 28024
29#define msierrComPlusFailedLookupNames 28025
diff --git a/src/ca/dllmain.cpp b/src/ca/dllmain.cpp
new file mode 100644
index 00000000..7d299feb
--- /dev/null
+++ b/src/ca/dllmain.cpp
@@ -0,0 +1,27 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3#include "precomp.h"
4
5/********************************************************************
6DllMain - standard entry point for all WiX custom actions.
7
8********************************************************************/
9extern "C" BOOL WINAPI DllMain(
10 IN HINSTANCE hInstance,
11 IN ULONG ulReason,
12 IN LPVOID)
13{
14 switch(ulReason)
15 {
16 case DLL_PROCESS_ATTACH:
17 WcaGlobalInitialize(hInstance);
18 ::DisableThreadLibraryCalls(hInstance);
19 break;
20
21 case DLL_PROCESS_DETACH:
22 WcaGlobalFinalize();
23 break;
24 }
25
26 return TRUE;
27}
diff --git a/src/ca/packages.config b/src/ca/packages.config
new file mode 100644
index 00000000..ab964d2c
--- /dev/null
+++ b/src/ca/packages.config
@@ -0,0 +1,5 @@
1<?xml version="1.0" encoding="utf-8"?>
2<packages>
3 <package id="WixToolset.DUtil" version="4.0.16" targetFramework="native" />
4 <package id="WixToolset.WcaUtil" version="4.0.2" targetFramework="native" />
5</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..74c328d2
--- /dev/null
+++ b/src/ca/precomp.h
@@ -0,0 +1,33 @@
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#include <strsafe.h>
8#include <comadmin.h>
9#include <ntsecapi.h>
10#include <aclapi.h>
11
12#include "wcautil.h"
13#include "memutil.h"
14#include "strutil.h"
15#include "wiutil.h"
16
17#include "CustomMsiErrors.h"
18
19#include "cpcost.h"
20#include "cputilexec.h"
21#include "cppartexec.h"
22#include "cppartroleexec.h"
23#include "cpappexec.h"
24#include "cpapproleexec.h"
25#include "cpasmexec.h"
26#include "cpsubsexec.h"
27#include "cputilsched.h"
28#include "cppartsched.h"
29#include "cppartrolesched.h"
30#include "cpappsched.h"
31#include "cpapprolesched.h"
32#include "cpasmsched.h"
33#include "cpsubssched.h"
diff --git a/src/test/WixToolsetTest.ComPlus/ComPlusExtensionFixture.cs b/src/test/WixToolsetTest.ComPlus/ComPlusExtensionFixture.cs
new file mode 100644
index 00000000..4ff3b5f0
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/ComPlusExtensionFixture.cs
@@ -0,0 +1,32 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolsetTest.ComPlus
4{
5 using System.Linq;
6 using WixBuildTools.TestSupport;
7 using WixToolset.Core.TestPackage;
8 using WixToolset.ComPlus;
9 using Xunit;
10
11 public class ComPlusExtensionFixture
12 {
13 [Fact]
14 public void CanBuildUsingComPlusPartition()
15 {
16 var folder = TestData.Get(@"TestData\UsingComPlusPartition");
17 var build = new Builder(folder, typeof(ComPlusExtensionFactory), new[] { folder });
18
19 var results = build.BuildAndQuery(Build, "ComPlusPartition");
20 Assert.Equal(new[]
21 {
22 "ComPlusPartition:",
23 }, results.OrderBy(s => s).ToArray());
24 }
25
26 private static void Build(string[] args)
27 {
28 var result = WixRunner.Execute(args)
29 .AssertSuccess();
30 }
31 }
32}
diff --git a/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.en-us.wxl b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.wxs b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.wxs
new file mode 100644
index 00000000..68ff98fd
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/Package.wxs
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
4 <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
5
6 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
7 <MediaTemplate />
8
9 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
10 <ComponentGroupRef Id="ProductComponents" />
11 </Feature>
12
13 </Product>
14
15 <Fragment>
16 <Directory Id="TARGETDIR" Name="SourceDir">
17 <Directory Id="ProgramFilesFolder">
18 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
19 </Directory>
20 </Directory>
21 </Fragment>
22</Wix>
diff --git a/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/PackageComponents.wxs b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/PackageComponents.wxs
new file mode 100644
index 00000000..f61eedd6
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/PackageComponents.wxs
@@ -0,0 +1,12 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Source="example.txt" />
8 <complus:ComPlusPartition Id="MyPartition" Name="MyPartition" PartitionId="MyPartitionId" />
9 </Component>
10 </ComponentGroup>
11 </Fragment>
12</Wix>
diff --git a/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/example.txt b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/TestData/UsingComPlusPartition/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/test/WixToolsetTest.ComPlus/WixToolsetTest.ComPlus.csproj b/src/test/WixToolsetTest.ComPlus/WixToolsetTest.ComPlus.csproj
new file mode 100644
index 00000000..801f5ca2
--- /dev/null
+++ b/src/test/WixToolsetTest.ComPlus/WixToolsetTest.ComPlus.csproj
@@ -0,0 +1,38 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netcoreapp2.1</TargetFramework>
7 <IsPackable>false</IsPackable>
8 </PropertyGroup>
9
10 <PropertyGroup>
11 <NoWarn>NU1701</NoWarn>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Content Include="TestData\UsingComPlusPartition\example.txt" CopyToOutputDirectory="PreserveNewest" />
16 <Content Include="TestData\UsingComPlusPartition\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
17 <Content Include="TestData\UsingComPlusPartition\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
18 <Content Include="TestData\UsingComPlusPartition\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
19 </ItemGroup>
20
21 <ItemGroup>
22 <ProjectReference Include="..\..\wixext\WixToolset.ComPlus.wixext.csproj" />
23 </ItemGroup>
24
25 <ItemGroup>
26 <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" PrivateAssets="all" />
27 </ItemGroup>
28
29 <ItemGroup>
30 <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.*" />
31 </ItemGroup>
32
33 <ItemGroup>
34 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
35 <PackageReference Include="xunit" Version="2.4.0" />
36 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
37 </ItemGroup>
38</Project>
diff --git a/src/wixext/ComPlusCompiler.cs b/src/wixext/ComPlusCompiler.cs
index 7f22c56b..4709eba9 100644
--- a/src/wixext/ComPlusCompiler.cs
+++ b/src/wixext/ComPlusCompiler.cs
@@ -1,32 +1,23 @@
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. 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 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5 using System; 5 using System;
6 using System.Collections; 6 using System.Collections;
7 using System.Collections.Generic; 7 using System.Collections.Generic;
8 using System.Globalization; 8 using System.Globalization;
9 using System.Reflection; 9 using System.Text;
10 using System.Xml;
11 using System.Xml.Linq; 10 using System.Xml.Linq;
12 using System.Xml.Schema;
13 using WixToolset.Data; 11 using WixToolset.Data;
14 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Data;
15 14
16 /// <summary> 15 /// <summary>
17 /// The compiler for the WiX Toolset Internet Information Services Extension. 16 /// The compiler for the WiX Toolset COM+ Extension.
18 /// </summary> 17 /// </summary>
19 public sealed class ComPlusCompiler : CompilerExtension 18 public sealed class ComPlusCompiler : BaseCompilerExtension
20 { 19 {
21 /// <summary> 20 /// <summary>
22 /// Instantiate a new ComPlusCompiler.
23 /// </summary>
24 public ComPlusCompiler()
25 {
26 this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/complus";
27 }
28
29 /// <summary>
30 /// </summary> 21 /// </summary>
31 /// <remarks></remarks> 22 /// <remarks></remarks>
32 public enum CpiAssemblyAttributes 23 public enum CpiAssemblyAttributes
@@ -37,6 +28,8 @@ namespace WixToolset.Extensions
37 RegisterInCommit = (1 << 3) 28 RegisterInCommit = (1 << 3)
38 } 29 }
39 30
31 public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/complus";
32
40 /// <summary> 33 /// <summary>
41 /// Processes an element for the Compiler. 34 /// Processes an element for the Compiler.
42 /// </summary> 35 /// </summary>
@@ -44,7 +37,7 @@ namespace WixToolset.Extensions
44 /// <param name="parentElement">Parent element of element to process.</param> 37 /// <param name="parentElement">Parent element of element to process.</param>
45 /// <param name="element">Element to process.</param> 38 /// <param name="element">Element to process.</param>
46 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> 39 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
47 public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context) 40 public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
48 { 41 {
49 switch (parentElement.Name.LocalName) 42 switch (parentElement.Name.LocalName)
50 { 43 {
@@ -56,49 +49,49 @@ namespace WixToolset.Extensions
56 switch (element.Name.LocalName) 49 switch (element.Name.LocalName)
57 { 50 {
58 case "ComPlusPartition": 51 case "ComPlusPartition":
59 this.ParseComPlusPartitionElement(element, componentId, win64); 52 this.ParseComPlusPartitionElement(intermediate, section, element, componentId, win64);
60 break; 53 break;
61 case "ComPlusPartitionRole": 54 case "ComPlusPartitionRole":
62 this.ParseComPlusPartitionRoleElement(element, componentId, null); 55 this.ParseComPlusPartitionRoleElement(intermediate, section, element, componentId, null);
63 break; 56 break;
64 case "ComPlusUserInPartitionRole": 57 case "ComPlusUserInPartitionRole":
65 this.ParseComPlusUserInPartitionRoleElement(element, componentId, null); 58 this.ParseComPlusUserInPartitionRoleElement(intermediate, section, element, componentId, null);
66 break; 59 break;
67 case "ComPlusGroupInPartitionRole": 60 case "ComPlusGroupInPartitionRole":
68 this.ParseComPlusGroupInPartitionRoleElement(element, componentId, null); 61 this.ParseComPlusGroupInPartitionRoleElement(intermediate, section, element, componentId, null);
69 break; 62 break;
70 case "ComPlusPartitionUser": 63 case "ComPlusPartitionUser":
71 this.ParseComPlusPartitionUserElement(element, componentId, null); 64 this.ParseComPlusPartitionUserElement(intermediate, section, element, componentId, null);
72 break; 65 break;
73 case "ComPlusApplication": 66 case "ComPlusApplication":
74 this.ParseComPlusApplicationElement(element, componentId, win64, null); 67 this.ParseComPlusApplicationElement(intermediate, section, element, componentId, win64, null);
75 break; 68 break;
76 case "ComPlusApplicationRole": 69 case "ComPlusApplicationRole":
77 this.ParseComPlusApplicationRoleElement(element, componentId, null); 70 this.ParseComPlusApplicationRoleElement(intermediate, section, element, componentId, null);
78 break; 71 break;
79 case "ComPlusUserInApplicationRole": 72 case "ComPlusUserInApplicationRole":
80 this.ParseComPlusUserInApplicationRoleElement(element, componentId, null); 73 this.ParseComPlusUserInApplicationRoleElement(intermediate, section, element, componentId, null);
81 break; 74 break;
82 case "ComPlusGroupInApplicationRole": 75 case "ComPlusGroupInApplicationRole":
83 this.ParseComPlusGroupInApplicationRoleElement(element, componentId, null); 76 this.ParseComPlusGroupInApplicationRoleElement(intermediate, section, element, componentId, null);
84 break; 77 break;
85 case "ComPlusAssembly": 78 case "ComPlusAssembly":
86 this.ParseComPlusAssemblyElement(element, componentId, win64, null); 79 this.ParseComPlusAssemblyElement(intermediate, section, element, componentId, win64, null);
87 break; 80 break;
88 case "ComPlusRoleForComponent": 81 case "ComPlusRoleForComponent":
89 this.ParseComPlusRoleForComponentElement(element, componentId, null); 82 this.ParseComPlusRoleForComponentElement(intermediate, section, element, componentId, null);
90 break; 83 break;
91 case "ComPlusRoleForInterface": 84 case "ComPlusRoleForInterface":
92 this.ParseComPlusRoleForInterfaceElement(element, componentId, null); 85 this.ParseComPlusRoleForInterfaceElement(intermediate, section, element, componentId, null);
93 break; 86 break;
94 case "ComPlusRoleForMethod": 87 case "ComPlusRoleForMethod":
95 this.ParseComPlusRoleForMethodElement(element, componentId, null); 88 this.ParseComPlusRoleForMethodElement(intermediate, section, element, componentId, null);
96 break; 89 break;
97 case "ComPlusSubscription": 90 case "ComPlusSubscription":
98 this.ParseComPlusSubscriptionElement(element, componentId, null); 91 this.ParseComPlusSubscriptionElement(intermediate, section, element, componentId, null);
99 break; 92 break;
100 default: 93 default:
101 this.Core.UnexpectedElement(parentElement, element); 94 this.ParseHelper.UnexpectedElement(parentElement, element);
102 break; 95 break;
103 } 96 }
104 break; 97 break;
@@ -108,24 +101,24 @@ namespace WixToolset.Extensions
108 switch (element.Name.LocalName) 101 switch (element.Name.LocalName)
109 { 102 {
110 case "ComPlusPartition": 103 case "ComPlusPartition":
111 this.ParseComPlusPartitionElement(element, null, false); 104 this.ParseComPlusPartitionElement(intermediate, section, element, null, false);
112 break; 105 break;
113 case "ComPlusPartitionRole": 106 case "ComPlusPartitionRole":
114 this.ParseComPlusPartitionRoleElement(element, null, null); 107 this.ParseComPlusPartitionRoleElement(intermediate, section, element, null, null);
115 break; 108 break;
116 case "ComPlusApplication": 109 case "ComPlusApplication":
117 this.ParseComPlusApplicationElement(element, null, false, null); 110 this.ParseComPlusApplicationElement(intermediate, section, element, null, false, null);
118 break; 111 break;
119 case "ComPlusApplicationRole": 112 case "ComPlusApplicationRole":
120 this.ParseComPlusApplicationRoleElement(element, null, null); 113 this.ParseComPlusApplicationRoleElement(intermediate, section, element, null, null);
121 break; 114 break;
122 default: 115 default:
123 this.Core.UnexpectedElement(parentElement, element); 116 this.ParseHelper.UnexpectedElement(parentElement, element);
124 break; 117 break;
125 } 118 }
126 break; 119 break;
127 default: 120 default:
128 this.Core.UnexpectedElement(parentElement, element); 121 this.ParseHelper.UnexpectedElement(parentElement, element);
129 break; 122 break;
130 } 123 }
131 } 124 }
@@ -135,9 +128,9 @@ namespace WixToolset.Extensions
135 /// </summary> 128 /// </summary>
136 /// <param name="node">Element to parse.</param> 129 /// <param name="node">Element to parse.</param>
137 /// <param name="componentKey">Identifier of parent component.</param> 130 /// <param name="componentKey">Identifier of parent component.</param>
138 private void ParseComPlusPartitionElement(XElement node, string componentKey, bool win64) 131 private void ParseComPlusPartitionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64)
139 { 132 {
140 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 133 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
141 134
142 string key = null; 135 string key = null;
143 string id = null; 136 string id = null;
@@ -152,49 +145,49 @@ namespace WixToolset.Extensions
152 switch (attrib.Name.LocalName) 145 switch (attrib.Name.LocalName)
153 { 146 {
154 case "Id": 147 case "Id":
155 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 148 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
156 break; 149 break;
157 case "PartitionId": 150 case "PartitionId":
158 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 151 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
159 break; 152 break;
160 case "Name": 153 case "Name":
161 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 154 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
162 break; 155 break;
163 case "Changeable": 156 case "Changeable":
164 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 157 this.Messaging.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
165 break; 158 break;
166 case "Deleteable": 159 case "Deleteable":
167 if (null == componentKey) 160 if (null == componentKey)
168 { 161 {
169 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 162 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
170 } 163 }
171 properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 164 properties["Deleteable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
172 break; 165 break;
173 case "Description": 166 case "Description":
174 if (null == componentKey) 167 if (null == componentKey)
175 { 168 {
176 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 169 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
177 } 170 }
178 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 171 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
179 break; 172 break;
180 default: 173 default:
181 this.Core.UnexpectedAttribute(node, attrib); 174 this.ParseHelper.UnexpectedAttribute(node, attrib);
182 break; 175 break;
183 } 176 }
184 } 177 }
185 else 178 else
186 { 179 {
187 this.Core.ParseExtensionAttribute(node, attrib); 180 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
188 } 181 }
189 } 182 }
190 183
191 if (null != componentKey && null == name) 184 if (null != componentKey && null == name)
192 { 185 {
193 this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); 186 this.Messaging.Write(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name"));
194 } 187 }
195 if (null == componentKey && null == id && null == name) 188 if (null == componentKey && null == id && null == name)
196 { 189 {
197 this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); 190 this.Messaging.Write(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name"));
198 } 191 }
199 192
200 foreach (XElement child in node.Elements()) 193 foreach (XElement child in node.Elements())
@@ -204,58 +197,58 @@ namespace WixToolset.Extensions
204 switch (child.Name.LocalName) 197 switch (child.Name.LocalName)
205 { 198 {
206 case "ComPlusPartitionRole": 199 case "ComPlusPartitionRole":
207 this.ParseComPlusPartitionRoleElement(child, componentKey, key); 200 this.ParseComPlusPartitionRoleElement(intermediate, section, child, componentKey, key);
208 break; 201 break;
209 case "ComPlusPartitionUser": 202 case "ComPlusPartitionUser":
210 this.ParseComPlusPartitionUserElement(child, componentKey, key); 203 this.ParseComPlusPartitionUserElement(intermediate, section, child, componentKey, key);
211 break; 204 break;
212 case "ComPlusApplication": 205 case "ComPlusApplication":
213 this.ParseComPlusApplicationElement(child, componentKey, win64, key); 206 this.ParseComPlusApplicationElement(intermediate, section, child, componentKey, win64, key);
214 break; 207 break;
215 default: 208 default:
216 this.Core.UnexpectedElement(node, child); 209 this.ParseHelper.UnexpectedElement(node, child);
217 break; 210 break;
218 } 211 }
219 } 212 }
220 else 213 else
221 { 214 {
222 this.Core.ParseExtensionElement(node, child); 215 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
223 } 216 }
224 } 217 }
225 218
226 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartition"); 219 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartition");
227 row[0] = key; 220 row.Set(0, key);
228 row[1] = componentKey; 221 row.Set(1, componentKey);
229 row[2] = id; 222 row.Set(2, id);
230 row[3] = name; 223 row.Set(3, name);
231 224
232 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 225 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
233 while (propertiesEnumerator.MoveNext()) 226 while (propertiesEnumerator.MoveNext())
234 { 227 {
235 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionProperty"); 228 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionProperty");
236 propertyRow[0] = key; 229 propertyRow.Set(0, key);
237 propertyRow[1] = (string)propertiesEnumerator.Key; 230 propertyRow.Set(1, (string)propertiesEnumerator.Key);
238 propertyRow[2] = (string)propertiesEnumerator.Value; 231 propertyRow.Set(2, (string)propertiesEnumerator.Value);
239 } 232 }
240 233
241 if (componentKey != null) 234 if (componentKey != null)
242 { 235 {
243 if (win64) 236 if (win64)
244 { 237 {
245 if (this.Core.CurrentPlatform == Platform.IA64) 238 if (this.Context.Platform == Platform.IA64)
246 { 239 {
247 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 240 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
248 } 241 }
249 else 242 else
250 { 243 {
251 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 244 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
252 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 245 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
253 } 246 }
254 } 247 }
255 else 248 else
256 { 249 {
257 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 250 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
258 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 251 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
259 } 252 }
260 } 253 }
261 } 254 }
@@ -266,9 +259,9 @@ namespace WixToolset.Extensions
266 /// <param name="node">Element to parse.</param> 259 /// <param name="node">Element to parse.</param>
267 /// <param name="componentKey">Identifier of parent component.</param> 260 /// <param name="componentKey">Identifier of parent component.</param>
268 /// <param name="applicationKey">Optional identifier of parent application.</param> 261 /// <param name="applicationKey">Optional identifier of parent application.</param>
269 private void ParseComPlusPartitionRoleElement(XElement node, string componentKey, string partitionKey) 262 private void ParseComPlusPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionKey)
270 { 263 {
271 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 264 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
272 265
273 string key = null; 266 string key = null;
274 string name = null; 267 string name = null;
@@ -280,33 +273,33 @@ namespace WixToolset.Extensions
280 switch (attrib.Name.LocalName) 273 switch (attrib.Name.LocalName)
281 { 274 {
282 case "Id": 275 case "Id":
283 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 276 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
284 break; 277 break;
285 case "Partition": 278 case "Partition":
286 if (null != partitionKey) 279 if (null != partitionKey)
287 { 280 {
288 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 281 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
289 } 282 }
290 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 283 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
291 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 284 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
292 break; 285 break;
293 case "Name": 286 case "Name":
294 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 287 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
295 break; 288 break;
296 default: 289 default:
297 this.Core.UnexpectedAttribute(node, attrib); 290 this.ParseHelper.UnexpectedAttribute(node, attrib);
298 break; 291 break;
299 } 292 }
300 } 293 }
301 else 294 else
302 { 295 {
303 this.Core.ParseExtensionAttribute(node, attrib); 296 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
304 } 297 }
305 } 298 }
306 299
307 if (null == partitionKey) 300 if (null == partitionKey)
308 { 301 {
309 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); 302 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition"));
310 } 303 }
311 304
312 foreach (XElement child in node.Elements()) 305 foreach (XElement child in node.Elements())
@@ -316,27 +309,27 @@ namespace WixToolset.Extensions
316 switch (child.Name.LocalName) 309 switch (child.Name.LocalName)
317 { 310 {
318 case "ComPlusUserInPartitionRole": 311 case "ComPlusUserInPartitionRole":
319 this.ParseComPlusUserInPartitionRoleElement(child, componentKey, key); 312 this.ParseComPlusUserInPartitionRoleElement(intermediate, section, child, componentKey, key);
320 break; 313 break;
321 case "ComPlusGroupInPartitionRole": 314 case "ComPlusGroupInPartitionRole":
322 this.ParseComPlusGroupInPartitionRoleElement(child, componentKey, key); 315 this.ParseComPlusGroupInPartitionRoleElement(intermediate, section, child, componentKey, key);
323 break; 316 break;
324 default: 317 default:
325 this.Core.UnexpectedElement(node, child); 318 this.ParseHelper.UnexpectedElement(node, child);
326 break; 319 break;
327 } 320 }
328 } 321 }
329 else 322 else
330 { 323 {
331 this.Core.ParseExtensionElement(node, child); 324 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
332 } 325 }
333 } 326 }
334 327
335 // add table row 328 // add table row
336 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionRole"); 329 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionRole");
337 row[0] = key; 330 row.Set(0, key);
338 row[1] = partitionKey; 331 row.Set(1, partitionKey);
339 row[3] = name; 332 row.Set(3, name);
340 } 333 }
341 334
342 /// <summary> 335 /// <summary>
@@ -345,9 +338,9 @@ namespace WixToolset.Extensions
345 /// <param name="node">Element to parse.</param> 338 /// <param name="node">Element to parse.</param>
346 /// <param name="componentKey">Identifier of parent component.</param> 339 /// <param name="componentKey">Identifier of parent component.</param>
347 /// <param name="applicationKey">Optional identifier of parent application role.</param> 340 /// <param name="applicationKey">Optional identifier of parent application role.</param>
348 private void ParseComPlusUserInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) 341 private void ParseComPlusUserInPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionRoleKey)
349 { 342 {
350 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 343 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
351 344
352 string key = null; 345 string key = null;
353 string user = null; 346 string user = null;
@@ -359,41 +352,41 @@ namespace WixToolset.Extensions
359 switch (attrib.Name.LocalName) 352 switch (attrib.Name.LocalName)
360 { 353 {
361 case "Id": 354 case "Id":
362 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 355 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
363 break; 356 break;
364 case "PartitionRole": 357 case "PartitionRole":
365 if (null != partitionRoleKey) 358 if (null != partitionRoleKey)
366 { 359 {
367 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 360 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
368 } 361 }
369 partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 362 partitionRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
370 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); 363 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey);
371 break; 364 break;
372 case "User": 365 case "User":
373 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 366 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
374 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 367 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
375 break; 368 break;
376 default: 369 default:
377 this.Core.UnexpectedAttribute(node, attrib); 370 this.ParseHelper.UnexpectedAttribute(node, attrib);
378 break; 371 break;
379 } 372 }
380 } 373 }
381 else 374 else
382 { 375 {
383 this.Core.ParseExtensionAttribute(node, attrib); 376 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
384 } 377 }
385 } 378 }
386 379
387 if (null == partitionRoleKey) 380 if (null == partitionRoleKey)
388 { 381 {
389 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); 382 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole"));
390 } 383 }
391 384
392 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInPartitionRole"); 385 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusUserInPartitionRole");
393 row[0] = key; 386 row.Set(0, key);
394 row[1] = partitionRoleKey; 387 row.Set(1, partitionRoleKey);
395 row[2] = componentKey; 388 row.Set(2, componentKey);
396 row[3] = user; 389 row.Set(3, user);
397 } 390 }
398 391
399 /// <summary> 392 /// <summary>
@@ -402,9 +395,9 @@ namespace WixToolset.Extensions
402 /// <param name="node">Element to parse.</param> 395 /// <param name="node">Element to parse.</param>
403 /// <param name="componentKey">Identifier of parent component.</param> 396 /// <param name="componentKey">Identifier of parent component.</param>
404 /// <param name="applicationKey">Optional identifier of parent application role.</param> 397 /// <param name="applicationKey">Optional identifier of parent application role.</param>
405 private void ParseComPlusGroupInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) 398 private void ParseComPlusGroupInPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionRoleKey)
406 { 399 {
407 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 400 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
408 401
409 string key = null; 402 string key = null;
410 string group = null; 403 string group = null;
@@ -416,41 +409,41 @@ namespace WixToolset.Extensions
416 switch (attrib.Name.LocalName) 409 switch (attrib.Name.LocalName)
417 { 410 {
418 case "Id": 411 case "Id":
419 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 412 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
420 break; 413 break;
421 case "PartitionRole": 414 case "PartitionRole":
422 if (null != partitionRoleKey) 415 if (null != partitionRoleKey)
423 { 416 {
424 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 417 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
425 } 418 }
426 partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 419 partitionRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
427 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); 420 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey);
428 break; 421 break;
429 case "Group": 422 case "Group":
430 group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 423 group = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
431 this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); 424 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Group", group);
432 break; 425 break;
433 default: 426 default:
434 this.Core.UnexpectedAttribute(node, attrib); 427 this.ParseHelper.UnexpectedAttribute(node, attrib);
435 break; 428 break;
436 } 429 }
437 } 430 }
438 else 431 else
439 { 432 {
440 this.Core.ParseExtensionAttribute(node, attrib); 433 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
441 } 434 }
442 } 435 }
443 436
444 if (null == partitionRoleKey) 437 if (null == partitionRoleKey)
445 { 438 {
446 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); 439 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole"));
447 } 440 }
448 441
449 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInPartitionRole"); 442 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusGroupInPartitionRole");
450 row[0] = key; 443 row.Set(0, key);
451 row[1] = partitionRoleKey; 444 row.Set(1, partitionRoleKey);
452 row[2] = componentKey; 445 row.Set(2, componentKey);
453 row[3] = group; 446 row.Set(3, group);
454 } 447 }
455 448
456 /// <summary> 449 /// <summary>
@@ -458,9 +451,9 @@ namespace WixToolset.Extensions
458 /// </summary> 451 /// </summary>
459 /// <param name="node">Element to parse.</param> 452 /// <param name="node">Element to parse.</param>
460 /// <param name="componentKey">Identifier of parent component.</param> 453 /// <param name="componentKey">Identifier of parent component.</param>
461 private void ParseComPlusPartitionUserElement(XElement node, string componentKey, string partitionKey) 454 private void ParseComPlusPartitionUserElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionKey)
462 { 455 {
463 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 456 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
464 457
465 string key = null; 458 string key = null;
466 string user = null; 459 string user = null;
@@ -472,41 +465,41 @@ namespace WixToolset.Extensions
472 switch (attrib.Name.LocalName) 465 switch (attrib.Name.LocalName)
473 { 466 {
474 case "Id": 467 case "Id":
475 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 468 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
476 break; 469 break;
477 case "Partition": 470 case "Partition":
478 if (null != partitionKey) 471 if (null != partitionKey)
479 { 472 {
480 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 473 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
481 } 474 }
482 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 475 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
483 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 476 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
484 break; 477 break;
485 case "User": 478 case "User":
486 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 479 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
487 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 480 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
488 break; 481 break;
489 default: 482 default:
490 this.Core.UnexpectedAttribute(node, attrib); 483 this.ParseHelper.UnexpectedAttribute(node, attrib);
491 break; 484 break;
492 } 485 }
493 } 486 }
494 else 487 else
495 { 488 {
496 this.Core.ParseExtensionAttribute(node, attrib); 489 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
497 } 490 }
498 } 491 }
499 492
500 if (null == partitionKey) 493 if (null == partitionKey)
501 { 494 {
502 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); 495 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition"));
503 } 496 }
504 497
505 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionUser"); 498 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionUser");
506 row[0] = key; 499 row.Set(0, key);
507 row[1] = partitionKey; 500 row.Set(1, partitionKey);
508 row[2] = componentKey; 501 row.Set(2, componentKey);
509 row[3] = user; 502 row.Set(3, user);
510 } 503 }
511 504
512 /// <summary> 505 /// <summary>
@@ -515,9 +508,9 @@ namespace WixToolset.Extensions
515 /// <param name="node">Element to parse.</param> 508 /// <param name="node">Element to parse.</param>
516 /// <param name="componentKey">Identifier of parent component.</param> 509 /// <param name="componentKey">Identifier of parent component.</param>
517 /// <param name="partitionKey">Optional identifier of parent partition.</param> 510 /// <param name="partitionKey">Optional identifier of parent partition.</param>
518 private void ParseComPlusApplicationElement(XElement node, string componentKey, bool win64, string partitionKey) 511 private void ParseComPlusApplicationElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64, string partitionKey)
519 { 512 {
520 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 513 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
521 514
522 string key = null; 515 string key = null;
523 string id = null; 516 string id = null;
@@ -532,35 +525,35 @@ namespace WixToolset.Extensions
532 switch (attrib.Name.LocalName) 525 switch (attrib.Name.LocalName)
533 { 526 {
534 case "Id": 527 case "Id":
535 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 528 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
536 break; 529 break;
537 case "Partition": 530 case "Partition":
538 if (null != partitionKey) 531 if (null != partitionKey)
539 { 532 {
540 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 533 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
541 } 534 }
542 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 535 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
543 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 536 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
544 break; 537 break;
545 case "ApplicationId": 538 case "ApplicationId":
546 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 539 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
547 break; 540 break;
548 case "Name": 541 case "Name":
549 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 542 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
550 break; 543 break;
551 case "ThreeGigSupportEnabled": 544 case "ThreeGigSupportEnabled":
552 if (null == componentKey) 545 if (null == componentKey)
553 { 546 {
554 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 547 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
555 } 548 }
556 properties["3GigSupportEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 549 properties["3GigSupportEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
557 break; 550 break;
558 case "AccessChecksLevel": 551 case "AccessChecksLevel":
559 if (null == componentKey) 552 if (null == componentKey)
560 { 553 {
561 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 554 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
562 } 555 }
563 string accessChecksLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 556 string accessChecksLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
564 switch (accessChecksLevelValue) 557 switch (accessChecksLevelValue)
565 { 558 {
566 case "applicationLevel": 559 case "applicationLevel":
@@ -570,16 +563,16 @@ namespace WixToolset.Extensions
570 properties["AccessChecksLevel"] = "1"; 563 properties["AccessChecksLevel"] = "1";
571 break; 564 break;
572 default: 565 default:
573 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AccessChecksLevel", accessChecksLevelValue, "applicationLevel", "applicationComponentLevel")); 566 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AccessChecksLevel", accessChecksLevelValue, "applicationLevel", "applicationComponentLevel"));
574 break; 567 break;
575 } 568 }
576 break; 569 break;
577 case "Activation": 570 case "Activation":
578 if (null == componentKey) 571 if (null == componentKey)
579 { 572 {
580 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 573 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
581 } 574 }
582 string activationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 575 string activationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
583 switch (activationValue) 576 switch (activationValue)
584 { 577 {
585 case "inproc": 578 case "inproc":
@@ -589,30 +582,30 @@ namespace WixToolset.Extensions
589 properties["Activation"] = "Local"; 582 properties["Activation"] = "Local";
590 break; 583 break;
591 default: 584 default:
592 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Activation", activationValue, "inproc", "local")); 585 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Activation", activationValue, "inproc", "local"));
593 break; 586 break;
594 } 587 }
595 break; 588 break;
596 case "ApplicationAccessChecksEnabled": 589 case "ApplicationAccessChecksEnabled":
597 if (null == componentKey) 590 if (null == componentKey)
598 { 591 {
599 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 592 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
600 } 593 }
601 properties["ApplicationAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 594 properties["ApplicationAccessChecksEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
602 break; 595 break;
603 case "ApplicationDirectory": 596 case "ApplicationDirectory":
604 if (null == componentKey) 597 if (null == componentKey)
605 { 598 {
606 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 599 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
607 } 600 }
608 properties["ApplicationDirectory"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 601 properties["ApplicationDirectory"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
609 break; 602 break;
610 case "Authentication": 603 case "Authentication":
611 if (null == componentKey) 604 if (null == componentKey)
612 { 605 {
613 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 606 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
614 } 607 }
615 string authenticationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 608 string authenticationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
616 switch (authenticationValue) 609 switch (authenticationValue)
617 { 610 {
618 case "default": 611 case "default":
@@ -637,16 +630,16 @@ namespace WixToolset.Extensions
637 properties["Authentication"] = "6"; 630 properties["Authentication"] = "6";
638 break; 631 break;
639 default: 632 default:
640 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Authentication", authenticationValue, "default", "none", "connect", "call", "packet", "integrity", "privacy")); 633 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Authentication", authenticationValue, "default", "none", "connect", "call", "packet", "integrity", "privacy"));
641 break; 634 break;
642 } 635 }
643 break; 636 break;
644 case "AuthenticationCapability": 637 case "AuthenticationCapability":
645 if (null == componentKey) 638 if (null == componentKey)
646 { 639 {
647 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 640 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
648 } 641 }
649 string authenticationCapabilityValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 642 string authenticationCapabilityValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
650 switch (authenticationCapabilityValue) 643 switch (authenticationCapabilityValue)
651 { 644 {
652 case "none": 645 case "none":
@@ -662,110 +655,110 @@ namespace WixToolset.Extensions
662 properties["AuthenticationCapability"] = "64"; 655 properties["AuthenticationCapability"] = "64";
663 break; 656 break;
664 default: 657 default:
665 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AuthenticationCapability", authenticationCapabilityValue, "none", "secureReference", "staticCloaking", "dynamicCloaking")); 658 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AuthenticationCapability", authenticationCapabilityValue, "none", "secureReference", "staticCloaking", "dynamicCloaking"));
666 break; 659 break;
667 } 660 }
668 break; 661 break;
669 case "Changeable": 662 case "Changeable":
670 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 663 this.Messaging.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
671 break; 664 break;
672 case "CommandLine": 665 case "CommandLine":
673 if (null == componentKey) 666 if (null == componentKey)
674 { 667 {
675 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 668 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
676 } 669 }
677 properties["CommandLine"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 670 properties["CommandLine"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
678 break; 671 break;
679 case "ConcurrentApps": 672 case "ConcurrentApps":
680 if (null == componentKey) 673 if (null == componentKey)
681 { 674 {
682 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 675 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
683 } 676 }
684 properties["ConcurrentApps"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 677 properties["ConcurrentApps"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
685 break; 678 break;
686 case "CreatedBy": 679 case "CreatedBy":
687 if (null == componentKey) 680 if (null == componentKey)
688 { 681 {
689 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 682 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
690 } 683 }
691 properties["CreatedBy"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 684 properties["CreatedBy"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
692 break; 685 break;
693 case "CRMEnabled": 686 case "CRMEnabled":
694 if (null == componentKey) 687 if (null == componentKey)
695 { 688 {
696 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 689 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
697 } 690 }
698 properties["CRMEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 691 properties["CRMEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
699 break; 692 break;
700 case "CRMLogFile": 693 case "CRMLogFile":
701 if (null == componentKey) 694 if (null == componentKey)
702 { 695 {
703 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 696 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
704 } 697 }
705 properties["CRMLogFile"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 698 properties["CRMLogFile"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
706 break; 699 break;
707 case "Deleteable": 700 case "Deleteable":
708 if (null == componentKey) 701 if (null == componentKey)
709 { 702 {
710 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 703 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
711 } 704 }
712 properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 705 properties["Deleteable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
713 break; 706 break;
714 case "Description": 707 case "Description":
715 if (null == componentKey) 708 if (null == componentKey)
716 { 709 {
717 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 710 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
718 } 711 }
719 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 712 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
720 break; 713 break;
721 case "DumpEnabled": 714 case "DumpEnabled":
722 if (null == componentKey) 715 if (null == componentKey)
723 { 716 {
724 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 717 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
725 } 718 }
726 properties["DumpEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 719 properties["DumpEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
727 break; 720 break;
728 case "DumpOnException": 721 case "DumpOnException":
729 if (null == componentKey) 722 if (null == componentKey)
730 { 723 {
731 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 724 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
732 } 725 }
733 properties["DumpOnException"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 726 properties["DumpOnException"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
734 break; 727 break;
735 case "DumpOnFailfast": 728 case "DumpOnFailfast":
736 if (null == componentKey) 729 if (null == componentKey)
737 { 730 {
738 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 731 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
739 } 732 }
740 properties["DumpOnFailfast"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 733 properties["DumpOnFailfast"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
741 break; 734 break;
742 case "DumpPath": 735 case "DumpPath":
743 if (null == componentKey) 736 if (null == componentKey)
744 { 737 {
745 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 738 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
746 } 739 }
747 properties["DumpPath"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 740 properties["DumpPath"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
748 break; 741 break;
749 case "EventsEnabled": 742 case "EventsEnabled":
750 if (null == componentKey) 743 if (null == componentKey)
751 { 744 {
752 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 745 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
753 } 746 }
754 properties["EventsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 747 properties["EventsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
755 break; 748 break;
756 case "Identity": 749 case "Identity":
757 if (null == componentKey) 750 if (null == componentKey)
758 { 751 {
759 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 752 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
760 } 753 }
761 properties["Identity"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 754 properties["Identity"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
762 break; 755 break;
763 case "ImpersonationLevel": 756 case "ImpersonationLevel":
764 if (null == componentKey) 757 if (null == componentKey)
765 { 758 {
766 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 759 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
767 } 760 }
768 string impersonationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 761 string impersonationLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
769 switch (impersonationLevelValue) 762 switch (impersonationLevelValue)
770 { 763 {
771 case "anonymous": 764 case "anonymous":
@@ -781,37 +774,37 @@ namespace WixToolset.Extensions
781 properties["ImpersonationLevel"] = "4"; 774 properties["ImpersonationLevel"] = "4";
782 break; 775 break;
783 default: 776 default:
784 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "ImpersonationLevel", impersonationLevelValue, "anonymous", "identify", "impersonate", "delegate")); 777 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "ImpersonationLevel", impersonationLevelValue, "anonymous", "identify", "impersonate", "delegate"));
785 break; 778 break;
786 } 779 }
787 break; 780 break;
788 case "IsEnabled": 781 case "IsEnabled":
789 if (null == componentKey) 782 if (null == componentKey)
790 { 783 {
791 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 784 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
792 } 785 }
793 properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 786 properties["IsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
794 break; 787 break;
795 case "MaxDumpCount": 788 case "MaxDumpCount":
796 if (null == componentKey) 789 if (null == componentKey)
797 { 790 {
798 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 791 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
799 } 792 }
800 properties["MaxDumpCount"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 793 properties["MaxDumpCount"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
801 break; 794 break;
802 case "Password": 795 case "Password":
803 if (null == componentKey) 796 if (null == componentKey)
804 { 797 {
805 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 798 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
806 } 799 }
807 properties["Password"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 800 properties["Password"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
808 break; 801 break;
809 case "QCAuthenticateMsgs": 802 case "QCAuthenticateMsgs":
810 if (null == componentKey) 803 if (null == componentKey)
811 { 804 {
812 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 805 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
813 } 806 }
814 string qcAuthenticateMsgsValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 807 string qcAuthenticateMsgsValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
815 switch (qcAuthenticateMsgsValue) 808 switch (qcAuthenticateMsgsValue)
816 { 809 {
817 case "secureApps": 810 case "secureApps":
@@ -824,128 +817,128 @@ namespace WixToolset.Extensions
824 properties["QCAuthenticateMsgs"] = "2"; 817 properties["QCAuthenticateMsgs"] = "2";
825 break; 818 break;
826 default: 819 default:
827 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "QCAuthenticateMsgs", qcAuthenticateMsgsValue, "secureApps", "off", "on")); 820 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "QCAuthenticateMsgs", qcAuthenticateMsgsValue, "secureApps", "off", "on"));
828 break; 821 break;
829 } 822 }
830 break; 823 break;
831 case "QCListenerMaxThreads": 824 case "QCListenerMaxThreads":
832 if (null == componentKey) 825 if (null == componentKey)
833 { 826 {
834 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 827 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
835 } 828 }
836 properties["QCListenerMaxThreads"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 829 properties["QCListenerMaxThreads"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
837 break; 830 break;
838 case "QueueListenerEnabled": 831 case "QueueListenerEnabled":
839 if (null == componentKey) 832 if (null == componentKey)
840 { 833 {
841 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 834 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
842 } 835 }
843 properties["QueueListenerEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 836 properties["QueueListenerEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
844 break; 837 break;
845 case "QueuingEnabled": 838 case "QueuingEnabled":
846 if (null == componentKey) 839 if (null == componentKey)
847 { 840 {
848 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 841 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
849 } 842 }
850 properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 843 properties["QueuingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
851 break; 844 break;
852 case "RecycleActivationLimit": 845 case "RecycleActivationLimit":
853 if (null == componentKey) 846 if (null == componentKey)
854 { 847 {
855 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 848 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
856 } 849 }
857 properties["RecycleActivationLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 850 properties["RecycleActivationLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
858 break; 851 break;
859 case "RecycleCallLimit": 852 case "RecycleCallLimit":
860 if (null == componentKey) 853 if (null == componentKey)
861 { 854 {
862 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 855 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
863 } 856 }
864 properties["RecycleCallLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 857 properties["RecycleCallLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
865 break; 858 break;
866 case "RecycleExpirationTimeout": 859 case "RecycleExpirationTimeout":
867 if (null == componentKey) 860 if (null == componentKey)
868 { 861 {
869 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 862 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
870 } 863 }
871 properties["RecycleExpirationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 864 properties["RecycleExpirationTimeout"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
872 break; 865 break;
873 case "RecycleLifetimeLimit": 866 case "RecycleLifetimeLimit":
874 if (null == componentKey) 867 if (null == componentKey)
875 { 868 {
876 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 869 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
877 } 870 }
878 properties["RecycleLifetimeLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 871 properties["RecycleLifetimeLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
879 break; 872 break;
880 case "RecycleMemoryLimit": 873 case "RecycleMemoryLimit":
881 if (null == componentKey) 874 if (null == componentKey)
882 { 875 {
883 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 876 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
884 } 877 }
885 properties["RecycleMemoryLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 878 properties["RecycleMemoryLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
886 break; 879 break;
887 case "Replicable": 880 case "Replicable":
888 if (null == componentKey) 881 if (null == componentKey)
889 { 882 {
890 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 883 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
891 } 884 }
892 properties["Replicable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 885 properties["Replicable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
893 break; 886 break;
894 case "RunForever": 887 case "RunForever":
895 if (null == componentKey) 888 if (null == componentKey)
896 { 889 {
897 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 890 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
898 } 891 }
899 properties["RunForever"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 892 properties["RunForever"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
900 break; 893 break;
901 case "ShutdownAfter": 894 case "ShutdownAfter":
902 if (null == componentKey) 895 if (null == componentKey)
903 { 896 {
904 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 897 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
905 } 898 }
906 properties["ShutdownAfter"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 899 properties["ShutdownAfter"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
907 break; 900 break;
908 case "SoapActivated": 901 case "SoapActivated":
909 if (null == componentKey) 902 if (null == componentKey)
910 { 903 {
911 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 904 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
912 } 905 }
913 properties["SoapActivated"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 906 properties["SoapActivated"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
914 break; 907 break;
915 case "SoapBaseUrl": 908 case "SoapBaseUrl":
916 if (null == componentKey) 909 if (null == componentKey)
917 { 910 {
918 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 911 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
919 } 912 }
920 properties["SoapBaseUrl"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 913 properties["SoapBaseUrl"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
921 break; 914 break;
922 case "SoapMailTo": 915 case "SoapMailTo":
923 if (null == componentKey) 916 if (null == componentKey)
924 { 917 {
925 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 918 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
926 } 919 }
927 properties["SoapMailTo"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 920 properties["SoapMailTo"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
928 break; 921 break;
929 case "SoapVRoot": 922 case "SoapVRoot":
930 if (null == componentKey) 923 if (null == componentKey)
931 { 924 {
932 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 925 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
933 } 926 }
934 properties["SoapVRoot"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 927 properties["SoapVRoot"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
935 break; 928 break;
936 case "SRPEnabled": 929 case "SRPEnabled":
937 if (null == componentKey) 930 if (null == componentKey)
938 { 931 {
939 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 932 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
940 } 933 }
941 properties["SRPEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 934 properties["SRPEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
942 break; 935 break;
943 case "SRPTrustLevel": 936 case "SRPTrustLevel":
944 if (null == componentKey) 937 if (null == componentKey)
945 { 938 {
946 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 939 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
947 } 940 }
948 string srpTrustLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 941 string srpTrustLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
949 switch (srpTrustLevelValue) 942 switch (srpTrustLevelValue)
950 { 943 {
951 case "disallowed": 944 case "disallowed":
@@ -955,28 +948,28 @@ namespace WixToolset.Extensions
955 properties["SRPTrustLevel"] = "262144"; 948 properties["SRPTrustLevel"] = "262144";
956 break; 949 break;
957 default: 950 default:
958 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "SRPTrustLevel", srpTrustLevelValue, "disallowed", "fullyTrusted")); 951 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "SRPTrustLevel", srpTrustLevelValue, "disallowed", "fullyTrusted"));
959 break; 952 break;
960 } 953 }
961 break; 954 break;
962 default: 955 default:
963 this.Core.UnexpectedAttribute(node, attrib); 956 this.ParseHelper.UnexpectedAttribute(node, attrib);
964 break; 957 break;
965 } 958 }
966 } 959 }
967 else 960 else
968 { 961 {
969 this.Core.ParseExtensionAttribute(node, attrib); 962 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
970 } 963 }
971 } 964 }
972 965
973 if (null != componentKey && null == name) 966 if (null != componentKey && null == name)
974 { 967 {
975 this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); 968 this.Messaging.Write(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name"));
976 } 969 }
977 if (null == componentKey && null == id && null == name) 970 if (null == componentKey && null == id && null == name)
978 { 971 {
979 this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); 972 this.Messaging.Write(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name"));
980 } 973 }
981 974
982 foreach (XElement child in node.Elements()) 975 foreach (XElement child in node.Elements())
@@ -986,56 +979,56 @@ namespace WixToolset.Extensions
986 switch (child.Name.LocalName) 979 switch (child.Name.LocalName)
987 { 980 {
988 case "ComPlusApplicationRole": 981 case "ComPlusApplicationRole":
989 this.ParseComPlusApplicationRoleElement(child, componentKey, key); 982 this.ParseComPlusApplicationRoleElement(intermediate, section, child, componentKey, key);
990 break; 983 break;
991 case "ComPlusAssembly": 984 case "ComPlusAssembly":
992 this.ParseComPlusAssemblyElement(child, componentKey, win64, key); 985 this.ParseComPlusAssemblyElement(intermediate, section, child, componentKey, win64, key);
993 break; 986 break;
994 default: 987 default:
995 this.Core.UnexpectedElement(node, child); 988 this.ParseHelper.UnexpectedElement(node, child);
996 break; 989 break;
997 } 990 }
998 } 991 }
999 else 992 else
1000 { 993 {
1001 this.Core.ParseExtensionElement(node, child); 994 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1002 } 995 }
1003 } 996 }
1004 997
1005 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplication"); 998 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplication");
1006 row[0] = key; 999 row.Set(0, key);
1007 row[1] = partitionKey; 1000 row.Set(1, partitionKey);
1008 row[2] = componentKey; 1001 row.Set(2, componentKey);
1009 row[3] = id; 1002 row.Set(3, id);
1010 row[4] = name; 1003 row.Set(4, name);
1011 1004
1012 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1005 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1013 while (propertiesEnumerator.MoveNext()) 1006 while (propertiesEnumerator.MoveNext())
1014 { 1007 {
1015 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationProperty"); 1008 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationProperty");
1016 propertyRow[0] = key; 1009 propertyRow.Set(0, key);
1017 propertyRow[1] = (string)propertiesEnumerator.Key; 1010 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1018 propertyRow[2] = (string)propertiesEnumerator.Value; 1011 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1019 } 1012 }
1020 1013
1021 if (componentKey != null) 1014 if (componentKey != null)
1022 { 1015 {
1023 if (win64) 1016 if (win64)
1024 { 1017 {
1025 if (this.Core.CurrentPlatform == Platform.IA64) 1018 if (this.Context.Platform == Platform.IA64)
1026 { 1019 {
1027 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 1020 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
1028 } 1021 }
1029 else 1022 else
1030 { 1023 {
1031 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 1024 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
1032 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 1025 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
1033 } 1026 }
1034 } 1027 }
1035 else 1028 else
1036 { 1029 {
1037 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 1030 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
1038 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 1031 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
1039 } 1032 }
1040 } 1033 }
1041 } 1034 }
@@ -1046,9 +1039,9 @@ namespace WixToolset.Extensions
1046 /// <param name="node">Element to parse.</param> 1039 /// <param name="node">Element to parse.</param>
1047 /// <param name="componentKey">Identifier of parent component.</param> 1040 /// <param name="componentKey">Identifier of parent component.</param>
1048 /// <param name="applicationKey">Optional identifier of parent application.</param> 1041 /// <param name="applicationKey">Optional identifier of parent application.</param>
1049 private void ParseComPlusApplicationRoleElement(XElement node, string componentKey, string applicationKey) 1042 private void ParseComPlusApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationKey)
1050 { 1043 {
1051 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1044 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1052 1045
1053 string key = null; 1046 string key = null;
1054 string name = null; 1047 string name = null;
@@ -1062,40 +1055,40 @@ namespace WixToolset.Extensions
1062 switch (attrib.Name.LocalName) 1055 switch (attrib.Name.LocalName)
1063 { 1056 {
1064 case "Id": 1057 case "Id":
1065 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1058 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1066 break; 1059 break;
1067 case "Application": 1060 case "Application":
1068 if (null != applicationKey) 1061 if (null != applicationKey)
1069 { 1062 {
1070 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1063 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1071 } 1064 }
1072 applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1065 applicationKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1073 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); 1066 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplication", applicationKey);
1074 break; 1067 break;
1075 case "Name": 1068 case "Name":
1076 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1069 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1077 break; 1070 break;
1078 case "Description": 1071 case "Description":
1079 if (null == componentKey) 1072 if (null == componentKey)
1080 { 1073 {
1081 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 1074 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
1082 } 1075 }
1083 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1076 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1084 break; 1077 break;
1085 default: 1078 default:
1086 this.Core.UnexpectedAttribute(node, attrib); 1079 this.ParseHelper.UnexpectedAttribute(node, attrib);
1087 break; 1080 break;
1088 } 1081 }
1089 } 1082 }
1090 else 1083 else
1091 { 1084 {
1092 this.Core.ParseExtensionAttribute(node, attrib); 1085 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1093 } 1086 }
1094 } 1087 }
1095 1088
1096 if (null == applicationKey) 1089 if (null == applicationKey)
1097 { 1090 {
1098 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application")); 1091 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application"));
1099 } 1092 }
1100 1093
1101 foreach (XElement child in node.Elements()) 1094 foreach (XElement child in node.Elements())
@@ -1105,35 +1098,35 @@ namespace WixToolset.Extensions
1105 switch (child.Name.LocalName) 1098 switch (child.Name.LocalName)
1106 { 1099 {
1107 case "ComPlusUserInApplicationRole": 1100 case "ComPlusUserInApplicationRole":
1108 this.ParseComPlusUserInApplicationRoleElement(child, componentKey, key); 1101 this.ParseComPlusUserInApplicationRoleElement(intermediate, section, child, componentKey, key);
1109 break; 1102 break;
1110 case "ComPlusGroupInApplicationRole": 1103 case "ComPlusGroupInApplicationRole":
1111 this.ParseComPlusGroupInApplicationRoleElement(child, componentKey, key); 1104 this.ParseComPlusGroupInApplicationRoleElement(intermediate, section, child, componentKey, key);
1112 break; 1105 break;
1113 default: 1106 default:
1114 this.Core.UnexpectedElement(node, child); 1107 this.ParseHelper.UnexpectedElement(node, child);
1115 break; 1108 break;
1116 } 1109 }
1117 } 1110 }
1118 else 1111 else
1119 { 1112 {
1120 this.Core.ParseExtensionElement(node, child); 1113 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1121 } 1114 }
1122 } 1115 }
1123 1116
1124 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRole"); 1117 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationRole");
1125 row[0] = key; 1118 row.Set(0, key);
1126 row[1] = applicationKey; 1119 row.Set(1, applicationKey);
1127 row[2] = componentKey; 1120 row.Set(2, componentKey);
1128 row[3] = name; 1121 row.Set(3, name);
1129 1122
1130 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1123 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1131 while (propertiesEnumerator.MoveNext()) 1124 while (propertiesEnumerator.MoveNext())
1132 { 1125 {
1133 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRoleProperty"); 1126 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationRoleProperty");
1134 propertyRow[0] = key; 1127 propertyRow.Set(0, key);
1135 propertyRow[1] = (string)propertiesEnumerator.Key; 1128 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1136 propertyRow[2] = (string)propertiesEnumerator.Value; 1129 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1137 } 1130 }
1138 } 1131 }
1139 1132
@@ -1143,9 +1136,9 @@ namespace WixToolset.Extensions
1143 /// <param name="node">Element to parse.</param> 1136 /// <param name="node">Element to parse.</param>
1144 /// <param name="componentKey">Identifier of parent component.</param> 1137 /// <param name="componentKey">Identifier of parent component.</param>
1145 /// <param name="applicationKey">Optional identifier of parent application role.</param> 1138 /// <param name="applicationKey">Optional identifier of parent application role.</param>
1146 private void ParseComPlusUserInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) 1139 private void ParseComPlusUserInApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationRoleKey)
1147 { 1140 {
1148 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1141 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1149 1142
1150 string key = null; 1143 string key = null;
1151 string user = null; 1144 string user = null;
@@ -1157,41 +1150,41 @@ namespace WixToolset.Extensions
1157 switch (attrib.Name.LocalName) 1150 switch (attrib.Name.LocalName)
1158 { 1151 {
1159 case "Id": 1152 case "Id":
1160 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1153 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1161 break; 1154 break;
1162 case "ApplicationRole": 1155 case "ApplicationRole":
1163 if (null != applicationRoleKey) 1156 if (null != applicationRoleKey)
1164 { 1157 {
1165 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1158 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1166 } 1159 }
1167 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1160 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1168 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); 1161 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey);
1169 break; 1162 break;
1170 case "User": 1163 case "User":
1171 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1164 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1172 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 1165 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
1173 break; 1166 break;
1174 default: 1167 default:
1175 this.Core.UnexpectedAttribute(node, attrib); 1168 this.ParseHelper.UnexpectedAttribute(node, attrib);
1176 break; 1169 break;
1177 } 1170 }
1178 } 1171 }
1179 else 1172 else
1180 { 1173 {
1181 this.Core.ParseExtensionAttribute(node, attrib); 1174 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1182 } 1175 }
1183 } 1176 }
1184 1177
1185 if (null == applicationRoleKey) 1178 if (null == applicationRoleKey)
1186 { 1179 {
1187 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); 1180 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole"));
1188 } 1181 }
1189 1182
1190 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInApplicationRole"); 1183 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusUserInApplicationRole");
1191 row[0] = key; 1184 row.Set(0, key);
1192 row[1] = applicationRoleKey; 1185 row.Set(1, applicationRoleKey);
1193 row[2] = componentKey; 1186 row.Set(2, componentKey);
1194 row[3] = user; 1187 row.Set(3, user);
1195 } 1188 }
1196 1189
1197 /// <summary> 1190 /// <summary>
@@ -1200,9 +1193,9 @@ namespace WixToolset.Extensions
1200 /// <param name="node">Element to parse.</param> 1193 /// <param name="node">Element to parse.</param>
1201 /// <param name="componentKey">Identifier of parent component.</param> 1194 /// <param name="componentKey">Identifier of parent component.</param>
1202 /// <param name="applicationKey">Optional identifier of parent application role.</param> 1195 /// <param name="applicationKey">Optional identifier of parent application role.</param>
1203 private void ParseComPlusGroupInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) 1196 private void ParseComPlusGroupInApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationRoleKey)
1204 { 1197 {
1205 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1198 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1206 1199
1207 string key = null; 1200 string key = null;
1208 string group = null; 1201 string group = null;
@@ -1214,41 +1207,41 @@ namespace WixToolset.Extensions
1214 switch (attrib.Name.LocalName) 1207 switch (attrib.Name.LocalName)
1215 { 1208 {
1216 case "Id": 1209 case "Id":
1217 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1210 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1218 break; 1211 break;
1219 case "ApplicationRole": 1212 case "ApplicationRole":
1220 if (null != applicationRoleKey) 1213 if (null != applicationRoleKey)
1221 { 1214 {
1222 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1215 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1223 } 1216 }
1224 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1217 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1225 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); 1218 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey);
1226 break; 1219 break;
1227 case "Group": 1220 case "Group":
1228 group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1221 group = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1229 this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); 1222 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Group", group);
1230 break; 1223 break;
1231 default: 1224 default:
1232 this.Core.UnexpectedAttribute(node, attrib); 1225 this.ParseHelper.UnexpectedAttribute(node, attrib);
1233 break; 1226 break;
1234 } 1227 }
1235 } 1228 }
1236 else 1229 else
1237 { 1230 {
1238 this.Core.ParseExtensionAttribute(node, attrib); 1231 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1239 } 1232 }
1240 } 1233 }
1241 1234
1242 if (null == applicationRoleKey) 1235 if (null == applicationRoleKey)
1243 { 1236 {
1244 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); 1237 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole"));
1245 } 1238 }
1246 1239
1247 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInApplicationRole"); 1240 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusGroupInApplicationRole");
1248 row[0] = key; 1241 row.Set(0, key);
1249 row[1] = applicationRoleKey; 1242 row.Set(1, applicationRoleKey);
1250 row[2] = componentKey; 1243 row.Set(2, componentKey);
1251 row[3] = group; 1244 row.Set(3, group);
1252 } 1245 }
1253 1246
1254 /// <summary> 1247 /// <summary>
@@ -1257,9 +1250,9 @@ namespace WixToolset.Extensions
1257 /// <param name="node">Element to parse.</param> 1250 /// <param name="node">Element to parse.</param>
1258 /// <param name="componentKey">Identifier of parent component.</param> 1251 /// <param name="componentKey">Identifier of parent component.</param>
1259 /// <param name="applicationKey">Optional identifier of parent application.</param> 1252 /// <param name="applicationKey">Optional identifier of parent application.</param>
1260 private void ParseComPlusAssemblyElement(XElement node, string componentKey, bool win64, string applicationKey) 1253 private void ParseComPlusAssemblyElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64, string applicationKey)
1261 { 1254 {
1262 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1255 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1263 1256
1264 string key = null; 1257 string key = null;
1265 string assemblyName = null; 1258 string assemblyName = null;
@@ -1277,30 +1270,30 @@ namespace WixToolset.Extensions
1277 switch (attrib.Name.LocalName) 1270 switch (attrib.Name.LocalName)
1278 { 1271 {
1279 case "Id": 1272 case "Id":
1280 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1273 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1281 break; 1274 break;
1282 case "Application": 1275 case "Application":
1283 if (null != applicationKey) 1276 if (null != applicationKey)
1284 { 1277 {
1285 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1278 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1286 } 1279 }
1287 applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1280 applicationKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1288 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); 1281 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplication", applicationKey);
1289 break; 1282 break;
1290 case "AssemblyName": 1283 case "AssemblyName":
1291 assemblyName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1284 assemblyName = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1292 break; 1285 break;
1293 case "DllPath": 1286 case "DllPath":
1294 dllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1287 dllPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1295 break; 1288 break;
1296 case "TlbPath": 1289 case "TlbPath":
1297 tlbPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1290 tlbPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1298 break; 1291 break;
1299 case "PSDllPath": 1292 case "PSDllPath":
1300 psDllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1293 psDllPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1301 break; 1294 break;
1302 case "Type": 1295 case "Type":
1303 string typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1296 string typeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1304 switch (typeValue) 1297 switch (typeValue)
1305 { 1298 {
1306 case ".net": 1299 case ".net":
@@ -1310,12 +1303,12 @@ namespace WixToolset.Extensions
1310 attributes &= ~(int)CpiAssemblyAttributes.DotNetAssembly; 1303 attributes &= ~(int)CpiAssemblyAttributes.DotNetAssembly;
1311 break; 1304 break;
1312 default: 1305 default:
1313 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusAssembly", "Type", typeValue, ".net", "native")); 1306 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusAssembly", "Type", typeValue, ".net", "native"));
1314 break; 1307 break;
1315 } 1308 }
1316 break; 1309 break;
1317 case "EventClass": 1310 case "EventClass":
1318 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1311 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1319 { 1312 {
1320 attributes |= (int)CpiAssemblyAttributes.EventClass; 1313 attributes |= (int)CpiAssemblyAttributes.EventClass;
1321 } 1314 }
@@ -1325,7 +1318,7 @@ namespace WixToolset.Extensions
1325 } 1318 }
1326 break; 1319 break;
1327 case "DllPathFromGAC": 1320 case "DllPathFromGAC":
1328 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1321 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1329 { 1322 {
1330 attributes |= (int)CpiAssemblyAttributes.DllPathFromGAC; 1323 attributes |= (int)CpiAssemblyAttributes.DllPathFromGAC;
1331 } 1324 }
@@ -1335,7 +1328,7 @@ namespace WixToolset.Extensions
1335 } 1328 }
1336 break; 1329 break;
1337 case "RegisterInCommit": 1330 case "RegisterInCommit":
1338 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1331 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1339 { 1332 {
1340 attributes |= (int)CpiAssemblyAttributes.RegisterInCommit; 1333 attributes |= (int)CpiAssemblyAttributes.RegisterInCommit;
1341 } 1334 }
@@ -1345,35 +1338,35 @@ namespace WixToolset.Extensions
1345 } 1338 }
1346 break; 1339 break;
1347 default: 1340 default:
1348 this.Core.UnexpectedAttribute(node, attrib); 1341 this.ParseHelper.UnexpectedAttribute(node, attrib);
1349 break; 1342 break;
1350 } 1343 }
1351 } 1344 }
1352 else 1345 else
1353 { 1346 {
1354 this.Core.ParseExtensionAttribute(node, attrib); 1347 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1355 } 1348 }
1356 } 1349 }
1357 1350
1358 if (null == applicationKey && 0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1351 if (null == applicationKey && 0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1359 { 1352 {
1360 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application", "Type", "native")); 1353 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application", "Type", "native"));
1361 } 1354 }
1362 if (null != assemblyName && 0 == (attributes & (int)CpiAssemblyAttributes.DllPathFromGAC)) 1355 if (null != assemblyName && 0 == (attributes & (int)CpiAssemblyAttributes.DllPathFromGAC))
1363 { 1356 {
1364 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithoutOtherValue(sourceLineNumbers, node.Name.LocalName, "AssemblyName", "DllPathFromGAC", "no")); 1357 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithoutOtherValue(sourceLineNumbers, node.Name.LocalName, "AssemblyName", "DllPathFromGAC", "no"));
1365 } 1358 }
1366 if (null == tlbPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1359 if (null == tlbPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1367 { 1360 {
1368 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TlbPath", "Type", ".net")); 1361 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TlbPath", "Type", ".net"));
1369 } 1362 }
1370 if (null != psDllPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1363 if (null != psDllPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1371 { 1364 {
1372 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "PSDllPath", "Type", ".net")); 1365 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "PSDllPath", "Type", ".net"));
1373 } 1366 }
1374 if (0 != (attributes & (int)CpiAssemblyAttributes.EventClass) && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1367 if (0 != (attributes & (int)CpiAssemblyAttributes.EventClass) && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1375 { 1368 {
1376 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "EventClass", "yes", "Type", ".net")); 1369 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "EventClass", "yes", "Type", ".net"));
1377 } 1370 }
1378 1371
1379 foreach (XElement child in node.Elements()) 1372 foreach (XElement child in node.Elements())
@@ -1383,54 +1376,54 @@ namespace WixToolset.Extensions
1383 switch (child.Name.LocalName) 1376 switch (child.Name.LocalName)
1384 { 1377 {
1385 case "ComPlusAssemblyDependency": 1378 case "ComPlusAssemblyDependency":
1386 this.ParseComPlusAssemblyDependencyElement(child, key); 1379 this.ParseComPlusAssemblyDependencyElement(intermediate, section, child, key);
1387 break; 1380 break;
1388 case "ComPlusComponent": 1381 case "ComPlusComponent":
1389 this.ParseComPlusComponentElement(child, componentKey, key); 1382 this.ParseComPlusComponentElement(intermediate, section, child, componentKey, key);
1390 hasComponents = true; 1383 hasComponents = true;
1391 break; 1384 break;
1392 default: 1385 default:
1393 this.Core.UnexpectedElement(node, child); 1386 this.ParseHelper.UnexpectedElement(node, child);
1394 break; 1387 break;
1395 } 1388 }
1396 } 1389 }
1397 else 1390 else
1398 { 1391 {
1399 this.Core.ParseExtensionElement(node, child); 1392 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1400 } 1393 }
1401 } 1394 }
1402 1395
1403 if (0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly) && !hasComponents) 1396 if (0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly) && !hasComponents)
1404 { 1397 {
1405 this.Core.OnMessage(ComPlusWarnings.MissingComponents(sourceLineNumbers)); 1398 this.Messaging.Write(ComPlusWarnings.MissingComponents(sourceLineNumbers));
1406 } 1399 }
1407 1400
1408 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssembly"); 1401 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusAssembly");
1409 row[0] = key; 1402 row.Set(0, key);
1410 row[1] = applicationKey; 1403 row.Set(1, applicationKey);
1411 row[2] = componentKey; 1404 row.Set(2, componentKey);
1412 row[3] = assemblyName; 1405 row.Set(3, assemblyName);
1413 row[4] = dllPath; 1406 row.Set(4, dllPath);
1414 row[5] = tlbPath; 1407 row.Set(5, tlbPath);
1415 row[6] = psDllPath; 1408 row.Set(6, psDllPath);
1416 row[7] = attributes; 1409 row.Set(7, attributes);
1417 1410
1418 if (win64) 1411 if (win64)
1419 { 1412 {
1420 if (this.Core.CurrentPlatform == Platform.IA64) 1413 if (this.Context.Platform == Platform.IA64)
1421 { 1414 {
1422 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 1415 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
1423 } 1416 }
1424 else 1417 else
1425 { 1418 {
1426 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 1419 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
1427 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 1420 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
1428 } 1421 }
1429 } 1422 }
1430 else 1423 else
1431 { 1424 {
1432 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 1425 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
1433 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 1426 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
1434 } 1427 }
1435 } 1428 }
1436 1429
@@ -1439,9 +1432,9 @@ namespace WixToolset.Extensions
1439 /// </summary> 1432 /// </summary>
1440 /// <param name="node">Element to parse.</param> 1433 /// <param name="node">Element to parse.</param>
1441 /// <param name="assemblyKey">Identifier of parent assembly.</param> 1434 /// <param name="assemblyKey">Identifier of parent assembly.</param>
1442 private void ParseComPlusAssemblyDependencyElement(XElement node, string assemblyKey) 1435 private void ParseComPlusAssemblyDependencyElement(Intermediate intermediate, IntermediateSection section, XElement node, string assemblyKey)
1443 { 1436 {
1444 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1437 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1445 1438
1446 string requiredAssemblyKey = null; 1439 string requiredAssemblyKey = null;
1447 1440
@@ -1452,22 +1445,22 @@ namespace WixToolset.Extensions
1452 switch (attrib.Name.LocalName) 1445 switch (attrib.Name.LocalName)
1453 { 1446 {
1454 case "RequiredAssembly": 1447 case "RequiredAssembly":
1455 requiredAssemblyKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1448 requiredAssemblyKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1456 break; 1449 break;
1457 default: 1450 default:
1458 this.Core.UnexpectedAttribute(node, attrib); 1451 this.ParseHelper.UnexpectedAttribute(node, attrib);
1459 break; 1452 break;
1460 } 1453 }
1461 } 1454 }
1462 else 1455 else
1463 { 1456 {
1464 this.Core.ParseExtensionAttribute(node, attrib); 1457 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1465 } 1458 }
1466 } 1459 }
1467 1460
1468 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssemblyDependency"); 1461 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusAssemblyDependency");
1469 row[0] = assemblyKey; 1462 row.Set(0, assemblyKey);
1470 row[1] = requiredAssemblyKey; 1463 row.Set(1, requiredAssemblyKey);
1471 } 1464 }
1472 1465
1473 /// <summary> 1466 /// <summary>
@@ -1476,9 +1469,9 @@ namespace WixToolset.Extensions
1476 /// <param name="node">Element to parse.</param> 1469 /// <param name="node">Element to parse.</param>
1477 /// <param name="componentKey">Identifier of parent component.</param> 1470 /// <param name="componentKey">Identifier of parent component.</param>
1478 /// <param name="assemblyKey">Identifier of parent assembly.</param> 1471 /// <param name="assemblyKey">Identifier of parent assembly.</param>
1479 private void ParseComPlusComponentElement(XElement node, string componentKey, string assemblyKey) 1472 private void ParseComPlusComponentElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string assemblyKey)
1480 { 1473 {
1481 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1474 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1482 1475
1483 string key = null; 1476 string key = null;
1484 string clsid = null; 1477 string clsid = null;
@@ -1492,94 +1485,94 @@ namespace WixToolset.Extensions
1492 switch (attrib.Name.LocalName) 1485 switch (attrib.Name.LocalName)
1493 { 1486 {
1494 case "Id": 1487 case "Id":
1495 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1488 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1496 break; 1489 break;
1497 case "CLSID": 1490 case "CLSID":
1498 clsid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; 1491 clsid = "{" + this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib) + "}";
1499 break; 1492 break;
1500 case "AllowInprocSubscribers": 1493 case "AllowInprocSubscribers":
1501 properties["AllowInprocSubscribers"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1494 properties["AllowInprocSubscribers"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1502 break; 1495 break;
1503 case "ComponentAccessChecksEnabled": 1496 case "ComponentAccessChecksEnabled":
1504 properties["ComponentAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1497 properties["ComponentAccessChecksEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1505 break; 1498 break;
1506 case "ComponentTransactionTimeout": 1499 case "ComponentTransactionTimeout":
1507 properties["ComponentTransactionTimeout"] = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3600).ToString(); 1500 properties["ComponentTransactionTimeout"] = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3600).ToString();
1508 break; 1501 break;
1509 case "ComponentTransactionTimeoutEnabled": 1502 case "ComponentTransactionTimeoutEnabled":
1510 properties["ComponentTransactionTimeoutEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1503 properties["ComponentTransactionTimeoutEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1511 break; 1504 break;
1512 case "COMTIIntrinsics": 1505 case "COMTIIntrinsics":
1513 properties["COMTIIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1506 properties["COMTIIntrinsics"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1514 break; 1507 break;
1515 case "ConstructionEnabled": 1508 case "ConstructionEnabled":
1516 properties["ConstructionEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1509 properties["ConstructionEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1517 break; 1510 break;
1518 case "ConstructorString": 1511 case "ConstructorString":
1519 properties["ConstructorString"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1512 properties["ConstructorString"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1520 break; 1513 break;
1521 case "CreationTimeout": 1514 case "CreationTimeout":
1522 properties["CreationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1515 properties["CreationTimeout"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1523 break; 1516 break;
1524 case "Description": 1517 case "Description":
1525 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1518 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1526 break; 1519 break;
1527 case "EventTrackingEnabled": 1520 case "EventTrackingEnabled":
1528 properties["EventTrackingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1521 properties["EventTrackingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1529 break; 1522 break;
1530 case "ExceptionClass": 1523 case "ExceptionClass":
1531 properties["ExceptionClass"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1524 properties["ExceptionClass"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1532 break; 1525 break;
1533 case "FireInParallel": 1526 case "FireInParallel":
1534 properties["FireInParallel"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1527 properties["FireInParallel"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1535 break; 1528 break;
1536 case "IISIntrinsics": 1529 case "IISIntrinsics":
1537 properties["IISIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1530 properties["IISIntrinsics"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1538 break; 1531 break;
1539 case "InitializesServerApplication": 1532 case "InitializesServerApplication":
1540 properties["InitializesServerApplication"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1533 properties["InitializesServerApplication"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1541 break; 1534 break;
1542 case "IsEnabled": 1535 case "IsEnabled":
1543 properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1536 properties["IsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1544 break; 1537 break;
1545 case "IsPrivateComponent": 1538 case "IsPrivateComponent":
1546 properties["IsPrivateComponent"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1539 properties["IsPrivateComponent"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1547 break; 1540 break;
1548 case "JustInTimeActivation": 1541 case "JustInTimeActivation":
1549 properties["JustInTimeActivation"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1542 properties["JustInTimeActivation"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1550 break; 1543 break;
1551 case "LoadBalancingSupported": 1544 case "LoadBalancingSupported":
1552 properties["LoadBalancingSupported"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1545 properties["LoadBalancingSupported"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1553 break; 1546 break;
1554 case "MaxPoolSize": 1547 case "MaxPoolSize":
1555 properties["MaxPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1548 properties["MaxPoolSize"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1556 break; 1549 break;
1557 case "MinPoolSize": 1550 case "MinPoolSize":
1558 properties["MinPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1551 properties["MinPoolSize"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1559 break; 1552 break;
1560 case "MultiInterfacePublisherFilterCLSID": 1553 case "MultiInterfacePublisherFilterCLSID":
1561 properties["MultiInterfacePublisherFilterCLSID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1554 properties["MultiInterfacePublisherFilterCLSID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1562 break; 1555 break;
1563 case "MustRunInClientContext": 1556 case "MustRunInClientContext":
1564 properties["MustRunInClientContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1557 properties["MustRunInClientContext"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1565 break; 1558 break;
1566 case "MustRunInDefaultContext": 1559 case "MustRunInDefaultContext":
1567 properties["MustRunInDefaultContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1560 properties["MustRunInDefaultContext"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1568 break; 1561 break;
1569 case "ObjectPoolingEnabled": 1562 case "ObjectPoolingEnabled":
1570 properties["ObjectPoolingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1563 properties["ObjectPoolingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1571 break; 1564 break;
1572 case "PublisherID": 1565 case "PublisherID":
1573 properties["PublisherID"] = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 1566 properties["PublisherID"] = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
1574 break; 1567 break;
1575 case "SoapAssemblyName": 1568 case "SoapAssemblyName":
1576 properties["SoapAssemblyName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1569 properties["SoapAssemblyName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1577 break; 1570 break;
1578 case "SoapTypeName": 1571 case "SoapTypeName":
1579 properties["SoapTypeName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1572 properties["SoapTypeName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1580 break; 1573 break;
1581 case "Synchronization": 1574 case "Synchronization":
1582 string synchronizationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1575 string synchronizationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1583 switch (synchronizationValue) 1576 switch (synchronizationValue)
1584 { 1577 {
1585 case "ignored": 1578 case "ignored":
@@ -1598,12 +1591,12 @@ namespace WixToolset.Extensions
1598 properties["Synchronization"] = "4"; 1591 properties["Synchronization"] = "4";
1599 break; 1592 break;
1600 default: 1593 default:
1601 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Synchronization", synchronizationValue, "ignored", "none", "supported", "required", "requiresNew")); 1594 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Synchronization", synchronizationValue, "ignored", "none", "supported", "required", "requiresNew"));
1602 break; 1595 break;
1603 } 1596 }
1604 break; 1597 break;
1605 case "Transaction": 1598 case "Transaction":
1606 string transactionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1599 string transactionValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1607 switch (transactionValue) 1600 switch (transactionValue)
1608 { 1601 {
1609 case "ignored": 1602 case "ignored":
@@ -1622,12 +1615,12 @@ namespace WixToolset.Extensions
1622 properties["Transaction"] = "4"; 1615 properties["Transaction"] = "4";
1623 break; 1616 break;
1624 default: 1617 default:
1625 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Transaction", transactionValue, "ignored", "none", "supported", "required", "requiresNew")); 1618 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Transaction", transactionValue, "ignored", "none", "supported", "required", "requiresNew"));
1626 break; 1619 break;
1627 } 1620 }
1628 break; 1621 break;
1629 case "TxIsolationLevel": 1622 case "TxIsolationLevel":
1630 string txIsolationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1623 string txIsolationLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1631 switch (txIsolationLevelValue) 1624 switch (txIsolationLevelValue)
1632 { 1625 {
1633 case "any": 1626 case "any":
@@ -1646,18 +1639,18 @@ namespace WixToolset.Extensions
1646 properties["TxIsolationLevel"] = "4"; 1639 properties["TxIsolationLevel"] = "4";
1647 break; 1640 break;
1648 default: 1641 default:
1649 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "TxIsolationLevel", txIsolationLevelValue, "any", "readUnCommitted", "readCommitted", "repeatableRead", "serializable")); 1642 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "TxIsolationLevel", txIsolationLevelValue, "any", "readUnCommitted", "readCommitted", "repeatableRead", "serializable"));
1650 break; 1643 break;
1651 } 1644 }
1652 break; 1645 break;
1653 default: 1646 default:
1654 this.Core.UnexpectedAttribute(node, attrib); 1647 this.ParseHelper.UnexpectedAttribute(node, attrib);
1655 break; 1648 break;
1656 } 1649 }
1657 } 1650 }
1658 else 1651 else
1659 { 1652 {
1660 this.Core.ParseExtensionAttribute(node, attrib); 1653 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1661 } 1654 }
1662 } 1655 }
1663 1656
@@ -1668,37 +1661,37 @@ namespace WixToolset.Extensions
1668 switch (child.Name.LocalName) 1661 switch (child.Name.LocalName)
1669 { 1662 {
1670 case "ComPlusRoleForComponent": 1663 case "ComPlusRoleForComponent":
1671 this.ParseComPlusRoleForComponentElement(child, componentKey, key); 1664 this.ParseComPlusRoleForComponentElement(intermediate, section, child, componentKey, key);
1672 break; 1665 break;
1673 case "ComPlusInterface": 1666 case "ComPlusInterface":
1674 this.ParseComPlusInterfaceElement(child, componentKey, key); 1667 this.ParseComPlusInterfaceElement(intermediate, section, child, componentKey, key);
1675 break; 1668 break;
1676 case "ComPlusSubscription": 1669 case "ComPlusSubscription":
1677 this.ParseComPlusSubscriptionElement(child, componentKey, key); 1670 this.ParseComPlusSubscriptionElement(intermediate, section, child, componentKey, key);
1678 break; 1671 break;
1679 default: 1672 default:
1680 this.Core.UnexpectedElement(node, child); 1673 this.ParseHelper.UnexpectedElement(node, child);
1681 break; 1674 break;
1682 } 1675 }
1683 } 1676 }
1684 else 1677 else
1685 { 1678 {
1686 this.Core.ParseExtensionElement(node, child); 1679 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1687 } 1680 }
1688 } 1681 }
1689 1682
1690 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponent"); 1683 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusComponent");
1691 row[0] = key; 1684 row.Set(0, key);
1692 row[1] = assemblyKey; 1685 row.Set(1, assemblyKey);
1693 row[2] = clsid; 1686 row.Set(2, clsid);
1694 1687
1695 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1688 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1696 while (propertiesEnumerator.MoveNext()) 1689 while (propertiesEnumerator.MoveNext())
1697 { 1690 {
1698 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponentProperty"); 1691 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusComponentProperty");
1699 propertyRow[0] = key; 1692 propertyRow.Set(0, key);
1700 propertyRow[1] = (string)propertiesEnumerator.Key; 1693 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1701 propertyRow[2] = (string)propertiesEnumerator.Value; 1694 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1702 } 1695 }
1703 } 1696 }
1704 1697
@@ -1708,9 +1701,9 @@ namespace WixToolset.Extensions
1708 /// <param name="node">Element to parse.</param> 1701 /// <param name="node">Element to parse.</param>
1709 /// <param name="componentKey">Identifier of parent component.</param> 1702 /// <param name="componentKey">Identifier of parent component.</param>
1710 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 1703 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
1711 private void ParseComPlusRoleForComponentElement(XElement node, string componentKey, string cpcomponentKey) 1704 private void ParseComPlusRoleForComponentElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
1712 { 1705 {
1713 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1706 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1714 1707
1715 string key = null; 1708 string key = null;
1716 string applicationRoleKey = null; 1709 string applicationRoleKey = null;
@@ -1722,40 +1715,40 @@ namespace WixToolset.Extensions
1722 switch (attrib.Name.LocalName) 1715 switch (attrib.Name.LocalName)
1723 { 1716 {
1724 case "Id": 1717 case "Id":
1725 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1718 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1726 break; 1719 break;
1727 case "Component": 1720 case "Component":
1728 if (null != cpcomponentKey) 1721 if (null != cpcomponentKey)
1729 { 1722 {
1730 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1723 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1731 } 1724 }
1732 cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1725 cpcomponentKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1733 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); 1726 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusComponent", cpcomponentKey);
1734 break; 1727 break;
1735 case "ApplicationRole": 1728 case "ApplicationRole":
1736 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1729 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1737 break; 1730 break;
1738 default: 1731 default:
1739 this.Core.UnexpectedAttribute(node, attrib); 1732 this.ParseHelper.UnexpectedAttribute(node, attrib);
1740 break; 1733 break;
1741 } 1734 }
1742 } 1735 }
1743 else 1736 else
1744 { 1737 {
1745 this.Core.ParseExtensionAttribute(node, attrib); 1738 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1746 } 1739 }
1747 } 1740 }
1748 1741
1749 if (null == cpcomponentKey) 1742 if (null == cpcomponentKey)
1750 { 1743 {
1751 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); 1744 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component"));
1752 } 1745 }
1753 1746
1754 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForComponent"); 1747 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForComponent");
1755 row[0] = key; 1748 row.Set(0, key);
1756 row[1] = cpcomponentKey; 1749 row.Set(1, cpcomponentKey);
1757 row[2] = applicationRoleKey; 1750 row.Set(2, applicationRoleKey);
1758 row[3] = componentKey; 1751 row.Set(3, componentKey);
1759 } 1752 }
1760 1753
1761 /// <summary> 1754 /// <summary>
@@ -1764,9 +1757,9 @@ namespace WixToolset.Extensions
1764 /// <param name="node">Element to parse.</param> 1757 /// <param name="node">Element to parse.</param>
1765 /// <param name="componentKey">Identifier of parent component.</param> 1758 /// <param name="componentKey">Identifier of parent component.</param>
1766 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 1759 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
1767 private void ParseComPlusInterfaceElement(XElement node, string componentKey, string cpcomponentKey) 1760 private void ParseComPlusInterfaceElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
1768 { 1761 {
1769 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1762 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1770 1763
1771 // parse attributes 1764 // parse attributes
1772 string key = null; 1765 string key = null;
@@ -1781,25 +1774,25 @@ namespace WixToolset.Extensions
1781 switch (attrib.Name.LocalName) 1774 switch (attrib.Name.LocalName)
1782 { 1775 {
1783 case "Id": 1776 case "Id":
1784 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1777 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1785 break; 1778 break;
1786 case "IID": 1779 case "IID":
1787 iid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; 1780 iid = "{" + this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib) + "}";
1788 break; 1781 break;
1789 case "Description": 1782 case "Description":
1790 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1783 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1791 break; 1784 break;
1792 case "QueuingEnabled": 1785 case "QueuingEnabled":
1793 properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1786 properties["QueuingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1794 break; 1787 break;
1795 default: 1788 default:
1796 this.Core.UnexpectedAttribute(node, attrib); 1789 this.ParseHelper.UnexpectedAttribute(node, attrib);
1797 break; 1790 break;
1798 } 1791 }
1799 } 1792 }
1800 else 1793 else
1801 { 1794 {
1802 this.Core.ParseExtensionAttribute(node, attrib); 1795 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1803 } 1796 }
1804 } 1797 }
1805 1798
@@ -1810,34 +1803,34 @@ namespace WixToolset.Extensions
1810 switch (child.Name.LocalName) 1803 switch (child.Name.LocalName)
1811 { 1804 {
1812 case "ComPlusRoleForInterface": 1805 case "ComPlusRoleForInterface":
1813 this.ParseComPlusRoleForInterfaceElement(child, componentKey, key); 1806 this.ParseComPlusRoleForInterfaceElement(intermediate, section, child, componentKey, key);
1814 break; 1807 break;
1815 case "ComPlusMethod": 1808 case "ComPlusMethod":
1816 this.ParseComPlusMethodElement(child, componentKey, key); 1809 this.ParseComPlusMethodElement(intermediate, section, child, componentKey, key);
1817 break; 1810 break;
1818 default: 1811 default:
1819 this.Core.UnexpectedElement(node, child); 1812 this.ParseHelper.UnexpectedElement(node, child);
1820 break; 1813 break;
1821 } 1814 }
1822 } 1815 }
1823 else 1816 else
1824 { 1817 {
1825 this.Core.ParseExtensionElement(node, child); 1818 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1826 } 1819 }
1827 } 1820 }
1828 1821
1829 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterface"); 1822 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusInterface");
1830 row[0] = key; 1823 row.Set(0, key);
1831 row[1] = cpcomponentKey; 1824 row.Set(1, cpcomponentKey);
1832 row[2] = iid; 1825 row.Set(2, iid);
1833 1826
1834 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1827 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1835 while (propertiesEnumerator.MoveNext()) 1828 while (propertiesEnumerator.MoveNext())
1836 { 1829 {
1837 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterfaceProperty"); 1830 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusInterfaceProperty");
1838 propertyRow[0] = key; 1831 propertyRow.Set(0, key);
1839 propertyRow[1] = (string)propertiesEnumerator.Key; 1832 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1840 propertyRow[2] = (string)propertiesEnumerator.Value; 1833 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1841 } 1834 }
1842 } 1835 }
1843 1836
@@ -1847,9 +1840,9 @@ namespace WixToolset.Extensions
1847 /// <param name="node">Element to parse.</param> 1840 /// <param name="node">Element to parse.</param>
1848 /// <param name="componentKey">Identifier of parent component.</param> 1841 /// <param name="componentKey">Identifier of parent component.</param>
1849 /// <param name="interfaceKey">Identifier of parent interface.</param> 1842 /// <param name="interfaceKey">Identifier of parent interface.</param>
1850 private void ParseComPlusRoleForInterfaceElement(XElement node, string componentKey, string interfaceKey) 1843 private void ParseComPlusRoleForInterfaceElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string interfaceKey)
1851 { 1844 {
1852 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1845 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1853 1846
1854 string key = null; 1847 string key = null;
1855 string applicationRoleKey = null; 1848 string applicationRoleKey = null;
@@ -1861,40 +1854,40 @@ namespace WixToolset.Extensions
1861 switch (attrib.Name.LocalName) 1854 switch (attrib.Name.LocalName)
1862 { 1855 {
1863 case "Id": 1856 case "Id":
1864 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1857 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1865 break; 1858 break;
1866 case "Interface": 1859 case "Interface":
1867 if (null != interfaceKey) 1860 if (null != interfaceKey)
1868 { 1861 {
1869 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1862 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1870 } 1863 }
1871 interfaceKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1864 interfaceKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1872 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusInterface", interfaceKey); 1865 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusInterface", interfaceKey);
1873 break; 1866 break;
1874 case "ApplicationRole": 1867 case "ApplicationRole":
1875 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1868 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1876 break; 1869 break;
1877 default: 1870 default:
1878 this.Core.UnexpectedAttribute(node, attrib); 1871 this.ParseHelper.UnexpectedAttribute(node, attrib);
1879 break; 1872 break;
1880 } 1873 }
1881 } 1874 }
1882 else 1875 else
1883 { 1876 {
1884 this.Core.ParseExtensionAttribute(node, attrib); 1877 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1885 } 1878 }
1886 } 1879 }
1887 1880
1888 if (null == interfaceKey) 1881 if (null == interfaceKey)
1889 { 1882 {
1890 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Interface")); 1883 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Interface"));
1891 } 1884 }
1892 1885
1893 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForInterface"); 1886 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForInterface");
1894 row[0] = key; 1887 row.Set(0, key);
1895 row[1] = interfaceKey; 1888 row.Set(1, interfaceKey);
1896 row[2] = applicationRoleKey; 1889 row.Set(2, applicationRoleKey);
1897 row[3] = componentKey; 1890 row.Set(3, componentKey);
1898 } 1891 }
1899 1892
1900 /// <summary> 1893 /// <summary>
@@ -1903,9 +1896,9 @@ namespace WixToolset.Extensions
1903 /// <param name="node">Element to parse.</param> 1896 /// <param name="node">Element to parse.</param>
1904 /// <param name="componentKey">Identifier of parent component.</param> 1897 /// <param name="componentKey">Identifier of parent component.</param>
1905 /// <param name="interfaceKey">Identifier of parent interface.</param> 1898 /// <param name="interfaceKey">Identifier of parent interface.</param>
1906 private void ParseComPlusMethodElement(XElement node, string componentKey, string interfaceKey) 1899 private void ParseComPlusMethodElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string interfaceKey)
1907 { 1900 {
1908 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1901 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1909 1902
1910 string key = null; 1903 string key = null;
1911 int index = CompilerConstants.IntegerNotSet; 1904 int index = CompilerConstants.IntegerNotSet;
@@ -1920,28 +1913,28 @@ namespace WixToolset.Extensions
1920 switch (attrib.Name.LocalName) 1913 switch (attrib.Name.LocalName)
1921 { 1914 {
1922 case "Id": 1915 case "Id":
1923 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1916 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1924 break; 1917 break;
1925 case "Index": 1918 case "Index":
1926 index = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); 1919 index = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
1927 break; 1920 break;
1928 case "Name": 1921 case "Name":
1929 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1922 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1930 break; 1923 break;
1931 case "AutoComplete": 1924 case "AutoComplete":
1932 properties["AutoComplete"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1925 properties["AutoComplete"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1933 break; 1926 break;
1934 case "Description": 1927 case "Description":
1935 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1928 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1936 break; 1929 break;
1937 default: 1930 default:
1938 this.Core.UnexpectedAttribute(node, attrib); 1931 this.ParseHelper.UnexpectedAttribute(node, attrib);
1939 break; 1932 break;
1940 } 1933 }
1941 } 1934 }
1942 else 1935 else
1943 { 1936 {
1944 this.Core.ParseExtensionAttribute(node, attrib); 1937 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1945 } 1938 }
1946 } 1939 }
1947 1940
@@ -1952,40 +1945,40 @@ namespace WixToolset.Extensions
1952 switch (child.Name.LocalName) 1945 switch (child.Name.LocalName)
1953 { 1946 {
1954 case "ComPlusRoleForMethod": 1947 case "ComPlusRoleForMethod":
1955 this.ParseComPlusRoleForMethodElement(child, componentKey, key); 1948 this.ParseComPlusRoleForMethodElement(intermediate, section, child, componentKey, key);
1956 break; 1949 break;
1957 default: 1950 default:
1958 this.Core.UnexpectedElement(node, child); 1951 this.ParseHelper.UnexpectedElement(node, child);
1959 break; 1952 break;
1960 } 1953 }
1961 } 1954 }
1962 else 1955 else
1963 { 1956 {
1964 this.Core.ParseExtensionElement(node, child); 1957 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1965 } 1958 }
1966 } 1959 }
1967 1960
1968 if (CompilerConstants.IntegerNotSet == index && null == name) 1961 if (CompilerConstants.IntegerNotSet == index && null == name)
1969 { 1962 {
1970 this.Core.OnMessage(ComPlusErrors.RequiredAttribute(sourceLineNumbers, node.Name.LocalName, "Index", "Name")); 1963 this.Messaging.Write(ComPlusErrors.RequiredAttribute(sourceLineNumbers, node.Name.LocalName, "Index", "Name"));
1971 } 1964 }
1972 1965
1973 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethod"); 1966 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusMethod");
1974 row[0] = key; 1967 row.Set(0, key);
1975 row[1] = interfaceKey; 1968 row.Set(1, interfaceKey);
1976 if (CompilerConstants.IntegerNotSet != index) 1969 if (CompilerConstants.IntegerNotSet != index)
1977 { 1970 {
1978 row[2] = index; 1971 row.Set(2, index);
1979 } 1972 }
1980 row[3] = name; 1973 row.Set(3, name);
1981 1974
1982 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1975 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1983 while (propertiesEnumerator.MoveNext()) 1976 while (propertiesEnumerator.MoveNext())
1984 { 1977 {
1985 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethodProperty"); 1978 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusMethodProperty");
1986 propertyRow[0] = key; 1979 propertyRow.Set(0, key);
1987 propertyRow[1] = (string)propertiesEnumerator.Key; 1980 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1988 propertyRow[2] = (string)propertiesEnumerator.Value; 1981 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1989 } 1982 }
1990 } 1983 }
1991 1984
@@ -1995,9 +1988,9 @@ namespace WixToolset.Extensions
1995 /// <param name="node">Element to parse.</param> 1988 /// <param name="node">Element to parse.</param>
1996 /// <param name="componentKey">Identifier of parent component.</param> 1989 /// <param name="componentKey">Identifier of parent component.</param>
1997 /// <param name="methodKey">Identifier of parent method.</param> 1990 /// <param name="methodKey">Identifier of parent method.</param>
1998 private void ParseComPlusRoleForMethodElement(XElement node, string componentKey, string methodKey) 1991 private void ParseComPlusRoleForMethodElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string methodKey)
1999 { 1992 {
2000 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1993 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
2001 1994
2002 string key = null; 1995 string key = null;
2003 string applicationRoleKey = null; 1996 string applicationRoleKey = null;
@@ -2009,40 +2002,40 @@ namespace WixToolset.Extensions
2009 switch (attrib.Name.LocalName) 2002 switch (attrib.Name.LocalName)
2010 { 2003 {
2011 case "Id": 2004 case "Id":
2012 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2005 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2013 break; 2006 break;
2014 case "Method": 2007 case "Method":
2015 if (null != methodKey) 2008 if (null != methodKey)
2016 { 2009 {
2017 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2010 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2018 } 2011 }
2019 methodKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2012 methodKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2020 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusMethod", methodKey); 2013 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusMethod", methodKey);
2021 break; 2014 break;
2022 case "ApplicationRole": 2015 case "ApplicationRole":
2023 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2016 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2024 break; 2017 break;
2025 default: 2018 default:
2026 this.Core.UnexpectedAttribute(node, attrib); 2019 this.ParseHelper.UnexpectedAttribute(node, attrib);
2027 break; 2020 break;
2028 } 2021 }
2029 } 2022 }
2030 else 2023 else
2031 { 2024 {
2032 this.Core.ParseExtensionAttribute(node, attrib); 2025 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
2033 } 2026 }
2034 } 2027 }
2035 2028
2036 if (null == methodKey) 2029 if (null == methodKey)
2037 { 2030 {
2038 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Method")); 2031 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Method"));
2039 } 2032 }
2040 2033
2041 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForMethod"); 2034 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForMethod");
2042 row[0] = key; 2035 row.Set(0, key);
2043 row[1] = methodKey; 2036 row.Set(1, methodKey);
2044 row[2] = applicationRoleKey; 2037 row.Set(2, applicationRoleKey);
2045 row[3] = componentKey; 2038 row.Set(3, componentKey);
2046 } 2039 }
2047 2040
2048 /// <summary> 2041 /// <summary>
@@ -2051,9 +2044,9 @@ namespace WixToolset.Extensions
2051 /// <param name="node">Element to parse.</param> 2044 /// <param name="node">Element to parse.</param>
2052 /// <param name="componentKey">Identifier of parent component.</param> 2045 /// <param name="componentKey">Identifier of parent component.</param>
2053 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 2046 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
2054 private void ParseComPlusSubscriptionElement(XElement node, string componentKey, string cpcomponentKey) 2047 private void ParseComPlusSubscriptionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
2055 { 2048 {
2056 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 2049 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
2057 2050
2058 string key = null; 2051 string key = null;
2059 string id = null; 2052 string id = null;
@@ -2070,95 +2063,95 @@ namespace WixToolset.Extensions
2070 switch (attrib.Name.LocalName) 2063 switch (attrib.Name.LocalName)
2071 { 2064 {
2072 case "Id": 2065 case "Id":
2073 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2066 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2074 break; 2067 break;
2075 case "Component": 2068 case "Component":
2076 if (null != cpcomponentKey) 2069 if (null != cpcomponentKey)
2077 { 2070 {
2078 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2071 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2079 } 2072 }
2080 cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2073 cpcomponentKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2081 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); 2074 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusComponent", cpcomponentKey);
2082 break; 2075 break;
2083 case "SubscriptionId": 2076 case "SubscriptionId":
2084 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 2077 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
2085 break; 2078 break;
2086 case "Name": 2079 case "Name":
2087 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2080 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2088 break; 2081 break;
2089 case "EventCLSID": 2082 case "EventCLSID":
2090 eventCLSID = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2083 eventCLSID = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2091 break; 2084 break;
2092 case "PublisherID": 2085 case "PublisherID":
2093 publisherID = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 2086 publisherID = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
2094 break; 2087 break;
2095 case "Description": 2088 case "Description":
2096 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2089 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2097 break; 2090 break;
2098 case "Enabled": 2091 case "Enabled":
2099 properties["Enabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2092 properties["Enabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2100 break; 2093 break;
2101 case "EventClassPartitionID": 2094 case "EventClassPartitionID":
2102 properties["EventClassPartitionID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2095 properties["EventClassPartitionID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2103 break; 2096 break;
2104 case "FilterCriteria": 2097 case "FilterCriteria":
2105 properties["FilterCriteria"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2098 properties["FilterCriteria"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2106 break; 2099 break;
2107 case "InterfaceID": 2100 case "InterfaceID":
2108 properties["InterfaceID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2101 properties["InterfaceID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2109 break; 2102 break;
2110 case "MachineName": 2103 case "MachineName":
2111 properties["MachineName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2104 properties["MachineName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2112 break; 2105 break;
2113 case "MethodName": 2106 case "MethodName":
2114 properties["MethodName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2107 properties["MethodName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2115 break; 2108 break;
2116 case "PerUser": 2109 case "PerUser":
2117 properties["PerUser"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2110 properties["PerUser"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2118 break; 2111 break;
2119 case "Queued": 2112 case "Queued":
2120 properties["Queued"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2113 properties["Queued"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2121 break; 2114 break;
2122 case "SubscriberMoniker": 2115 case "SubscriberMoniker":
2123 properties["SubscriberMoniker"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2116 properties["SubscriberMoniker"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2124 break; 2117 break;
2125 case "UserName": 2118 case "UserName":
2126 properties["UserName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2119 properties["UserName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2127 break; 2120 break;
2128 default: 2121 default:
2129 this.Core.UnexpectedAttribute(node, attrib); 2122 this.ParseHelper.UnexpectedAttribute(node, attrib);
2130 break; 2123 break;
2131 } 2124 }
2132 } 2125 }
2133 else 2126 else
2134 { 2127 {
2135 this.Core.ParseExtensionAttribute(node, attrib); 2128 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
2136 } 2129 }
2137 } 2130 }
2138 2131
2139 if (null == cpcomponentKey) 2132 if (null == cpcomponentKey)
2140 { 2133 {
2141 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); 2134 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component"));
2142 } 2135 }
2143 2136
2144 this.Core.ParseForExtensionElements(node); 2137 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, node);
2145 2138
2146 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscription"); 2139 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusSubscription");
2147 row[0] = key; 2140 row.Set(0, key);
2148 row[1] = cpcomponentKey; 2141 row.Set(1, cpcomponentKey);
2149 row[2] = componentKey; 2142 row.Set(2, componentKey);
2150 row[3] = id; 2143 row.Set(3, id);
2151 row[4] = name; 2144 row.Set(4, name);
2152 row[5] = eventCLSID; 2145 row.Set(5, eventCLSID);
2153 row[6] = publisherID; 2146 row.Set(6, publisherID);
2154 2147
2155 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 2148 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
2156 while (propertiesEnumerator.MoveNext()) 2149 while (propertiesEnumerator.MoveNext())
2157 { 2150 {
2158 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscriptionProperty"); 2151 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusSubscriptionProperty");
2159 propertyRow[0] = key; 2152 propertyRow.Set(0, key);
2160 propertyRow[1] = (string)propertiesEnumerator.Key; 2153 propertyRow.Set(1, (string)propertiesEnumerator.Key);
2161 propertyRow[2] = (string)propertiesEnumerator.Value; 2154 propertyRow.Set(2, (string)propertiesEnumerator.Value);
2162 } 2155 }
2163 } 2156 }
2164 2157
diff --git a/src/wixext/ComPlusDecompiler.cs b/src/wixext/ComPlusDecompiler.cs
index 27f1653e..6da2df94 100644
--- a/src/wixext/ComPlusDecompiler.cs
+++ b/src/wixext/ComPlusDecompiler.cs
@@ -1,7 +1,8 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 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 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5#if TODO_CONSIDER_DECOMPILER
5 using System; 6 using System;
6 using System.Collections; 7 using System.Collections;
7 using System.Globalization; 8 using System.Globalization;
@@ -1840,4 +1841,5 @@ namespace WixToolset.Extensions
1840 } 1841 }
1841 } 1842 }
1842 } 1843 }
1844#endif
1843} 1845}
diff --git a/src/wixext/ComPlusErrors.cs b/src/wixext/ComPlusErrors.cs
new file mode 100644
index 00000000..91b41679
--- /dev/null
+++ b/src/wixext/ComPlusErrors.cs
@@ -0,0 +1,72 @@
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.ComPlus
4{
5 using System;
6 using System.Resources;
7 using WixToolset.Data;
8
9 public static class ComPlusErrors
10 {
11 public static Message IllegalAttributeWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
12 {
13 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutComponent, "The {0}/@{1} attribute cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.", elementName, attributeName);
14 }
15
16 public static Message IllegalElementWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName)
17 {
18 return Message(sourceLineNumbers, Ids.IllegalElementWithoutComponent, "The {0} element cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.", elementName);
19 }
20
21 public static Message RequiredAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
22 {
23 return Message(sourceLineNumbers, Ids.RequiredAttribute, "A {0} element must have either a {1} attribute or a {2} attribute, or both set.", elementName, attributeName1, attributeName2);
24 }
25
26 public static Message RequiredAttributeNotUnderComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
27 {
28 return Message(sourceLineNumbers, Ids.RequiredAttributeNotUnderComponent, "A {0} element not nested under a component must have either a {1} attribute or a {2} attribute, or both set.", elementName, attributeName1, attributeName2);
29 }
30
31 public static Message RequiredAttributeUnderComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
32 {
33 return Message(sourceLineNumbers, Ids.RequiredAttributeUnderComponent, "The {0}/@{1} attribute must be provided when {0} element is nested under a component.", elementName, attributeName);
34 }
35
36 public static Message UnexpectedAttributeWithOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
37 {
38 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithOtherValue, "The {0}/@{1} attribute cannot coexist with the {2} attribute's value of '{3}'.", elementName, attributeName, otherAttributeName, otherValue);
39 }
40
41 public static Message UnexpectedAttributeWithOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string otherAttributeName, string otherValue)
42 {
43 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithOtherValue, "The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'.", elementName, attributeName, value, otherAttributeName, otherValue);
44 }
45
46 public static Message UnexpectedAttributeWithoutOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
47 {
48 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithoutOtherValue, "The {0}/@{1} cannot be provided unless the {2} attribute is provided with a value of '{3}'.", elementName, attributeName, otherAttributeName, otherValue);
49 }
50
51 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
52 {
53 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args);
54 }
55
56 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
57 {
58 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args);
59 }
60
61 public enum Ids
62 {
63 IllegalAttributeWithoutComponent = 6000,
64 IllegalElementWithoutComponent = 6001,
65 UnexpectedAttributeWithOtherValue = 6002,
66 UnexpectedAttributeWithoutOtherValue = 6003,
67 RequiredAttributeUnderComponent = 6004,
68 RequiredAttribute = 6005,
69 RequiredAttributeNotUnderComponent = 6006,
70 }
71 }
72}
diff --git a/src/wixext/ComPlusExtensionData.cs b/src/wixext/ComPlusExtensionData.cs
index cedc2474..954e89f6 100644
--- a/src/wixext/ComPlusExtensionData.cs
+++ b/src/wixext/ComPlusExtensionData.cs
@@ -1,64 +1,30 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 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 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5 using System;
6 using System.Reflection;
7 using WixToolset.Data; 5 using WixToolset.Data;
8 using WixToolset.Extensibility; 6 using WixToolset.Extensibility;
9 7
10 /// <summary> 8 /// <summary>
11 /// The WiX Toolset COM+ Extension. 9 /// The WiX Toolset COM+ Extension.
12 /// </summary> 10 /// </summary>
13 public sealed class ComPlusExtensionData : ExtensionData 11 public sealed class ComPlusExtensionData : BaseExtensionData
14 { 12 {
15 /// <summary> 13 /// <summary>
16 /// Gets the default culture. 14 /// Gets the default culture.
17 /// </summary> 15 /// </summary>
18 /// <value>The default culture.</value> 16 /// <value>The default culture.</value>
19 public override string DefaultCulture 17 public override string DefaultCulture => "en-US";
20 {
21 get { return "en-us"; }
22 }
23
24 /// <summary>
25 /// Gets the optional table definitions for this extension.
26 /// </summary>
27 /// <value>The optional table definitions for this extension.</value>
28 public override TableDefinitionCollection TableDefinitions
29 {
30 get
31 {
32 return ComPlusExtensionData.GetExtensionTableDefinitions();
33 }
34 }
35
36 /// <summary>
37 /// Gets the library associated with this extension.
38 /// </summary>
39 /// <param name="tableDefinitions">The table definitions to use while loading the library.</param>
40 /// <returns>The loaded library.</returns>
41 public override Library GetLibrary(TableDefinitionCollection tableDefinitions)
42 {
43 return ComPlusExtensionData.GetExtensionLibrary(tableDefinitions);
44 }
45 18
46 /// <summary> 19 public override bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition)
47 /// Internal mechanism to access the extension's table definitions.
48 /// </summary>
49 /// <returns>Extension's table definitions.</returns>
50 internal static TableDefinitionCollection GetExtensionTableDefinitions()
51 { 20 {
52 return ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml"); 21 tupleDefinition = ComPlusTupleDefinitions.ByName(name);
22 return tupleDefinition != null;
53 } 23 }
54 24
55 /// <summary> 25 public override Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions)
56 /// Internal mechanism to access the extension's library.
57 /// </summary>
58 /// <returns>Extension's library.</returns>
59 internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
60 { 26 {
61 return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.complus.wixlib", tableDefinitions); 27 return Intermediate.Load(typeof(ComPlusExtensionData).Assembly, "WixToolset.ComPlus.complus.wixlib", tupleDefinitions);
62 } 28 }
63 } 29 }
64} 30}
diff --git a/src/wixext/ComPlusExtensionFactory.cs b/src/wixext/ComPlusExtensionFactory.cs
new file mode 100644
index 00000000..d9405867
--- /dev/null
+++ b/src/wixext/ComPlusExtensionFactory.cs
@@ -0,0 +1,18 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System;
6 using System.Collections.Generic;
7 using WixToolset.Extensibility;
8
9 public class ComPlusExtensionFactory : BaseExtensionFactory
10 {
11 protected override IEnumerable<Type> ExtensionTypes => new[]
12 {
13 typeof(ComPlusCompiler),
14 typeof(ComPlusExtensionData),
15 typeof(ComPlusWindowsInstallerBackendBinderExtension),
16 };
17 }
18}
diff --git a/src/wixext/ComPlusWarnings.cs b/src/wixext/ComPlusWarnings.cs
new file mode 100644
index 00000000..e0000918
--- /dev/null
+++ b/src/wixext/ComPlusWarnings.cs
@@ -0,0 +1,31 @@
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.ComPlus
4{
5 using System;
6 using System.Resources;
7 using WixToolset.Data;
8
9 public static class ComPlusWarnings
10 {
11 public static Message MissingComponents(SourceLineNumber sourceLineNumbers)
12 {
13 return Message(sourceLineNumbers, Ids.MissingComponents, "The ComPlusAssembly element has a Type attribute with a value of 'native', but the element does not contain any ComPlusComponent elements. All components contained in a native assembly must be listed, or they will not be correctly removed during uninstall.");
14 }
15
16 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
17 {
18 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
19 }
20
21 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
22 {
23 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, resourceManager, resourceName, args);
24 }
25
26 public enum Ids
27 {
28 MissingComponents = 6007,
29 }
30 }
31}
diff --git a/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs b/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs
new file mode 100644
index 00000000..b00add9e
--- /dev/null
+++ b/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs
@@ -0,0 +1,26 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System.Linq;
6 using System.Xml;
7 using WixToolset.Data.WindowsInstaller;
8 using WixToolset.Extensibility;
9
10 public class ComPlusWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension
11 {
12 private static readonly TableDefinition[] Tables = LoadTables();
13
14 protected override TableDefinition[] TableDefinitionsForTuples => Tables;
15
16 private static TableDefinition[] LoadTables()
17 {
18 using (var resourceStream = typeof(ComPlusWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.ComPlus.tables.xml"))
19 using (var reader = XmlReader.Create(resourceStream))
20 {
21 var tables = TableDefinitionCollection.Load(reader);
22 return tables.ToArray();
23 }
24 }
25 }
26}
diff --git a/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs b/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs
new file mode 100644
index 00000000..2582d323
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Application_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusApplicationPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusApplicationPropertyTupleFields
27 {
28 Application_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusApplicationPropertyTuple : IntermediateTuple
34 {
35 public ComPlusApplicationPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationProperty, null, null)
36 {
37 }
38
39 public ComPlusApplicationPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusApplicationPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Application_
46 {
47 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Application_].AsString();
48 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Application_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs b/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs
new file mode 100644
index 00000000..98eee7f8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationRoleProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationRoleProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.ApplicationRole_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusApplicationRolePropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusApplicationRolePropertyTupleFields
27 {
28 ApplicationRole_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusApplicationRolePropertyTuple : IntermediateTuple
34 {
35 public ComPlusApplicationRolePropertyTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationRoleProperty, null, null)
36 {
37 }
38
39 public ComPlusApplicationRolePropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationRoleProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusApplicationRolePropertyTupleFields index] => this.Fields[(int)index];
44
45 public string ApplicationRole_
46 {
47 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.ApplicationRole_].AsString();
48 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.ApplicationRole_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs
new file mode 100644
index 00000000..5a0cf378
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.ApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Application_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusApplicationRoleTupleFields
28 {
29 ApplicationRole,
30 Application_,
31 Component_,
32 Name,
33 }
34
35 public class ComPlusApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string ApplicationRole
48 {
49 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.ApplicationRole].AsString();
50 set => this.Set((int)ComPlusApplicationRoleTupleFields.ApplicationRole, value);
51 }
52
53 public string Application_
54 {
55 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Application_].AsString();
56 set => this.Set((int)ComPlusApplicationRoleTupleFields.Application_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusApplicationRoleTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationTuple.cs b/src/wixext/Tuples/ComPlusApplicationTuple.cs
new file mode 100644
index 00000000..7fd5fbd4
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationTuple.cs
@@ -0,0 +1,79 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplication = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplication.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Application), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.CustomId), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Name), IntermediateFieldType.String),
19 },
20 typeof(ComPlusApplicationTuple));
21 }
22}
23
24namespace WixToolset.ComPlus.Tuples
25{
26 using WixToolset.Data;
27
28 public enum ComPlusApplicationTupleFields
29 {
30 Application,
31 Partition_,
32 Component_,
33 CustomId,
34 Name,
35 }
36
37 public class ComPlusApplicationTuple : IntermediateTuple
38 {
39 public ComPlusApplicationTuple() : base(ComPlusTupleDefinitions.ComPlusApplication, null, null)
40 {
41 }
42
43 public ComPlusApplicationTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplication, sourceLineNumber, id)
44 {
45 }
46
47 public IntermediateField this[ComPlusApplicationTupleFields index] => this.Fields[(int)index];
48
49 public string Application
50 {
51 get => this.Fields[(int)ComPlusApplicationTupleFields.Application].AsString();
52 set => this.Set((int)ComPlusApplicationTupleFields.Application, value);
53 }
54
55 public string Partition_
56 {
57 get => this.Fields[(int)ComPlusApplicationTupleFields.Partition_].AsString();
58 set => this.Set((int)ComPlusApplicationTupleFields.Partition_, value);
59 }
60
61 public string Component_
62 {
63 get => this.Fields[(int)ComPlusApplicationTupleFields.Component_].AsString();
64 set => this.Set((int)ComPlusApplicationTupleFields.Component_, value);
65 }
66
67 public string CustomId
68 {
69 get => this.Fields[(int)ComPlusApplicationTupleFields.CustomId].AsString();
70 set => this.Set((int)ComPlusApplicationTupleFields.CustomId, value);
71 }
72
73 public string Name
74 {
75 get => this.Fields[(int)ComPlusApplicationTupleFields.Name].AsString();
76 set => this.Set((int)ComPlusApplicationTupleFields.Name, value);
77 }
78 }
79} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs b/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs
new file mode 100644
index 00000000..be0bc073
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusAssemblyDependency = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusAssemblyDependency.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusAssemblyDependencyTupleFields.Assembly_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusAssemblyDependencyTupleFields.RequiredAssembly_), IntermediateFieldType.String),
16 },
17 typeof(ComPlusAssemblyDependencyTuple));
18 }
19}
20
21namespace WixToolset.ComPlus.Tuples
22{
23 using WixToolset.Data;
24
25 public enum ComPlusAssemblyDependencyTupleFields
26 {
27 Assembly_,
28 RequiredAssembly_,
29 }
30
31 public class ComPlusAssemblyDependencyTuple : IntermediateTuple
32 {
33 public ComPlusAssemblyDependencyTuple() : base(ComPlusTupleDefinitions.ComPlusAssemblyDependency, null, null)
34 {
35 }
36
37 public ComPlusAssemblyDependencyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusAssemblyDependency, sourceLineNumber, id)
38 {
39 }
40
41 public IntermediateField this[ComPlusAssemblyDependencyTupleFields index] => this.Fields[(int)index];
42
43 public string Assembly_
44 {
45 get => this.Fields[(int)ComPlusAssemblyDependencyTupleFields.Assembly_].AsString();
46 set => this.Set((int)ComPlusAssemblyDependencyTupleFields.Assembly_, value);
47 }
48
49 public string RequiredAssembly_
50 {
51 get => this.Fields[(int)ComPlusAssemblyDependencyTupleFields.RequiredAssembly_].AsString();
52 set => this.Set((int)ComPlusAssemblyDependencyTupleFields.RequiredAssembly_, value);
53 }
54 }
55} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusAssemblyTuple.cs b/src/wixext/Tuples/ComPlusAssemblyTuple.cs
new file mode 100644
index 00000000..0330b4e8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusAssemblyTuple.cs
@@ -0,0 +1,103 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusAssembly = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusAssembly.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Assembly), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Application_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.AssemblyName), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.DllPath), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.TlbPath), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.PSDllPath), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Attributes), IntermediateFieldType.Number),
22 },
23 typeof(ComPlusAssemblyTuple));
24 }
25}
26
27namespace WixToolset.ComPlus.Tuples
28{
29 using WixToolset.Data;
30
31 public enum ComPlusAssemblyTupleFields
32 {
33 Assembly,
34 Application_,
35 Component_,
36 AssemblyName,
37 DllPath,
38 TlbPath,
39 PSDllPath,
40 Attributes,
41 }
42
43 public class ComPlusAssemblyTuple : IntermediateTuple
44 {
45 public ComPlusAssemblyTuple() : base(ComPlusTupleDefinitions.ComPlusAssembly, null, null)
46 {
47 }
48
49 public ComPlusAssemblyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusAssembly, sourceLineNumber, id)
50 {
51 }
52
53 public IntermediateField this[ComPlusAssemblyTupleFields index] => this.Fields[(int)index];
54
55 public string Assembly
56 {
57 get => this.Fields[(int)ComPlusAssemblyTupleFields.Assembly].AsString();
58 set => this.Set((int)ComPlusAssemblyTupleFields.Assembly, value);
59 }
60
61 public string Application_
62 {
63 get => this.Fields[(int)ComPlusAssemblyTupleFields.Application_].AsString();
64 set => this.Set((int)ComPlusAssemblyTupleFields.Application_, value);
65 }
66
67 public string Component_
68 {
69 get => this.Fields[(int)ComPlusAssemblyTupleFields.Component_].AsString();
70 set => this.Set((int)ComPlusAssemblyTupleFields.Component_, value);
71 }
72
73 public string AssemblyName
74 {
75 get => this.Fields[(int)ComPlusAssemblyTupleFields.AssemblyName].AsString();
76 set => this.Set((int)ComPlusAssemblyTupleFields.AssemblyName, value);
77 }
78
79 public string DllPath
80 {
81 get => this.Fields[(int)ComPlusAssemblyTupleFields.DllPath].AsString();
82 set => this.Set((int)ComPlusAssemblyTupleFields.DllPath, value);
83 }
84
85 public string TlbPath
86 {
87 get => this.Fields[(int)ComPlusAssemblyTupleFields.TlbPath].AsString();
88 set => this.Set((int)ComPlusAssemblyTupleFields.TlbPath, value);
89 }
90
91 public string PSDllPath
92 {
93 get => this.Fields[(int)ComPlusAssemblyTupleFields.PSDllPath].AsString();
94 set => this.Set((int)ComPlusAssemblyTupleFields.PSDllPath, value);
95 }
96
97 public int Attributes
98 {
99 get => this.Fields[(int)ComPlusAssemblyTupleFields.Attributes].AsNumber();
100 set => this.Set((int)ComPlusAssemblyTupleFields.Attributes, value);
101 }
102 }
103} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs b/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs
new file mode 100644
index 00000000..81651343
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusComponentProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusComponentProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.ComPlusComponent_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusComponentPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusComponentPropertyTupleFields
27 {
28 ComPlusComponent_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusComponentPropertyTuple : IntermediateTuple
34 {
35 public ComPlusComponentPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusComponentProperty, null, null)
36 {
37 }
38
39 public ComPlusComponentPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusComponentProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusComponentPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string ComPlusComponent_
46 {
47 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.ComPlusComponent_].AsString();
48 set => this.Set((int)ComPlusComponentPropertyTupleFields.ComPlusComponent_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusComponentPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusComponentPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusComponentTuple.cs b/src/wixext/Tuples/ComPlusComponentTuple.cs
new file mode 100644
index 00000000..923ff6e3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusComponentTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusComponent = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusComponent.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.ComPlusComponent), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.Assembly_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.CLSID), IntermediateFieldType.String),
17 },
18 typeof(ComPlusComponentTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusComponentTupleFields
27 {
28 ComPlusComponent,
29 Assembly_,
30 CLSID,
31 }
32
33 public class ComPlusComponentTuple : IntermediateTuple
34 {
35 public ComPlusComponentTuple() : base(ComPlusTupleDefinitions.ComPlusComponent, null, null)
36 {
37 }
38
39 public ComPlusComponentTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusComponent, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusComponentTupleFields index] => this.Fields[(int)index];
44
45 public string ComPlusComponent
46 {
47 get => this.Fields[(int)ComPlusComponentTupleFields.ComPlusComponent].AsString();
48 set => this.Set((int)ComPlusComponentTupleFields.ComPlusComponent, value);
49 }
50
51 public string Assembly_
52 {
53 get => this.Fields[(int)ComPlusComponentTupleFields.Assembly_].AsString();
54 set => this.Set((int)ComPlusComponentTupleFields.Assembly_, value);
55 }
56
57 public string CLSID
58 {
59 get => this.Fields[(int)ComPlusComponentTupleFields.CLSID].AsString();
60 set => this.Set((int)ComPlusComponentTupleFields.CLSID, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs
new file mode 100644
index 00000000..40b47eb3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusGroupInApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusGroupInApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.Group_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusGroupInApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusGroupInApplicationRoleTupleFields
28 {
29 GroupInApplicationRole,
30 ApplicationRole_,
31 Component_,
32 Group_,
33 }
34
35 public class ComPlusGroupInApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusGroupInApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusGroupInApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusGroupInApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusGroupInApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusGroupInApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string GroupInApplicationRole
48 {
49 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole].AsString();
50 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole, value);
51 }
52
53 public string ApplicationRole_
54 {
55 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_].AsString();
56 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string Group_
66 {
67 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.Group_].AsString();
68 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.Group_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs
new file mode 100644
index 00000000..092937f0
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusGroupInPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusGroupInPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.PartitionRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.Group_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusGroupInPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusGroupInPartitionRoleTupleFields
28 {
29 GroupInPartitionRole,
30 PartitionRole_,
31 Component_,
32 Group_,
33 }
34
35 public class ComPlusGroupInPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusGroupInPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusGroupInPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusGroupInPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusGroupInPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusGroupInPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string GroupInPartitionRole
48 {
49 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole].AsString();
50 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole, value);
51 }
52
53 public string PartitionRole_
54 {
55 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.PartitionRole_].AsString();
56 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.PartitionRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string Group_
66 {
67 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.Group_].AsString();
68 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.Group_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs b/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs
new file mode 100644
index 00000000..94f12914
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusInterfaceProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusInterfaceProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Interface_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusInterfacePropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusInterfacePropertyTupleFields
27 {
28 Interface_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusInterfacePropertyTuple : IntermediateTuple
34 {
35 public ComPlusInterfacePropertyTuple() : base(ComPlusTupleDefinitions.ComPlusInterfaceProperty, null, null)
36 {
37 }
38
39 public ComPlusInterfacePropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusInterfaceProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusInterfacePropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Interface_
46 {
47 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Interface_].AsString();
48 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Interface_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusInterfaceTuple.cs b/src/wixext/Tuples/ComPlusInterfaceTuple.cs
new file mode 100644
index 00000000..3c4042ef
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusInterfaceTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusInterface = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusInterface.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.Interface), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.IID), IntermediateFieldType.String),
17 },
18 typeof(ComPlusInterfaceTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusInterfaceTupleFields
27 {
28 Interface,
29 ComPlusComponent_,
30 IID,
31 }
32
33 public class ComPlusInterfaceTuple : IntermediateTuple
34 {
35 public ComPlusInterfaceTuple() : base(ComPlusTupleDefinitions.ComPlusInterface, null, null)
36 {
37 }
38
39 public ComPlusInterfaceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusInterface, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusInterfaceTupleFields index] => this.Fields[(int)index];
44
45 public string Interface
46 {
47 get => this.Fields[(int)ComPlusInterfaceTupleFields.Interface].AsString();
48 set => this.Set((int)ComPlusInterfaceTupleFields.Interface, value);
49 }
50
51 public string ComPlusComponent_
52 {
53 get => this.Fields[(int)ComPlusInterfaceTupleFields.ComPlusComponent_].AsString();
54 set => this.Set((int)ComPlusInterfaceTupleFields.ComPlusComponent_, value);
55 }
56
57 public string IID
58 {
59 get => this.Fields[(int)ComPlusInterfaceTupleFields.IID].AsString();
60 set => this.Set((int)ComPlusInterfaceTupleFields.IID, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs b/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs
new file mode 100644
index 00000000..8ebc3f6b
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusMethodProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusMethodProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Method_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusMethodPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusMethodPropertyTupleFields
27 {
28 Method_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusMethodPropertyTuple : IntermediateTuple
34 {
35 public ComPlusMethodPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusMethodProperty, null, null)
36 {
37 }
38
39 public ComPlusMethodPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusMethodProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusMethodPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Method_
46 {
47 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Method_].AsString();
48 set => this.Set((int)ComPlusMethodPropertyTupleFields.Method_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusMethodPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusMethodPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusMethodTuple.cs b/src/wixext/Tuples/ComPlusMethodTuple.cs
new file mode 100644
index 00000000..bcca034a
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusMethodTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusMethod = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusMethod.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Method), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Interface_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Index), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusMethodTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusMethodTupleFields
28 {
29 Method,
30 Interface_,
31 Index,
32 Name,
33 }
34
35 public class ComPlusMethodTuple : IntermediateTuple
36 {
37 public ComPlusMethodTuple() : base(ComPlusTupleDefinitions.ComPlusMethod, null, null)
38 {
39 }
40
41 public ComPlusMethodTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusMethod, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusMethodTupleFields index] => this.Fields[(int)index];
46
47 public string Method
48 {
49 get => this.Fields[(int)ComPlusMethodTupleFields.Method].AsString();
50 set => this.Set((int)ComPlusMethodTupleFields.Method, value);
51 }
52
53 public string Interface_
54 {
55 get => this.Fields[(int)ComPlusMethodTupleFields.Interface_].AsString();
56 set => this.Set((int)ComPlusMethodTupleFields.Interface_, value);
57 }
58
59 public int Index
60 {
61 get => this.Fields[(int)ComPlusMethodTupleFields.Index].AsNumber();
62 set => this.Set((int)ComPlusMethodTupleFields.Index, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusMethodTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusMethodTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs b/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs
new file mode 100644
index 00000000..3427b10a
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Partition_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusPartitionPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusPartitionPropertyTupleFields
27 {
28 Partition_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusPartitionPropertyTuple : IntermediateTuple
34 {
35 public ComPlusPartitionPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionProperty, null, null)
36 {
37 }
38
39 public ComPlusPartitionPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusPartitionPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Partition_
46 {
47 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Partition_].AsString();
48 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Partition_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs
new file mode 100644
index 00000000..a2259cc6
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.PartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionRoleTupleFields
28 {
29 PartitionRole,
30 Partition_,
31 Component_,
32 Name,
33 }
34
35 public class ComPlusPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string PartitionRole
48 {
49 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.PartitionRole].AsString();
50 set => this.Set((int)ComPlusPartitionRoleTupleFields.PartitionRole, value);
51 }
52
53 public string Partition_
54 {
55 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Partition_].AsString();
56 set => this.Set((int)ComPlusPartitionRoleTupleFields.Partition_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusPartitionRoleTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionTuple.cs b/src/wixext/Tuples/ComPlusPartitionTuple.cs
new file mode 100644
index 00000000..68de9955
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartition = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartition.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Partition), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.CustomId), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionTupleFields
28 {
29 Partition,
30 Component_,
31 CustomId,
32 Name,
33 }
34
35 public class ComPlusPartitionTuple : IntermediateTuple
36 {
37 public ComPlusPartitionTuple() : base(ComPlusTupleDefinitions.ComPlusPartition, null, null)
38 {
39 }
40
41 public ComPlusPartitionTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartition, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionTupleFields index] => this.Fields[(int)index];
46
47 public string Partition
48 {
49 get => this.Fields[(int)ComPlusPartitionTupleFields.Partition].AsString();
50 set => this.Set((int)ComPlusPartitionTupleFields.Partition, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)ComPlusPartitionTupleFields.Component_].AsString();
56 set => this.Set((int)ComPlusPartitionTupleFields.Component_, value);
57 }
58
59 public string CustomId
60 {
61 get => this.Fields[(int)ComPlusPartitionTupleFields.CustomId].AsString();
62 set => this.Set((int)ComPlusPartitionTupleFields.CustomId, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusPartitionTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusPartitionTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionUserTuple.cs b/src/wixext/Tuples/ComPlusPartitionUserTuple.cs
new file mode 100644
index 00000000..33a58d38
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionUserTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionUser = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionUser.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.PartitionUser), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionUserTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionUserTupleFields
28 {
29 PartitionUser,
30 Partition_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusPartitionUserTuple : IntermediateTuple
36 {
37 public ComPlusPartitionUserTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionUser, null, null)
38 {
39 }
40
41 public ComPlusPartitionUserTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionUser, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionUserTupleFields index] => this.Fields[(int)index];
46
47 public string PartitionUser
48 {
49 get => this.Fields[(int)ComPlusPartitionUserTupleFields.PartitionUser].AsString();
50 set => this.Set((int)ComPlusPartitionUserTupleFields.PartitionUser, value);
51 }
52
53 public string Partition_
54 {
55 get => this.Fields[(int)ComPlusPartitionUserTupleFields.Partition_].AsString();
56 set => this.Set((int)ComPlusPartitionUserTupleFields.Partition_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusPartitionUserTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusPartitionUserTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusPartitionUserTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusPartitionUserTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs b/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs
new file mode 100644
index 00000000..75d8cfaf
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForComponent = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForComponent.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.RoleForComponent), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForComponentTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForComponentTupleFields
28 {
29 RoleForComponent,
30 ComPlusComponent_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForComponentTuple : IntermediateTuple
36 {
37 public ComPlusRoleForComponentTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForComponent, null, null)
38 {
39 }
40
41 public ComPlusRoleForComponentTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForComponent, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForComponentTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForComponent
48 {
49 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.RoleForComponent].AsString();
50 set => this.Set((int)ComPlusRoleForComponentTupleFields.RoleForComponent, value);
51 }
52
53 public string ComPlusComponent_
54 {
55 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.ComPlusComponent_].AsString();
56 set => this.Set((int)ComPlusRoleForComponentTupleFields.ComPlusComponent_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForComponentTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForComponentTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs b/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs
new file mode 100644
index 00000000..139417d3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForInterface = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForInterface.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.RoleForInterface), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.Interface_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForInterfaceTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForInterfaceTupleFields
28 {
29 RoleForInterface,
30 Interface_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForInterfaceTuple : IntermediateTuple
36 {
37 public ComPlusRoleForInterfaceTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForInterface, null, null)
38 {
39 }
40
41 public ComPlusRoleForInterfaceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForInterface, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForInterfaceTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForInterface
48 {
49 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.RoleForInterface].AsString();
50 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.RoleForInterface, value);
51 }
52
53 public string Interface_
54 {
55 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.Interface_].AsString();
56 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.Interface_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs b/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs
new file mode 100644
index 00000000..5b6e994e
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForMethod = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForMethod.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.RoleForMethod), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.Method_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForMethodTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForMethodTupleFields
28 {
29 RoleForMethod,
30 Method_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForMethodTuple : IntermediateTuple
36 {
37 public ComPlusRoleForMethodTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForMethod, null, null)
38 {
39 }
40
41 public ComPlusRoleForMethodTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForMethod, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForMethodTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForMethod
48 {
49 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.RoleForMethod].AsString();
50 set => this.Set((int)ComPlusRoleForMethodTupleFields.RoleForMethod, value);
51 }
52
53 public string Method_
54 {
55 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.Method_].AsString();
56 set => this.Set((int)ComPlusRoleForMethodTupleFields.Method_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForMethodTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForMethodTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs b/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs
new file mode 100644
index 00000000..ad0841f4
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusSubscriptionProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusSubscriptionProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Subscription_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusSubscriptionPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusSubscriptionPropertyTupleFields
27 {
28 Subscription_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusSubscriptionPropertyTuple : IntermediateTuple
34 {
35 public ComPlusSubscriptionPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusSubscriptionProperty, null, null)
36 {
37 }
38
39 public ComPlusSubscriptionPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusSubscriptionProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusSubscriptionPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Subscription_
46 {
47 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Subscription_].AsString();
48 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Subscription_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusSubscriptionTuple.cs b/src/wixext/Tuples/ComPlusSubscriptionTuple.cs
new file mode 100644
index 00000000..fedab172
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusSubscriptionTuple.cs
@@ -0,0 +1,95 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusSubscription = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusSubscription.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Subscription), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.CustomId), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Name), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.EventCLSID), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.PublisherID), IntermediateFieldType.String),
21 },
22 typeof(ComPlusSubscriptionTuple));
23 }
24}
25
26namespace WixToolset.ComPlus.Tuples
27{
28 using WixToolset.Data;
29
30 public enum ComPlusSubscriptionTupleFields
31 {
32 Subscription,
33 ComPlusComponent_,
34 Component_,
35 CustomId,
36 Name,
37 EventCLSID,
38 PublisherID,
39 }
40
41 public class ComPlusSubscriptionTuple : IntermediateTuple
42 {
43 public ComPlusSubscriptionTuple() : base(ComPlusTupleDefinitions.ComPlusSubscription, null, null)
44 {
45 }
46
47 public ComPlusSubscriptionTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusSubscription, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[ComPlusSubscriptionTupleFields index] => this.Fields[(int)index];
52
53 public string Subscription
54 {
55 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Subscription].AsString();
56 set => this.Set((int)ComPlusSubscriptionTupleFields.Subscription, value);
57 }
58
59 public string ComPlusComponent_
60 {
61 get => this.Fields[(int)ComPlusSubscriptionTupleFields.ComPlusComponent_].AsString();
62 set => this.Set((int)ComPlusSubscriptionTupleFields.ComPlusComponent_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusSubscriptionTupleFields.Component_, value);
69 }
70
71 public string CustomId
72 {
73 get => this.Fields[(int)ComPlusSubscriptionTupleFields.CustomId].AsString();
74 set => this.Set((int)ComPlusSubscriptionTupleFields.CustomId, value);
75 }
76
77 public string Name
78 {
79 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Name].AsString();
80 set => this.Set((int)ComPlusSubscriptionTupleFields.Name, value);
81 }
82
83 public string EventCLSID
84 {
85 get => this.Fields[(int)ComPlusSubscriptionTupleFields.EventCLSID].AsString();
86 set => this.Set((int)ComPlusSubscriptionTupleFields.EventCLSID, value);
87 }
88
89 public string PublisherID
90 {
91 get => this.Fields[(int)ComPlusSubscriptionTupleFields.PublisherID].AsString();
92 set => this.Set((int)ComPlusSubscriptionTupleFields.PublisherID, value);
93 }
94 }
95} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusTupleDefinitions.cs b/src/wixext/Tuples/ComPlusTupleDefinitions.cs
new file mode 100644
index 00000000..1019c046
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusTupleDefinitions.cs
@@ -0,0 +1,135 @@
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.ComPlus
4{
5 using System;
6 using WixToolset.Data;
7
8 public enum ComPlusTupleDefinitionType
9 {
10 ComPlusApplication,
11 ComPlusApplicationProperty,
12 ComPlusApplicationRole,
13 ComPlusApplicationRoleProperty,
14 ComPlusAssembly,
15 ComPlusAssemblyDependency,
16 ComPlusComponent,
17 ComPlusComponentProperty,
18 ComPlusGroupInApplicationRole,
19 ComPlusGroupInPartitionRole,
20 ComPlusInterface,
21 ComPlusInterfaceProperty,
22 ComPlusMethod,
23 ComPlusMethodProperty,
24 ComPlusPartition,
25 ComPlusPartitionProperty,
26 ComPlusPartitionRole,
27 ComPlusPartitionUser,
28 ComPlusRoleForComponent,
29 ComPlusRoleForInterface,
30 ComPlusRoleForMethod,
31 ComPlusSubscription,
32 ComPlusSubscriptionProperty,
33 ComPlusUserInApplicationRole,
34 ComPlusUserInPartitionRole,
35 }
36
37 public static partial class ComPlusTupleDefinitions
38 {
39 public static readonly Version Version = new Version("4.0.0");
40
41 public static IntermediateTupleDefinition ByName(string name)
42 {
43 if (!Enum.TryParse(name, out ComPlusTupleDefinitionType type))
44 {
45 return null;
46 }
47
48 return ByType(type);
49 }
50
51 public static IntermediateTupleDefinition ByType(ComPlusTupleDefinitionType type)
52 {
53 switch (type)
54 {
55 case ComPlusTupleDefinitionType.ComPlusApplication:
56 return ComPlusTupleDefinitions.ComPlusApplication;
57
58 case ComPlusTupleDefinitionType.ComPlusApplicationProperty:
59 return ComPlusTupleDefinitions.ComPlusApplicationProperty;
60
61 case ComPlusTupleDefinitionType.ComPlusApplicationRole:
62 return ComPlusTupleDefinitions.ComPlusApplicationRole;
63
64 case ComPlusTupleDefinitionType.ComPlusApplicationRoleProperty:
65 return ComPlusTupleDefinitions.ComPlusApplicationRoleProperty;
66
67 case ComPlusTupleDefinitionType.ComPlusAssembly:
68 return ComPlusTupleDefinitions.ComPlusAssembly;
69
70 case ComPlusTupleDefinitionType.ComPlusAssemblyDependency:
71 return ComPlusTupleDefinitions.ComPlusAssemblyDependency;
72
73 case ComPlusTupleDefinitionType.ComPlusComponent:
74 return ComPlusTupleDefinitions.ComPlusComponent;
75
76 case ComPlusTupleDefinitionType.ComPlusComponentProperty:
77 return ComPlusTupleDefinitions.ComPlusComponentProperty;
78
79 case ComPlusTupleDefinitionType.ComPlusGroupInApplicationRole:
80 return ComPlusTupleDefinitions.ComPlusGroupInApplicationRole;
81
82 case ComPlusTupleDefinitionType.ComPlusGroupInPartitionRole:
83 return ComPlusTupleDefinitions.ComPlusGroupInPartitionRole;
84
85 case ComPlusTupleDefinitionType.ComPlusInterface:
86 return ComPlusTupleDefinitions.ComPlusInterface;
87
88 case ComPlusTupleDefinitionType.ComPlusInterfaceProperty:
89 return ComPlusTupleDefinitions.ComPlusInterfaceProperty;
90
91 case ComPlusTupleDefinitionType.ComPlusMethod:
92 return ComPlusTupleDefinitions.ComPlusMethod;
93
94 case ComPlusTupleDefinitionType.ComPlusMethodProperty:
95 return ComPlusTupleDefinitions.ComPlusMethodProperty;
96
97 case ComPlusTupleDefinitionType.ComPlusPartition:
98 return ComPlusTupleDefinitions.ComPlusPartition;
99
100 case ComPlusTupleDefinitionType.ComPlusPartitionProperty:
101 return ComPlusTupleDefinitions.ComPlusPartitionProperty;
102
103 case ComPlusTupleDefinitionType.ComPlusPartitionRole:
104 return ComPlusTupleDefinitions.ComPlusPartitionRole;
105
106 case ComPlusTupleDefinitionType.ComPlusPartitionUser:
107 return ComPlusTupleDefinitions.ComPlusPartitionUser;
108
109 case ComPlusTupleDefinitionType.ComPlusRoleForComponent:
110 return ComPlusTupleDefinitions.ComPlusRoleForComponent;
111
112 case ComPlusTupleDefinitionType.ComPlusRoleForInterface:
113 return ComPlusTupleDefinitions.ComPlusRoleForInterface;
114
115 case ComPlusTupleDefinitionType.ComPlusRoleForMethod:
116 return ComPlusTupleDefinitions.ComPlusRoleForMethod;
117
118 case ComPlusTupleDefinitionType.ComPlusSubscription:
119 return ComPlusTupleDefinitions.ComPlusSubscription;
120
121 case ComPlusTupleDefinitionType.ComPlusSubscriptionProperty:
122 return ComPlusTupleDefinitions.ComPlusSubscriptionProperty;
123
124 case ComPlusTupleDefinitionType.ComPlusUserInApplicationRole:
125 return ComPlusTupleDefinitions.ComPlusUserInApplicationRole;
126
127 case ComPlusTupleDefinitionType.ComPlusUserInPartitionRole:
128 return ComPlusTupleDefinitions.ComPlusUserInPartitionRole;
129
130 default:
131 throw new ArgumentOutOfRangeException(nameof(type));
132 }
133 }
134 }
135}
diff --git a/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs
new file mode 100644
index 00000000..3916c0ee
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusUserInApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusUserInApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.ApplicationRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusUserInApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusUserInApplicationRoleTupleFields
28 {
29 UserInApplicationRole,
30 ApplicationRole_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusUserInApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusUserInApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusUserInApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusUserInApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusUserInApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusUserInApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string UserInApplicationRole
48 {
49 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole].AsString();
50 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole, value);
51 }
52
53 public string ApplicationRole_
54 {
55 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.ApplicationRole_].AsString();
56 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.ApplicationRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs
new file mode 100644
index 00000000..06d742b8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
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.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusUserInPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusUserInPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.PartitionRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusUserInPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusUserInPartitionRoleTupleFields
28 {
29 UserInPartitionRole,
30 PartitionRole_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusUserInPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusUserInPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusUserInPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusUserInPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusUserInPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusUserInPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string UserInPartitionRole
48 {
49 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole].AsString();
50 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole, value);
51 }
52
53 public string PartitionRole_
54 {
55 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.PartitionRole_].AsString();
56 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.PartitionRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/WixComPlusExtension.csproj b/src/wixext/WixComPlusExtension.csproj
deleted file mode 100644
index 92cbacae..00000000
--- a/src/wixext/WixComPlusExtension.csproj
+++ /dev/null
@@ -1,50 +0,0 @@
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<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6 <PropertyGroup>
7 <ProjectGuid>{1497B777-330B-4CFE-927A-22850CD24D64}</ProjectGuid>
8 <AssemblyName>WixComPlusExtension</AssemblyName>
9 <OutputType>Library</OutputType>
10 <RootNamespace>WixToolset.Extensions</RootNamespace>
11 </PropertyGroup>
12 <ItemGroup>
13 <Compile Include="AssemblyInfo.cs" />
14 <Compile Include="ComPlusCompiler.cs" />
15 <Compile Include="ComPlusDecompiler.cs" />
16 <Compile Include="ComPlusExtensionData.cs" />
17 <MsgGenSource Include="Data\messages.xml">
18 <ResourcesLogicalName>$(RootNamespace).Data.Messages.resources</ResourcesLogicalName>
19 </MsgGenSource>
20 <EmbeddedFlattenedResource Include="Data\tables.xml">
21 <LogicalName>$(RootNamespace).Data.tables.xml</LogicalName>
22 </EmbeddedFlattenedResource>
23 <EmbeddedFlattenedResource Include="Xsd\complus.xsd">
24 <LogicalName>$(RootNamespace).Xsd.complus.xsd</LogicalName>
25 </EmbeddedFlattenedResource>
26 <XsdGenSource Include="Xsd\complus.xsd">
27 <CommonNamespace>WixToolset.Data.Serialize</CommonNamespace>
28 <Namespace>WixToolset.Extensions.Serialize.ComPlus</Namespace>
29 </XsdGenSource>
30 <None Include="Xsd\complus.xsd">
31 <Link>complus.xsd</Link>
32 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
33 </None>
34 <EmbeddedResource Include="$(OutputPath)\complus.wixlib">
35 <Link>Data\complus.wixlib</Link>
36 </EmbeddedResource>
37 </ItemGroup>
38 <ItemGroup>
39 <Reference Include="System" />
40 <Reference Include="System.Xml" />
41 <Reference Include="System.Xml.Linq" />
42 <ProjectReference Include="..\..\..\libs\WixToolset.Data\WixToolset.Data.csproj" />
43 <ProjectReference Include="..\..\..\libs\WixToolset.Extensibility\WixToolset.Extensibility.csproj" />
44 <ProjectReference Include="..\..\..\tools\wix\Wix.csproj" />
45 <ProjectReference Include="..\wixlib\ComPlusExtension.wixproj">
46 <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
47 </ProjectReference>
48 </ItemGroup>
49 <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
50</Project>
diff --git a/src/wixext/WixToolset.ComPlus.wixext.csproj b/src/wixext/WixToolset.ComPlus.wixext.csproj
new file mode 100644
index 00000000..882dc7e1
--- /dev/null
+++ b/src/wixext/WixToolset.ComPlus.wixext.csproj
@@ -0,0 +1,33 @@
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.ComPlus</RootNamespace>
8 <Description>WiX Toolset ComPlus Extension</Description>
9 <Title>WiX Toolset ComPlus Extension</Title>
10 <IsTool>true</IsTool>
11 <ContentTargetFolders>build</ContentTargetFolders>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Content Include="$(MSBuildThisFileName).targets" />
16 <Content Include="complus.xsd" PackagePath="tools" />
17 <EmbeddedResource Include="tables.xml" />
18 <EmbeddedResource Include="$(OutputPath)..\complus.wixlib" />
19 </ItemGroup>
20
21 <ItemGroup>
22 <PackageReference Include="WixToolset.Data" Version="4.0.*" PrivateAssets="all" />
23 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" />
24 </ItemGroup>
25
26 <ItemGroup>
27 <ProjectReference Include="..\wixlib\complus.wixproj" ReferenceOutputAssembly="false" Condition=" '$(NCrunch)'=='' " />
28 </ItemGroup>
29
30 <ItemGroup>
31 <PackageReference Include="Nerdbank.GitVersioning" Version="2.1.65" PrivateAssets="all" />
32 </ItemGroup>
33</Project>
diff --git a/src/wixext/WixToolset.ComPlus.wixext.targets b/src/wixext/WixToolset.ComPlus.wixext.targets
new file mode 100644
index 00000000..8115b715
--- /dev/null
+++ b/src/wixext/WixToolset.ComPlus.wixext.targets
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
5 <PropertyGroup>
6 <WixToolsetComPlusWixextPath Condition=" '$(WixToolsetComPlusWixextPath)' == '' ">$(MSBuildThisFileDirectory)..\tools\WixToolset.ComPlus.wixext.dll</WixToolsetComPlusWixextPath>
7 </PropertyGroup>
8 <ItemGroup>
9 <WixExtension Include="$(WixToolsetComPlusWixextPath)" />
10 </ItemGroup>
11</Project>
diff --git a/src/wixext/messages.xml b/src/wixext/messages.xml
deleted file mode 100644
index 66c0a9e6..00000000
--- a/src/wixext/messages.xml
+++ /dev/null
@@ -1,77 +0,0 @@
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="ComPlusErrors" ContainerName="ComPlusErrorEventArgs" BaseContainerName="MessageEventArgs">
7 <Message Id="IllegalAttributeWithoutComponent" Number="6000">
8 <Instance>
9 The {0}/@{1} attribute cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.
10 <Parameter Type="System.String" Name="elementName" />
11 <Parameter Type="System.String" Name="attributeName" />
12 </Instance>
13 </Message>
14 <Message Id="IllegalElementWithoutComponent" Number="6001">
15 <Instance>
16 The {0} element cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.
17 <Parameter Type="System.String" Name="elementName" />
18 </Instance>
19 </Message>
20 <Message Id="UnexpectedAttributeWithOtherValue" Number="6002">
21 <Instance>
22 The {0}/@{1} attribute cannot coexist with the {2} attribute's value of '{3}'.
23 <Parameter Type="System.String" Name="elementName" />
24 <Parameter Type="System.String" Name="attributeName" />
25 <Parameter Type="System.String" Name="otherAttributeName" />
26 <Parameter Type="System.String" Name="otherValue" />
27 </Instance>
28 <Instance>
29 The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'.
30 <Parameter Type="System.String" Name="elementName" />
31 <Parameter Type="System.String" Name="attributeName" />
32 <Parameter Type="System.String" Name="value" />
33 <Parameter Type="System.String" Name="otherAttributeName" />
34 <Parameter Type="System.String" Name="otherValue" />
35 </Instance>
36 </Message>
37 <Message Id="UnexpectedAttributeWithoutOtherValue" Number="6003">
38 <Instance>
39 The {0}/@{1} cannot be provided unless the {2} attribute is provided with a value of '{3}'.
40 <Parameter Type="System.String" Name="elementName" />
41 <Parameter Type="System.String" Name="attributeName" />
42 <Parameter Type="System.String" Name="otherAttributeName" />
43 <Parameter Type="System.String" Name="otherValue" />
44 </Instance>
45 </Message>
46 <Message Id="RequiredAttributeUnderComponent" Number="6004">
47 <Instance>
48 The {0}/@{1} attribute must be provided when {0} element is nested under a component.
49 <Parameter Type="System.String" Name="elementName" />
50 <Parameter Type="System.String" Name="attributeName" />
51 </Instance>
52 </Message>
53 <Message Id="RequiredAttribute" Number="6005">
54 <Instance>
55 A {0} element must have either a {1} attribute or a {2} attribute, or both set.
56 <Parameter Type="System.String" Name="elementName" />
57 <Parameter Type="System.String" Name="attributeName1" />
58 <Parameter Type="System.String" Name="attributeName2" />
59 </Instance>
60 </Message>
61 <Message Id="RequiredAttributeNotUnderComponent" Number="6006">
62 <Instance>
63 A {0} element not nested under a component must have either a {1} attribute or a {2} attribute, or both set.
64 <Parameter Type="System.String" Name="elementName" />
65 <Parameter Type="System.String" Name="attributeName1" />
66 <Parameter Type="System.String" Name="attributeName2" />
67 </Instance>
68 </Message>
69 </Class>
70 <Class Name="ComPlusWarnings" ContainerName="ComPlusWarningEventArgs" BaseContainerName="MessageEventArgs">
71 <Message Id="MissingComponents" Number="6007">
72 <Instance>The ComPlusAssembly element has a Type attribute with a value of 'native', but the element does not contain any ComPlusComponent elements. All components contained in a native assembly must be listed, or they will not be correctly removed during uninstall.</Instance>
73 </Message>
74 </Class>
75 <Class Name="ComPlusVerboses" ContainerName="ComPlusVerboseEventArgs" BaseContainerName="MessageEventArgs">
76 </Class>
77</Messages>
diff --git a/src/wixlib/ComPlusExtension.wixproj b/src/wixlib/ComPlusExtension.wixproj
deleted file mode 100644
index 49c688cd..00000000
--- a/src/wixlib/ComPlusExtension.wixproj
+++ /dev/null
@@ -1,26 +0,0 @@
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<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6 <PropertyGroup>
7 <ProjectGuid>{E191E61E-E098-4F71-888F-51A79F952022}</ProjectGuid>
8 <OutputName>complus</OutputName>
9 <OutputType>Library</OutputType>
10 <BindFiles>true</BindFiles>
11 <SuppressSpecificWarnings>1086</SuppressSpecificWarnings>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Compile Include="ComPlusExtension.wxs" />
16 <EmbeddedResource Include="en-us.wxl" />
17 <EmbeddedResource Include="es-es.wxl" />
18 <EmbeddedResource Include="ja-jp.wxl" />
19 </ItemGroup>
20
21 <ItemGroup>
22 <ProjectReference Include="..\ca\complusca.proj" />
23 </ItemGroup>
24
25 <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
26</Project>
diff --git a/src/wixlib/ComPlusExtension.wxs b/src/wixlib/ComPlusExtension.wxs
index 3a5c1512..2a5710c0 100644
--- a/src/wixlib/ComPlusExtension.wxs
+++ b/src/wixlib/ComPlusExtension.wxs
@@ -60,19 +60,19 @@
60 <Fragment> 60 <Fragment>
61 <UIRef Id="ComPlusUI" /> 61 <UIRef Id="ComPlusUI" />
62 62
63 <CustomAction Id="ConfigureComPlusInstall" BinaryKey="WixCPSched_x86" DllEntry="ConfigureComPlusInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 63 <CustomAction Id="ConfigureComPlusInstall" BinaryKey="ComPlusCA_x86" DllEntry="ConfigureComPlusInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
64 <CustomAction Id="ConfigureComPlusUninstall" BinaryKey="WixCPSched_x86" DllEntry="ConfigureComPlusUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 64 <CustomAction Id="ConfigureComPlusUninstall" BinaryKey="ComPlusCA_x86" DllEntry="ConfigureComPlusUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
65 <CustomAction Id="ComPlusInstallPrepare" BinaryKey="WixCPExec_x86" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 65 <CustomAction Id="ComPlusInstallPrepare" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
66 <CustomAction Id="ComPlusRollbackInstallPrepare" BinaryKey="WixCPExec_x86" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 66 <CustomAction Id="ComPlusRollbackInstallPrepare" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
67 <CustomAction Id="ComPlusInstallExecute" BinaryKey="WixCPExec_x86" DllEntry="ComPlusInstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 67 <CustomAction Id="ComPlusInstallExecute" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusInstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
68 <CustomAction Id="ComPlusInstallExecuteCommit" BinaryKey="WixCPExec_x86" DllEntry="ComPlusInstallExecuteCommit" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 68 <CustomAction Id="ComPlusInstallExecuteCommit" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusInstallExecuteCommit" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
69 <CustomAction Id="ComPlusRollbackInstallExecute" BinaryKey="WixCPExec_x86" DllEntry="ComPlusRollbackInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 69 <CustomAction Id="ComPlusRollbackInstallExecute" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusRollbackInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
70 <CustomAction Id="ComPlusInstallCommit" BinaryKey="WixCPExec_x86" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 70 <CustomAction Id="ComPlusInstallCommit" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
71 <CustomAction Id="ComPlusUninstallPrepare" BinaryKey="WixCPExec_x86" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 71 <CustomAction Id="ComPlusUninstallPrepare" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
72 <CustomAction Id="ComPlusRollbackUninstallPrepare" BinaryKey="WixCPExec_x86" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 72 <CustomAction Id="ComPlusRollbackUninstallPrepare" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
73 <CustomAction Id="ComPlusUninstallExecute" BinaryKey="WixCPExec_x86" DllEntry="ComPlusUninstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 73 <CustomAction Id="ComPlusUninstallExecute" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusUninstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
74 <CustomAction Id="ComPlusRollbackUninstallExecute" BinaryKey="WixCPExec_x86" DllEntry="ComPlusInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 74 <CustomAction Id="ComPlusRollbackUninstallExecute" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
75 <CustomAction Id="ComPlusUninstallCommit" BinaryKey="WixCPExec_x86" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 75 <CustomAction Id="ComPlusUninstallCommit" BinaryKey="ComPlusCA_x86" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
76 76
77 <Property Id="ComPlusInstallPrepare" Hidden="yes" SuppressModularization="yes" /> 77 <Property Id="ComPlusInstallPrepare" Hidden="yes" SuppressModularization="yes" />
78 <Property Id="ComPlusRollbackInstallPrepare" Hidden="yes" SuppressModularization="yes" /> 78 <Property Id="ComPlusRollbackInstallPrepare" Hidden="yes" SuppressModularization="yes" />
@@ -95,19 +95,19 @@
95 <Fragment> 95 <Fragment>
96 <UIRef Id="ComPlusUI" /> 96 <UIRef Id="ComPlusUI" />
97 97
98 <CustomAction Id="ConfigureComPlusInstall_x64" BinaryKey="WixCPSched_x64" DllEntry="ConfigureComPlusInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 98 <CustomAction Id="ConfigureComPlusInstall_x64" BinaryKey="ComPlusCA_x64" DllEntry="ConfigureComPlusInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
99 <CustomAction Id="ConfigureComPlusUninstall_x64" BinaryKey="WixCPSched_x64" DllEntry="ConfigureComPlusUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 99 <CustomAction Id="ConfigureComPlusUninstall_x64" BinaryKey="ComPlusCA_x64" DllEntry="ConfigureComPlusUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
100 <CustomAction Id="ComPlusInstallPrepare_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 100 <CustomAction Id="ComPlusInstallPrepare_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
101 <CustomAction Id="ComPlusRollbackInstallPrepare_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 101 <CustomAction Id="ComPlusRollbackInstallPrepare_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
102 <CustomAction Id="ComPlusInstallExecute_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusInstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 102 <CustomAction Id="ComPlusInstallExecute_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusInstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
103 <CustomAction Id="ComPlusInstallExecuteCommit_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusInstallExecuteCommit" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 103 <CustomAction Id="ComPlusInstallExecuteCommit_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusInstallExecuteCommit" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
104 <CustomAction Id="ComPlusRollbackInstallExecute_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusRollbackInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 104 <CustomAction Id="ComPlusRollbackInstallExecute_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusRollbackInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
105 <CustomAction Id="ComPlusInstallCommit_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 105 <CustomAction Id="ComPlusInstallCommit_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
106 <CustomAction Id="ComPlusUninstallPrepare_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 106 <CustomAction Id="ComPlusUninstallPrepare_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusPrepare" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
107 <CustomAction Id="ComPlusRollbackUninstallPrepare_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 107 <CustomAction Id="ComPlusRollbackUninstallPrepare_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusCleanup" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
108 <CustomAction Id="ComPlusUninstallExecute_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusUninstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 108 <CustomAction Id="ComPlusUninstallExecute_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusUninstallExecute" Execute="deferred" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
109 <CustomAction Id="ComPlusRollbackUninstallExecute_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 109 <CustomAction Id="ComPlusRollbackUninstallExecute_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusInstallExecute" Execute="rollback" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
110 <CustomAction Id="ComPlusUninstallCommit_64" BinaryKey="WixCPExec_x64" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" /> 110 <CustomAction Id="ComPlusUninstallCommit_64" BinaryKey="ComPlusCA_x64" DllEntry="ComPlusCleanup" Execute="commit" Return="check" Impersonate="no" HideTarget="yes" SuppressModularization="yes" />
111 111
112 <Property Id="ComPlusInstallPrepare_64" Hidden="yes" SuppressModularization="yes" /> 112 <Property Id="ComPlusInstallPrepare_64" Hidden="yes" SuppressModularization="yes" />
113 <Property Id="ComPlusRollbackInstallPrepare_64" Hidden="yes" SuppressModularization="yes" /> 113 <Property Id="ComPlusRollbackInstallPrepare_64" Hidden="yes" SuppressModularization="yes" />
@@ -128,12 +128,10 @@
128 </Fragment> 128 </Fragment>
129 129
130 <Fragment> 130 <Fragment>
131 <Binary Id="WixCPExec_x86" SourceFile="!(bindpath.x86)\cpexec.dll"/> 131 <Binary Id="ComPlusCA_x86" SourceFile="!(bindpath.x86)complusca.dll"/>
132 <Binary Id="WixCPSched_x86" SourceFile="!(bindpath.x86)\cpsched.dll"/>
133 </Fragment> 132 </Fragment>
134 133
135 <Fragment> 134 <Fragment>
136 <Binary Id="WixCPExec_x64" SourceFile="!(bindpath.x64)\cpexec.dll"/> 135 <Binary Id="ComPlusCA_x64" SourceFile="!(bindpath.x64)complusca.dll"/>
137 <Binary Id="WixCPSched_x64" SourceFile="!(bindpath.x64)\cpsched.dll"/>
138 </Fragment> 136 </Fragment>
139</Wix> 137</Wix>
diff --git a/src/wixlib/caerr.wxi b/src/wixlib/caerr.wxi
new file mode 100644
index 00000000..141942f2
--- /dev/null
+++ b/src/wixlib/caerr.wxi
@@ -0,0 +1,96 @@
1<Include>
2 <?define msierrSecureObjectsFailedCreateSD = 25520?>
3 <?define msierrSecureObjectsFailedSet = 25521?>
4 <?define msierrSecureObjectsUnknownType = 25522?>
5 <?define msierrXmlFileFailedRead = 25530?>
6 <?define msierrXmlFileFailedOpen = 25531?>
7 <?define msierrXmlFileFailedSelect = 25532?>
8 <?define msierrXmlFileFailedSave = 25533?>
9 <?define msierrXmlConfigFailedRead = 25540?>
10 <?define msierrXmlConfigFailedOpen = 25541?>
11 <?define msierrXmlConfigFailedSelect = 25542?>
12 <?define msierrXmlConfigFailedSave = 25543?>
13 <?define msierrFirewallCannotConnect = 25580?>
14 <?define msierrIISCannotConnect = 26001?>
15 <?define msierrIISFailedReadWebSite = 26002?>
16 <?define msierrIISFailedReadWebDirs = 26003?>
17 <?define msierrIISFailedReadVDirs = 26004?>
18 <?define msierrIISFailedReadFilters = 26005?>
19 <?define msierrIISFailedReadAppPool = 26006?>
20 <?define msierrIISFailedReadMimeMap = 26007?>
21 <?define msierrIISFailedReadProp = 26008?>
22 <?define msierrIISFailedReadWebSvcExt = 26009?>
23 <?define msierrIISFailedReadWebError = 26010?>
24 <?define msierrIISFailedReadHttpHeader = 26011?>
25 <?define msierrIISFailedSchedTransaction = 26031?>
26 <?define msierrIISFailedSchedInstallWebs = 26032?>
27 <?define msierrIISFailedSchedInstallWebDirs = 26033?>
28 <?define msierrIISFailedSchedInstallVDirs = 26034?>
29 <?define msierrIISFailedSchedInstallFilters = 26035?>
30 <?define msierrIISFailedSchedInstallAppPool = 26036?>
31 <?define msierrIISFailedSchedInstallProp = 26037?>
32 <?define msierrIISFailedSchedInstallWebSvcExt = 26038?>
33 <?define msierrIISFailedSchedUninstallWebs = 26051?>
34 <?define msierrIISFailedSchedUninstallWebDirs = 26052?>
35 <?define msierrIISFailedSchedUninstallVDirs = 26053?>
36 <?define msierrIISFailedSchedUninstallFilters = 26054?>
37 <?define msierrIISFailedSchedUninstallAppPool = 26055?>
38 <?define msierrIISFailedSchedUninstallProp = 26056?>
39 <?define msierrIISFailedSchedUninstallWebSvcExt = 26057?>
40 <?define msierrIISFailedStartTransaction = 26101?>
41 <?define msierrIISFailedOpenKey = 26102?>
42 <?define msierrIISFailedCreateKey = 26103?>
43 <?define msierrIISFailedWriteData = 26104?>
44 <?define msierrIISFailedCreateApp = 26105?>
45 <?define msierrIISFailedDeleteKey = 26106?>
46 <?define msierrIISFailedDeleteApp = 26107?>
47 <?define msierrIISFailedDeleteValue = 26108?>
48 <?define msierrIISFailedCommitInUse = 26109?>
49 <?define msierrSQLFailedCreateDatabase = 26201?>
50 <?define msierrSQLFailedDropDatabase = 26202?>
51 <?define msierrSQLFailedConnectDatabase = 26203?>
52 <?define msierrSQLFailedExecString = 26204?>
53 <?define msierrSQLDatabaseAlreadyExists = 26205?>
54 <?define msierrPERFMONFailedRegisterDLL = 26251?>
55 <?define msierrPERFMONFailedUnregisterDLL = 26252?>
56 <?define msierrInstallPerfCounterData = 26253?>
57 <?define msierrUninstallPerfCounterData = 26254?>
58 <?define msierrSMBFailedCreate = 26301?>
59 <?define msierrSMBFailedDrop = 26302?>
60 <?define msierrCERTFailedOpen = 26351?>
61 <?define msierrCERTFailedAdd = 26352?>
62 <?define msierrUSRFailedUserCreate = 26401?>
63 <?define msierrUSRFailedUserCreatePswd = 26402?>
64 <?define msierrUSRFailedUserGroupAdd = 26403?>
65 <?define msierrUSRFailedUserCreateExists = 26404?>
66 <?define msierrUSRFailedGrantLogonAsService = 26405?>
67 <?define msierrDependencyMissingDependencies = 26451?>
68 <?define msierrDependencyHasDependents = 26452?>
69 <?define msierrDotNetRuntimeRequired = 27000?>
70 <?define msierrComPlusCannotConnect = 28001?>
71 <?define msierrComPlusPartitionReadFailed = 28002?>
72 <?define msierrComPlusPartitionRoleReadFailed = 28003?>
73 <?define msierrComPlusUserInPartitionRoleReadFailed = 28004?>
74 <?define msierrComPlusPartitionUserReadFailed = 28005?>
75 <?define msierrComPlusApplicationReadFailed = 28006?>
76 <?define msierrComPlusApplicationRoleReadFailed = 28007?>
77 <?define msierrComPlusUserInApplicationRoleReadFailed = 28008?>
78 <?define msierrComPlusAssembliesReadFailed = 28009?>
79 <?define msierrComPlusSubscriptionReadFailed = 28010?>
80 <?define msierrComPlusPartitionDependency = 28011?>
81 <?define msierrComPlusPartitionNotFound = 28012?>
82 <?define msierrComPlusPartitionIdConflict = 28013?>
83 <?define msierrComPlusPartitionNameConflict = 28014?>
84 <?define msierrComPlusApplicationDependency = 28015?>
85 <?define msierrComPlusApplicationNotFound = 28016?>
86 <?define msierrComPlusApplicationIdConflict = 28017?>
87 <?define msierrComPlusApplicationNameConflict = 28018?>
88 <?define msierrComPlusApplicationRoleDependency = 28019?>
89 <?define msierrComPlusApplicationRoleNotFound = 28020?>
90 <?define msierrComPlusApplicationRoleConflict = 28021?>
91 <?define msierrComPlusAssemblyDependency = 28022?>
92 <?define msierrComPlusSubscriptionIdConflict = 28023?>
93 <?define msierrComPlusSubscriptionNameConflict = 28024?>
94 <?define msierrComPlusFailedLookupNames = 28025?>
95 <?define msierrMsmqCannotConnect = 28101?>
96</Include> \ No newline at end of file
diff --git a/src/wixlib/complus.wixproj b/src/wixlib/complus.wixproj
new file mode 100644
index 00000000..2384eb47
--- /dev/null
+++ b/src/wixlib/complus.wixproj
@@ -0,0 +1,36 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3<Project DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
4 <Import Project="..\..\packages\WixToolset.MSBuild.4.0.0-build-0042\build\WixToolset.MSBuild.props" Condition="Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0042\build\WixToolset.MSBuild.props')" />
5 <Import Project="..\FindLocalWix.props" />
6 <PropertyGroup>
7 <ProjectGuid>{E191E61E-E098-4F71-888F-51A79F952022}</ProjectGuid>
8 <OutputName>complus</OutputName>
9 <OutputType>Library</OutputType>
10 <BindFiles>true</BindFiles>
11 <SuppressSpecificWarnings>1086</SuppressSpecificWarnings>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Compile Include="ComPlusExtension.wxs" />
16 <EmbeddedResource Include="en-us.wxl" />
17 <EmbeddedResource Include="es-es.wxl" />
18 <EmbeddedResource Include="ja-jp.wxl" />
19 </ItemGroup>
20 <ItemGroup>
21 <None Include="packages.config" />
22 </ItemGroup>
23 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " />
24 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets') " />
25 <Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
26 <Error Text="WiX Toolset build tools (v4.0 or later) must be installed to build this project. To download the WiX Toolset, go to http://wixtoolset.org/releases/." />
27 </Target>
28 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
29 <PropertyGroup>
30 <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>
31 </PropertyGroup>
32 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
33 <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0042\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0042\build\WixToolset.MSBuild.props'))" />
34 </Target>
35 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" />
36</Project>
diff --git a/src/wixlib/packages.config b/src/wixlib/packages.config
new file mode 100644
index 00000000..209dd820
--- /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.1.65" developmentDependency="true" targetFramework="net40" />
4 <package id="WixToolset.MSBuild" version="4.0.0-build-0042" developmentDependency="true" targetFramework="net40" />
5</packages> \ No newline at end of file
diff --git a/version.json b/version.json
new file mode 100644
index 00000000..5f857771
--- /dev/null
+++ b/version.json
@@ -0,0 +1,11 @@
1{
2 "version": "4.0",
3 "publicReleaseRefSpec": [
4 "^refs/heads/master$"
5 ],
6 "cloudBuild": {
7 "buildNumber": {
8 "enabled": true
9 }
10 }
11}