aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2020-07-04 19:06:57 -0400
committerBob Arnson <bob@firegiant.com>2020-07-04 19:09:21 -0400
commit4082ae7f94346a8db77638ab8f0e06513a53c73a (patch)
treea624ca8ea9cfd2c1e3e253d9c352c7b54f273704
parente2567d00aa073a08f6202d913606857f085b6d52 (diff)
downloadwix-4082ae7f94346a8db77638ab8f0e06513a53c73a.tar.gz
wix-4082ae7f94346a8db77638ab8f0e06513a53c73a.tar.bz2
wix-4082ae7f94346a8db77638ab8f0e06513a53c73a.zip
Add per-platform custom action support.
-rw-r--r--Iis.wixext.sln5
-rw-r--r--src/ca/caDecor.h13
-rw-r--r--src/ca/caSuffix.h11
-rw-r--r--src/ca/iisca.vcxproj46
-rw-r--r--src/ca/precomp.h2
-rw-r--r--src/ca/scacert.cpp14
-rw-r--r--src/ca/scacertexec.cpp2
-rw-r--r--src/ca/scahttpheader.cpp2
-rw-r--r--src/ca/scaiis.cpp6
-rw-r--r--src/ca/scaiis7.cpp6
-rw-r--r--src/ca/scasched.cpp8
-rw-r--r--src/wixext/IIsCompiler.cs7
-rw-r--r--src/wixlib/IIsExtension_Platform.wxi70
-rw-r--r--src/wixlib/IIsExtension_arm.wxs8
-rw-r--r--src/wixlib/IIsExtension_arm64.wxs8
-rw-r--r--src/wixlib/IIsExtension_x64.wxs8
-rw-r--r--src/wixlib/caDecor.wxi40
-rw-r--r--src/wixlib/caSuffix.wxi28
-rw-r--r--src/wixlib/iis.wixproj5
19 files changed, 175 insertions, 114 deletions
diff --git a/Iis.wixext.sln b/Iis.wixext.sln
index 7757702f..85323fde 100644
--- a/Iis.wixext.sln
+++ b/Iis.wixext.sln
@@ -1,7 +1,7 @@
1 1
2Microsoft Visual Studio Solution File, Format Version 12.00 2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15 3# Visual Studio Version 16
4VisualStudioVersion = 15.0.28010.2016 4VisualStudioVersion = 16.0.30204.135
5MinimumVisualStudioVersion = 10.0.40219.1 5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iisca", "src\ca\iisca.vcxproj", "{CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}" 6Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iisca", "src\ca\iisca.vcxproj", "{CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}"
7EndProject 7EndProject
@@ -20,6 +20,7 @@ Global
20 EndGlobalSection 20 EndGlobalSection
21 GlobalSection(ProjectConfigurationPlatforms) = postSolution 21 GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|Any CPU.ActiveCfg = Debug|Win32 22 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|Any CPU.ActiveCfg = Debug|Win32
23 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|Any CPU.Build.0 = Debug|Win32
23 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|x86.ActiveCfg = Debug|Win32 24 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|x86.ActiveCfg = Debug|Win32
24 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|x86.Build.0 = Debug|Win32 25 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Debug|x86.Build.0 = Debug|Win32
25 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Release|Any CPU.ActiveCfg = Release|Win32 26 {CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}.Release|Any CPU.ActiveCfg = Release|Win32
diff --git a/src/ca/caDecor.h b/src/ca/caDecor.h
new file mode 100644
index 00000000..da274650
--- /dev/null
+++ b/src/ca/caDecor.h
@@ -0,0 +1,13 @@
1#pragma once
2// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5#if defined(_M_ARM64)
6#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_A64"
7#elif defined(_M_AMD64)
8#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X64"
9#elif defined(_M_ARM)
10#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_ARM"
11#else
12#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X86"
13#endif
diff --git a/src/ca/caSuffix.h b/src/ca/caSuffix.h
deleted file mode 100644
index 303a99e9..00000000
--- a/src/ca/caSuffix.h
+++ /dev/null
@@ -1,11 +0,0 @@
1#pragma once
2// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5#if defined _WIN64
6#define PLATFORM_DECORATION(f) f L"_64"
7#elif defined ARM
8#define PLATFORM_DECORATION(f) f L"_ARM"
9#else
10#define PLATFORM_DECORATION(f) f
11#endif
diff --git a/src/ca/iisca.vcxproj b/src/ca/iisca.vcxproj
index 893130ed..4361b658 100644
--- a/src/ca/iisca.vcxproj
+++ b/src/ca/iisca.vcxproj
@@ -1,6 +1,5 @@
1<?xml version="1.0" encoding="utf-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. --> 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"> 3<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 <Import Project="..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props')" /> 4 <Import Project="..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props')" />
6 <Import Project="..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props')" /> 5 <Import Project="..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props')" />
@@ -14,25 +13,50 @@
14 <Configuration>Release</Configuration> 13 <Configuration>Release</Configuration>
15 <Platform>Win32</Platform> 14 <Platform>Win32</Platform>
16 </ProjectConfiguration> 15 </ProjectConfiguration>
16 <ProjectConfiguration Include="Debug|x64">
17 <Configuration>Debug</Configuration>
18 <Platform>x64</Platform>
19 </ProjectConfiguration>
20 <ProjectConfiguration Include="Release|x64">
21 <Configuration>Release</Configuration>
22 <Platform>x64</Platform>
23 </ProjectConfiguration>
24 <ProjectConfiguration Include="Debug|ARM">
25 <Configuration>Debug</Configuration>
26 <Platform>ARM</Platform>
27 </ProjectConfiguration>
28 <ProjectConfiguration Include="Release|ARM">
29 <Configuration>Release</Configuration>
30 <Platform>ARM</Platform>
31 </ProjectConfiguration>
32 <ProjectConfiguration Include="Debug|ARM64">
33 <Configuration>Debug</Configuration>
34 <Platform>ARM64</Platform>
35 </ProjectConfiguration>
36 <ProjectConfiguration Include="Release|ARM64">
37 <Configuration>Release</Configuration>
38 <Platform>ARM64</Platform>
39 </ProjectConfiguration>
17 </ItemGroup> 40 </ItemGroup>
18 41
19 <PropertyGroup Label="Globals"> 42 <PropertyGroup Label="Globals">
20 <ProjectGuid>{CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}</ProjectGuid> 43 <ProjectGuid>{CB3FB8C4-14BF-4EA6-9F01-7FB258E5AEF3}</ProjectGuid>
21 <ConfigurationType>DynamicLibrary</ConfigurationType> 44 <ConfigurationType>DynamicLibrary</ConfigurationType>
22 <TargetName>iisca</TargetName> 45 <TargetName>iisca</TargetName>
23 <PlatformToolset>v141</PlatformToolset> 46 <PlatformToolset>v142</PlatformToolset>
24 <CharacterSet>Unicode</CharacterSet> 47 <CharacterSet>Unicode</CharacterSet>
25 <ProjectModuleDefinitionFile>iisca.def</ProjectModuleDefinitionFile> 48 <ProjectModuleDefinitionFile>iisca.def</ProjectModuleDefinitionFile>
26 <Description>WiX Toolset Iis CustomAction</Description> 49 <Description>WiX Toolset Iis CustomAction</Description>
50 <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
27 </PropertyGroup> 51 </PropertyGroup>
28 52
29 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 53 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
30 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> 54 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31 55
32 <PropertyGroup> 56 <PropertyGroup>
33 <ProjectAdditionalLinkLibraries>crypt32.lib;msi.lib;Ws2_32.lib</ProjectAdditionalLinkLibraries> 57 <ProjectAdditionalLinkLibraries>crypt32.lib;msi.lib;Ws2_32.lib</ProjectAdditionalLinkLibraries>
34 </PropertyGroup> 58 </PropertyGroup>
35 59
36 <ItemGroup> 60 <ItemGroup>
37 <ClCompile Include="dllmain.cpp"> 61 <ClCompile Include="dllmain.cpp">
38 <PrecompiledHeader>Create</PrecompiledHeader> 62 <PrecompiledHeader>Create</PrecompiledHeader>
@@ -76,9 +100,6 @@
76 <ClCompile Include="scawebprop7.cpp" /> 100 <ClCompile Include="scawebprop7.cpp" />
77 <ClCompile Include="scawebsvcext.cpp" /> 101 <ClCompile Include="scawebsvcext.cpp" />
78 <ClCompile Include="scawebsvcext7.cpp" /> 102 <ClCompile Include="scawebsvcext7.cpp" />
79 </ItemGroup>
80
81 <ItemGroup>
82 <ClInclude Include="caSuffix.h" /> 103 <ClInclude Include="caSuffix.h" />
83 <ClInclude Include="CustomMsiErrors.h" /> 104 <ClInclude Include="CustomMsiErrors.h" />
84 <ClInclude Include="precomp.h" /> 105 <ClInclude Include="precomp.h" />
@@ -119,15 +140,12 @@
119 <ClInclude Include="scawebprop7.h" /> 140 <ClInclude Include="scawebprop7.h" />
120 <ClInclude Include="scawebsvcext.h" /> 141 <ClInclude Include="scawebsvcext.h" />
121 <ClInclude Include="scawebsvcext7.h" /> 142 <ClInclude Include="scawebsvcext7.h" />
122 </ItemGroup>
123
124 <ItemGroup>
125 <None Include="packages.config" /> 143 <None Include="packages.config" />
126 <None Include="iisca.def" /> 144 <None Include="iisca.def" />
127 </ItemGroup> 145 </ItemGroup>
128 146
129 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 147 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
130 148
131 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 149 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
132 <PropertyGroup> 150 <PropertyGroup>
133 <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> 151 <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>
@@ -135,4 +153,4 @@
135 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props'))" /> 153 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.30\build\WixToolset.DUtil.props'))" />
136 <Error Condition="!Exists('..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props'))" /> 154 <Error Condition="!Exists('..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.WcaUtil.4.0.16\build\WixToolset.WcaUtil.props'))" />
137 </Target> 155 </Target>
138</Project> 156</Project> \ No newline at end of file
diff --git a/src/ca/precomp.h b/src/ca/precomp.h
index c797ce82..85ee0890 100644
--- a/src/ca/precomp.h
+++ b/src/ca/precomp.h
@@ -63,4 +63,4 @@
63#include "scassl7.h" 63#include "scassl7.h"
64#include "scaexecIIS7.h" 64#include "scaexecIIS7.h"
65 65
66#include "caSuffix.h" 66#include "caDecor.h"
diff --git a/src/ca/scacert.cpp b/src/ca/scacert.cpp
index 90db6375..cf979ee7 100644
--- a/src/ca/scacert.cpp
+++ b/src/ca/scacert.cpp
@@ -165,7 +165,7 @@ static HRESULT ConfigureCertificates(
165 165
166 BYTE* pbCertificate = NULL; 166 BYTE* pbCertificate = NULL;
167 DWORD cbCertificate = 0; 167 DWORD cbCertificate = 0;
168 DWORD cbPFXPassword = 0; 168 DWORD_PTR cbPFXPassword = 0;
169 169
170 // Bail quickly if the Certificate table isn't around. 170 // Bail quickly if the Certificate table isn't around.
171 if (S_OK != WcaTableExists(L"Certificate")) 171 if (S_OK != WcaTableExists(L"Certificate"))
@@ -273,7 +273,7 @@ static HRESULT ConfigureCertificates(
273 // Pick the right action to run based on what store we're uninstalling from. 273 // Pick the right action to run based on what store we're uninstalling from.
274 if (CERT_SYSTEM_STORE_LOCAL_MACHINE == dwStoreLocation) 274 if (CERT_SYSTEM_STORE_LOCAL_MACHINE == dwStoreLocation)
275 { 275 {
276 wzAction = L"DeleteMachineCertificate"; 276 wzAction = CUSTOM_ACTION_DECORATION(L"DeleteMachineCertificate");
277 if (pbCertificate) 277 if (pbCertificate)
278 { 278 {
279 wzRollbackAction = L"RollbackDeleteMachineCertificate"; 279 wzRollbackAction = L"RollbackDeleteMachineCertificate";
@@ -281,7 +281,7 @@ static HRESULT ConfigureCertificates(
281 } 281 }
282 else 282 else
283 { 283 {
284 wzAction = L"DeleteUserCertificate"; 284 wzAction = CUSTOM_ACTION_DECORATION(L"DeleteUserCertificate");
285 if (pbCertificate) 285 if (pbCertificate)
286 { 286 {
287 wzRollbackAction = L"RollbackDeleteUserCertificate"; 287 wzRollbackAction = L"RollbackDeleteUserCertificate";
@@ -304,13 +304,13 @@ static HRESULT ConfigureCertificates(
304 // Pick the right action to run based on what store we're installing into. 304 // Pick the right action to run based on what store we're installing into.
305 if (CERT_SYSTEM_STORE_LOCAL_MACHINE == dwStoreLocation) 305 if (CERT_SYSTEM_STORE_LOCAL_MACHINE == dwStoreLocation)
306 { 306 {
307 wzAction = L"AddMachineCertificate"; 307 wzAction = CUSTOM_ACTION_DECORATION(L"AddMachineCertificate");
308 wzRollbackAction = L"RollbackAddMachineCertificate"; 308 wzRollbackAction = CUSTOM_ACTION_DECORATION(L"RollbackAddMachineCertificate");
309 } 309 }
310 else 310 else
311 { 311 {
312 wzAction = L"AddUserCertificate"; 312 wzAction = CUSTOM_ACTION_DECORATION(L"AddUserCertificate");
313 wzRollbackAction = L"RollbackAddUserCertificate"; 313 wzRollbackAction = CUSTOM_ACTION_DECORATION(L"RollbackAddUserCertificate");
314 } 314 }
315 dwCost = COST_CERT_ADD; 315 dwCost = COST_CERT_ADD;
316 } 316 }
diff --git a/src/ca/scacertexec.cpp b/src/ca/scacertexec.cpp
index ff87f485..4bb4ef95 100644
--- a/src/ca/scacertexec.cpp
+++ b/src/ca/scacertexec.cpp
@@ -148,7 +148,7 @@ static HRESULT ExecuteCertificateOperation(
148 LPWSTR pwzFilePath = NULL; 148 LPWSTR pwzFilePath = NULL;
149 BYTE* pbData = NULL; 149 BYTE* pbData = NULL;
150 DWORD cbData = 0; 150 DWORD cbData = 0;
151 DWORD cbPFXPassword = 0; 151 DWORD_PTR cbPFXPassword = 0;
152 152
153 BOOL fUserStoreLocation = (CERT_SYSTEM_STORE_CURRENT_USER == dwStoreLocation); 153 BOOL fUserStoreLocation = (CERT_SYSTEM_STORE_CURRENT_USER == dwStoreLocation);
154 HCERTSTORE hCertStore = NULL; 154 HCERTSTORE hCertStore = NULL;
diff --git a/src/ca/scahttpheader.cpp b/src/ca/scahttpheader.cpp
index a8fea796..1e134cea 100644
--- a/src/ca/scahttpheader.cpp
+++ b/src/ca/scahttpheader.cpp
@@ -159,7 +159,7 @@ HRESULT ScaWriteHttpHeader(
159 LPWSTR pwz = NULL; 159 LPWSTR pwz = NULL;
160 LPWSTR pwzHeaders = NULL; 160 LPWSTR pwzHeaders = NULL;
161 LPWSTR pwzNewHeader = NULL; 161 LPWSTR pwzNewHeader = NULL;
162 DWORD dwFoundHeaderIndex = 0; 162 DWORD_PTR dwFoundHeaderIndex = 0;
163 LPCWSTR wzFoundHeader = NULL; 163 LPCWSTR wzFoundHeader = NULL;
164 BOOL fOldValueFound = FALSE; 164 BOOL fOldValueFound = FALSE;
165 165
diff --git a/src/ca/scaiis.cpp b/src/ca/scaiis.cpp
index a29af1db..958051ed 100644
--- a/src/ca/scaiis.cpp
+++ b/src/ca/scaiis.cpp
@@ -12,13 +12,13 @@ HRESULT ScaMetabaseTransaction(__in_z LPCWSTR wzBackup)
12 12
13 // TODO: These functions have been reported to hang IIS (O11:51709). They may have been fixed in IIS6, but if not, need to be re-written the hard way 13 // TODO: These functions have been reported to hang IIS (O11:51709). They may have been fixed in IIS6, but if not, need to be re-written the hard way
14 14
15 hr = WcaDoDeferredAction(L"StartMetabaseTransaction", wzBackup, COST_IIS_TRANSACTIONS); 15 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"StartMetabaseTransaction"), wzBackup, COST_IIS_TRANSACTIONS);
16 ExitOnFailure(hr, "Failed to schedule StartMetabaseTransaction"); 16 ExitOnFailure(hr, "Failed to schedule StartMetabaseTransaction");
17 17
18 hr = WcaDoDeferredAction(L"RollbackMetabaseTransaction", wzBackup, 0); // rollback cost is irrelevant 18 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackMetabaseTransaction"), wzBackup, 0); // rollback cost is irrelevant
19 ExitOnFailure(hr, "Failed to schedule RollbackMetabaseTransaction"); 19 ExitOnFailure(hr, "Failed to schedule RollbackMetabaseTransaction");
20 20
21 hr = WcaDoDeferredAction(L"CommitMetabaseTransaction", wzBackup, 0); // commit is free 21 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CommitMetabaseTransaction"), wzBackup, 0); // commit is free
22 ExitOnFailure(hr, "Failed to schedule StartMetabaseTransaction"); 22 ExitOnFailure(hr, "Failed to schedule StartMetabaseTransaction");
23 23
24LExit: 24LExit:
diff --git a/src/ca/scaiis7.cpp b/src/ca/scaiis7.cpp
index f0f4a629..aaf307d7 100644
--- a/src/ca/scaiis7.cpp
+++ b/src/ca/scaiis7.cpp
@@ -8,13 +8,13 @@ HRESULT ScaIIS7ConfigTransaction(LPCWSTR wzBackup)
8{ 8{
9 HRESULT hr = S_OK; 9 HRESULT hr = S_OK;
10 10
11 hr = WcaDoDeferredAction(L"StartIIS7ConfigTransaction", wzBackup, COST_IIS_TRANSACTIONS); 11 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"StartIIS7ConfigTransaction"), wzBackup, COST_IIS_TRANSACTIONS);
12 ExitOnFailure(hr, "Failed to schedule StartIIS7ConfigTransaction"); 12 ExitOnFailure(hr, "Failed to schedule StartIIS7ConfigTransaction");
13 13
14 hr = WcaDoDeferredAction(L"RollbackIIS7ConfigTransaction", wzBackup, 0); // rollback cost is irrelevant 14 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackIIS7ConfigTransaction"), wzBackup, 0); // rollback cost is irrelevant
15 ExitOnFailure(hr, "Failed to schedule RollbackIIS7ConfigTransaction"); 15 ExitOnFailure(hr, "Failed to schedule RollbackIIS7ConfigTransaction");
16 16
17 hr = WcaDoDeferredAction(L"CommitIIS7ConfigTransaction", wzBackup, 0); // commit is free 17 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CommitIIS7ConfigTransaction"), wzBackup, 0); // commit is free
18 ExitOnFailure(hr, "Failed to schedule StartIIS7ConfigTransaction"); 18 ExitOnFailure(hr, "Failed to schedule StartIIS7ConfigTransaction");
19 19
20LExit: 20LExit:
diff --git a/src/ca/scasched.cpp b/src/ca/scasched.cpp
index cdece45d..de021275 100644
--- a/src/ca/scasched.cpp
+++ b/src/ca/scasched.cpp
@@ -331,7 +331,7 @@ extern "C" UINT __stdcall ConfigureIIs(
331 // This must remain trace only, CA data may contain password 331 // This must remain trace only, CA data may contain password
332 WcaLog(LOGMSG_TRACEONLY, "Custom Action Data for ConfigureIIS7Exec will be: %ls", pwzCustomActionData); 332 WcaLog(LOGMSG_TRACEONLY, "Custom Action Data for ConfigureIIS7Exec will be: %ls", pwzCustomActionData);
333 333
334 hr = WcaDoDeferredAction(L"ConfigureIIs7Exec", pwzCustomActionData, ConfigureIIsCost); 334 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ConfigureIIs7Exec"), pwzCustomActionData, ConfigureIIsCost);
335 ExitOnFailure(hr, "Failed to schedule ConfigureIIs7Exec custom action"); 335 ExitOnFailure(hr, "Failed to schedule ConfigureIIs7Exec custom action");
336 336
337 ReleaseNullStr(pwzCustomActionData); 337 ReleaseNullStr(pwzCustomActionData);
@@ -340,7 +340,7 @@ extern "C" UINT __stdcall ConfigureIIs(
340 hr = WcaWriteStringToCaData(pwzScriptKey, &pwzCustomActionData); 340 hr = WcaWriteStringToCaData(pwzScriptKey, &pwzCustomActionData);
341 ExitOnFailure(hr, "Failed to add script key to CustomActionData."); 341 ExitOnFailure(hr, "Failed to add script key to CustomActionData.");
342 342
343 hr = WcaDoDeferredAction(L"WriteIIS7ConfigChanges", pwzCustomActionData, WriteIIS7ConfigChangesCost); 343 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WriteIIS7ConfigChanges"), pwzCustomActionData, WriteIIS7ConfigChangesCost);
344 ExitOnFailure(hr, "Failed to schedule WriteMetabaseChanges custom action"); 344 ExitOnFailure(hr, "Failed to schedule WriteMetabaseChanges custom action");
345 } 345 }
346 else 346 else
@@ -348,7 +348,7 @@ extern "C" UINT __stdcall ConfigureIIs(
348 // This must remain trace only, CA data may contain password 348 // This must remain trace only, CA data may contain password
349 WcaLog(LOGMSG_TRACEONLY, "Custom Action Data for ConfigureIISExec will be: %ls", pwzCustomActionData); 349 WcaLog(LOGMSG_TRACEONLY, "Custom Action Data for ConfigureIISExec will be: %ls", pwzCustomActionData);
350 350
351 hr = WcaDoDeferredAction(L"ConfigureIIsExec", pwzCustomActionData, ConfigureIIsCost); 351 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ConfigureIIsExec"), pwzCustomActionData, ConfigureIIsCost);
352 ExitOnFailure(hr, "Failed to schedule ConfigureIISExec custom action"); 352 ExitOnFailure(hr, "Failed to schedule ConfigureIISExec custom action");
353 353
354 ReleaseNullStr(pwzCustomActionData); 354 ReleaseNullStr(pwzCustomActionData);
@@ -357,7 +357,7 @@ extern "C" UINT __stdcall ConfigureIIs(
357 hr = WcaWriteStringToCaData(pwzScriptKey, &pwzCustomActionData); 357 hr = WcaWriteStringToCaData(pwzScriptKey, &pwzCustomActionData);
358 ExitOnFailure(hr, "Failed to add script key to CustomActionData."); 358 ExitOnFailure(hr, "Failed to add script key to CustomActionData.");
359 359
360 hr = WcaDoDeferredAction(L"WriteMetabaseChanges", pwzCustomActionData, WriteMetabaseChangesCost); 360 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WriteMetabaseChanges"), pwzCustomActionData, WriteMetabaseChangesCost);
361 ExitOnFailure(hr, "Failed to schedule WriteMetabaseChanges custom action"); 361 ExitOnFailure(hr, "Failed to schedule WriteMetabaseChanges custom action");
362 } 362 }
363 363
diff --git a/src/wixext/IIsCompiler.cs b/src/wixext/IIsCompiler.cs
index 6f0cdd5e..a221e78a 100644
--- a/src/wixext/IIsCompiler.cs
+++ b/src/wixext/IIsCompiler.cs
@@ -8,6 +8,7 @@ namespace WixToolset.Iis
8 using System.Xml.Linq; 8 using System.Xml.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Extensibility; 10 using WixToolset.Extensibility;
11 using WixToolset.Extensibility.Data;
11 using WixToolset.Iis.Symbols; 12 using WixToolset.Iis.Symbols;
12 13
13 /// <summary> 14 /// <summary>
@@ -287,8 +288,8 @@ namespace WixToolset.Iis
287 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 288 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
288 289
289 // Reference InstallCertificates and UninstallCertificates since nothing will happen without them 290 // Reference InstallCertificates and UninstallCertificates since nothing will happen without them
290 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "InstallCertificates"); 291 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "InstallCertificates", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
291 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "UninstallCertificates"); 292 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "UninstallCertificates", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
292 this.ParseHelper.EnsureTable(section, sourceLineNumbers, IisTableDefinitions.CertificateHash); // Certificate CustomActions require the CertificateHash table 293 this.ParseHelper.EnsureTable(section, sourceLineNumbers, IisTableDefinitions.CertificateHash); // Certificate CustomActions require the CertificateHash table
293 294
294 if (!this.Messaging.EncounteredError) 295 if (!this.Messaging.EncounteredError)
@@ -2603,7 +2604,7 @@ namespace WixToolset.Iis
2603 2604
2604 private void AddReferenceToConfigureIIs(IntermediateSection section, SourceLineNumber sourceLineNumbers) 2605 private void AddReferenceToConfigureIIs(IntermediateSection section, SourceLineNumber sourceLineNumbers)
2605 { 2606 {
2606 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "ConfigureIIs"); 2607 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureIIs", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2607 } 2608 }
2608 } 2609 }
2609} 2610}
diff --git a/src/wixlib/IIsExtension_Platform.wxi b/src/wixlib/IIsExtension_Platform.wxi
index ad53f0c1..dd9646df 100644
--- a/src/wixlib/IIsExtension_Platform.wxi
+++ b/src/wixlib/IIsExtension_Platform.wxi
@@ -3,40 +3,40 @@
3 3
4 4
5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs"> 5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 6 <?include caDecor.wxi ?>
7 <?include caSuffix.wxi ?> 7
8 <Fragment> 8 <Fragment>
9 <UIRef Id="WixIIsErrors" /> 9 <UIRef Id="WixIIsErrors" />
10 <UI> 10 <UI>
11 <ProgressText Action="ConfigureIIs$(var.Suffix)">!(loc.ConfigureIIs)</ProgressText> 11 <ProgressText Action="$(var.Prefix)ConfigureIIs$(var.Suffix)">!(loc.ConfigureIIs)</ProgressText>
12 <ProgressText Action="ConfigureIIsExec$(var.DeferredSuffix)">!(loc.ConfigureIIsExec)</ProgressText> 12 <ProgressText Action="$(var.Prefix)ConfigureIIsExec$(var.Suffix)">!(loc.ConfigureIIsExec)</ProgressText>
13 <ProgressText Action="StartMetabaseTransaction$(var.DeferredSuffix)">!(loc.StartMetabaseTransaction)</ProgressText> 13 <ProgressText Action="$(var.Prefix)StartMetabaseTransaction$(var.Suffix)">!(loc.StartMetabaseTransaction)</ProgressText>
14 <ProgressText Action="RollbackMetabaseTransaction$(var.DeferredSuffix)">!(loc.RollbackMetabaseTransaction)</ProgressText> 14 <ProgressText Action="$(var.Prefix)RollbackMetabaseTransaction$(var.Suffix)">!(loc.RollbackMetabaseTransaction)</ProgressText>
15 <ProgressText Action="CommitMetabaseTransaction$(var.DeferredSuffix)">!(loc.CommitMetabaseTransaction)</ProgressText> 15 <ProgressText Action="$(var.Prefix)CommitMetabaseTransaction$(var.Suffix)">!(loc.CommitMetabaseTransaction)</ProgressText>
16 <ProgressText Action="WriteMetabaseChanges$(var.DeferredSuffix)">!(loc.WriteMetabaseChanges)</ProgressText> 16 <ProgressText Action="$(var.Prefix)WriteMetabaseChanges$(var.Suffix)">!(loc.WriteMetabaseChanges)</ProgressText>
17 17
18 <ProgressText Action="ConfigureIIs7Exec$(var.DeferredSuffix)">!(loc.ConfigureIIs7Exec)</ProgressText> 18 <ProgressText Action="$(var.Prefix)ConfigureIIs7Exec$(var.Suffix)">!(loc.ConfigureIIs7Exec)</ProgressText>
19 <ProgressText Action="StartIIS7ConfigTransaction$(var.DeferredSuffix)">!(loc.StartIIS7ConfigTransaction)</ProgressText> 19 <ProgressText Action="$(var.Prefix)StartIIS7ConfigTransaction$(var.Suffix)">!(loc.StartIIS7ConfigTransaction)</ProgressText>
20 <ProgressText Action="RollbackIIS7ConfigTransaction$(var.DeferredSuffix)">!(loc.RollbackIIS7ConfigTransaction)</ProgressText> 20 <ProgressText Action="$(var.Prefix)RollbackIIS7ConfigTransaction$(var.Suffix)">!(loc.RollbackIIS7ConfigTransaction)</ProgressText>
21 <ProgressText Action="CommitIIS7ConfigTransaction$(var.DeferredSuffix)">!(loc.CommitIIS7ConfigTransaction)</ProgressText> 21 <ProgressText Action="$(var.Prefix)CommitIIS7ConfigTransaction$(var.Suffix)">!(loc.CommitIIS7ConfigTransaction)</ProgressText>
22 <ProgressText Action="WriteIIS7ConfigChanges$(var.DeferredSuffix)">!(loc.WriteIIS7ConfigChanges)</ProgressText> 22 <ProgressText Action="$(var.Prefix)WriteIIS7ConfigChanges$(var.Suffix)">!(loc.WriteIIS7ConfigChanges)</ProgressText>
23 </UI> 23 </UI>
24 24
25 <CustomAction Id="ConfigureIIs$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIs" Execute="immediate" Return="check" SuppressModularization="yes" /> 25 <CustomAction Id="$(var.Prefix)ConfigureIIs$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIs" Execute="immediate" Return="check" SuppressModularization="yes" />
26 <CustomAction Id="ConfigureIIsExec$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIsExec" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 26 <CustomAction Id="$(var.Prefix)ConfigureIIsExec$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIsExec" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
27 <CustomAction Id="StartMetabaseTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="StartMetabaseTransaction" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 27 <CustomAction Id="$(var.Prefix)StartMetabaseTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="StartMetabaseTransaction" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
28 <CustomAction Id="RollbackMetabaseTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="RollbackMetabaseTransaction" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 28 <CustomAction Id="$(var.Prefix)RollbackMetabaseTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="RollbackMetabaseTransaction" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
29 <CustomAction Id="CommitMetabaseTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="CommitMetabaseTransaction" Impersonate="no" Execute="commit" Return="check" HideTarget="yes" SuppressModularization="yes" /> 29 <CustomAction Id="$(var.Prefix)CommitMetabaseTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="CommitMetabaseTransaction" Impersonate="no" Execute="commit" Return="check" HideTarget="yes" SuppressModularization="yes" />
30 <CustomAction Id="WriteMetabaseChanges$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="WriteMetabaseChanges" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 30 <CustomAction Id="$(var.Prefix)WriteMetabaseChanges$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="WriteMetabaseChanges" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
31 31
32 <CustomAction Id="ConfigureIIs7Exec$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIs7Exec" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 32 <CustomAction Id="$(var.Prefix)ConfigureIIs7Exec$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="ConfigureIIs7Exec" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
33 <CustomAction Id="StartIIS7ConfigTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="StartIIS7ConfigTransaction" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 33 <CustomAction Id="$(var.Prefix)StartIIS7ConfigTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="StartIIS7ConfigTransaction" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
34 <CustomAction Id="RollbackIIS7ConfigTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="RollbackIIS7ConfigTransaction" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 34 <CustomAction Id="$(var.Prefix)RollbackIIS7ConfigTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="RollbackIIS7ConfigTransaction" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
35 <CustomAction Id="CommitIIS7ConfigTransaction$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="CommitIIS7ConfigTransaction" Impersonate="no" Execute="commit" Return="check" HideTarget="yes" SuppressModularization="yes" /> 35 <CustomAction Id="$(var.Prefix)CommitIIS7ConfigTransaction$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="CommitIIS7ConfigTransaction" Impersonate="no" Execute="commit" Return="check" HideTarget="yes" SuppressModularization="yes" />
36 <CustomAction Id="WriteIIS7ConfigChanges$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="WriteIIS7ConfigChanges" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 36 <CustomAction Id="$(var.Prefix)WriteIIS7ConfigChanges$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="WriteIIS7ConfigChanges" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
37 37
38 <InstallExecuteSequence> 38 <InstallExecuteSequence>
39 <Custom Action="ConfigureIIs$(var.Suffix)" Before="RegisterUser" Overridable="yes">NOT SKIPCONFIGUREIIS AND VersionNT &gt; 400</Custom> 39 <Custom Action="$(var.Prefix)ConfigureIIs$(var.Suffix)" Before="RegisterUser" Overridable="yes">NOT SKIPCONFIGUREIIS AND VersionNT &gt; 400</Custom>
40 </InstallExecuteSequence> 40 </InstallExecuteSequence>
41 </Fragment> 41 </Fragment>
42 42
@@ -45,18 +45,18 @@
45 </Fragment> 45 </Fragment>
46 46
47 <Fragment> 47 <Fragment>
48 <CustomAction Id="InstallCertificates$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="InstallCertificates" Execute="immediate" Return="check" SuppressModularization="yes" /> 48 <CustomAction Id="$(var.Prefix)InstallCertificates$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="InstallCertificates" Execute="immediate" Return="check" SuppressModularization="yes" />
49 <CustomAction Id="UninstallCertificates$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="UninstallCertificates" Execute="immediate" Return="check" SuppressModularization="yes" /> 49 <CustomAction Id="$(var.Prefix)UninstallCertificates$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="UninstallCertificates" Execute="immediate" Return="check" SuppressModularization="yes" />
50 50
51 <CustomAction Id="AddUserCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddUserCertificate" Impersonate="yes" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" /> 51 <CustomAction Id="$(var.Prefix)AddUserCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddUserCertificate" Impersonate="yes" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" />
52 <CustomAction Id="AddMachineCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddMachineCertificate" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 52 <CustomAction Id="$(var.Prefix)AddMachineCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddMachineCertificate" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
53 <CustomAction Id="DeleteUserCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteUserCertificate" Impersonate="yes" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" /> 53 <CustomAction Id="$(var.Prefix)DeleteUserCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteUserCertificate" Impersonate="yes" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" />
54 <CustomAction Id="DeleteMachineCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteMachineCertificate" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 54 <CustomAction Id="$(var.Prefix)DeleteMachineCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteMachineCertificate" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
55 55
56 <CustomAction Id="RollbackAddUserCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteUserCertificate" Impersonate="yes" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" /> 56 <CustomAction Id="$(var.Prefix)RollbackAddUserCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteUserCertificate" Impersonate="yes" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" />
57 <CustomAction Id="RollbackAddMachineCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteMachineCertificate" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 57 <CustomAction Id="$(var.Prefix)RollbackAddMachineCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="DeleteMachineCertificate" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
58 <CustomAction Id="RollbackDeleteUserCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddUserCertificate" Impersonate="yes" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" /> 58 <CustomAction Id="$(var.Prefix)RollbackDeleteUserCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddUserCertificate" Impersonate="yes" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" TerminalServerAware="yes" />
59 <CustomAction Id="RollbackDeleteMachineCertificate$(var.DeferredSuffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddMachineCertificate" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 59 <CustomAction Id="$(var.Prefix)RollbackDeleteMachineCertificate$(var.Suffix)" BinaryKey="IisCA$(var.Suffix)" DllEntry="AddMachineCertificate" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
60 60
61 <InstallExecuteSequence> 61 <InstallExecuteSequence>
62 <Custom Action="UninstallCertificates$(var.Suffix)" Before="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom> 62 <Custom Action="UninstallCertificates$(var.Suffix)" Before="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom>
diff --git a/src/wixlib/IIsExtension_arm.wxs b/src/wixlib/IIsExtension_arm.wxs
new file mode 100644
index 00000000..fff4e48e
--- /dev/null
+++ b/src/wixlib/IIsExtension_arm.wxs
@@ -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
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=arm ?>
7 <?include IIsExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/wixlib/IIsExtension_arm64.wxs b/src/wixlib/IIsExtension_arm64.wxs
new file mode 100644
index 00000000..62ce8053
--- /dev/null
+++ b/src/wixlib/IIsExtension_arm64.wxs
@@ -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
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=arm64 ?>
7 <?include IIsExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/wixlib/IIsExtension_x64.wxs b/src/wixlib/IIsExtension_x64.wxs
new file mode 100644
index 00000000..26ef8625
--- /dev/null
+++ b/src/wixlib/IIsExtension_x64.wxs
@@ -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
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=x64 ?>
7 <?include IIsExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/wixlib/caDecor.wxi b/src/wixlib/caDecor.wxi
new file mode 100644
index 00000000..1d00df8f
--- /dev/null
+++ b/src/wixlib/caDecor.wxi
@@ -0,0 +1,40 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
6 <?ifdef Prefix ?>
7 <?undef Prefix ?>
8 <?endif ?>
9
10 <?define Prefix="Wix4" ?>
11
12 <?ifndef platform ?>
13 <?define platform="x86" ?>
14 <?endif ?>
15
16 <?if $(var.platform)="" ?>
17 <?undef platform ?>
18 <?define platform="x86" ?>
19 <?endif ?>
20
21 <?ifdef Suffix ?>
22 <?undef Suffix ?>
23 <?endif ?>
24
25 <?if $(var.platform)~="x86" ?>
26 <?define Suffix="_X86" ?>
27 <?endif ?>
28
29 <?if $(var.platform)~="x64" ?>
30 <?define Suffix="_X64" ?>
31 <?endif ?>
32
33 <?if $(var.platform)~="arm" ?>
34 <?define Suffix="_A32" ?>
35 <?endif ?>
36
37 <?if $(var.platform)~="arm64" ?>
38 <?define Suffix="_A64" ?>
39 <?endif ?>
40</Include>
diff --git a/src/wixlib/caSuffix.wxi b/src/wixlib/caSuffix.wxi
deleted file mode 100644
index a56a2393..00000000
--- a/src/wixlib/caSuffix.wxi
+++ /dev/null
@@ -1,28 +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<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?ifndef platform ?>
6 <?error Required value "platform" not defined in include caSuffix.wxi ?>
7 <?endif ?>
8
9 <?ifdef Suffix ?>
10 <?undef Suffix ?>
11 <?undef DeferredSuffix ?>
12 <?endif ?>
13
14 <?if $(var.platform)="x86" ?>
15 <?define Suffix="" ?>
16 <?define DeferredSuffix="" ?>
17 <?endif ?>
18
19 <?if $(var.platform)="x64" ?>
20 <?define Suffix="_x64" ?>
21 <?define DeferredSuffix="_64" ?>
22 <?endif ?>
23
24 <?if $(var.platform)="arm" ?>
25 <?define Suffix="_ARM" ?>
26 <?define DeferredSuffix="_ARM" ?>
27 <?endif ?>
28</Include>
diff --git a/src/wixlib/iis.wixproj b/src/wixlib/iis.wixproj
index 3ebfc2f4..689b3508 100644
--- a/src/wixlib/iis.wixproj
+++ b/src/wixlib/iis.wixproj
@@ -8,7 +8,10 @@
8 </PropertyGroup> 8 </PropertyGroup>
9 9
10 <ItemGroup> 10 <ItemGroup>
11 <ProjectReference Include="..\ca\iisca.vcxproj" /> 11 <ProjectReference Include="..\ca\iisca.vcxproj" Properties="Platform=ARM" />
12 <ProjectReference Include="..\ca\iisca.vcxproj" Properties="Platform=ARM64" />
13 <ProjectReference Include="..\ca\iisca.vcxproj" Properties="Platform=x86" />
14 <ProjectReference Include="..\ca\iisca.vcxproj" Properties="Platform=x64" />
12 </ItemGroup> 15 </ItemGroup>
13 16
14 <ItemGroup> 17 <ItemGroup>