From ecb774445b177c739864cbd0f6ad441c7864e3be Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Sat, 4 Jul 2020 19:02:15 -0400 Subject: Add per-platform custom action support. --- Http.wixext.sln | 4 +-- src/ca/caDecor.h | 13 +++++++++ src/ca/httpca.vcxproj | 50 ++++++++++++++++++++++++----------- src/ca/httpca.vcxproj.filters | 4 +++ src/ca/precomp.h | 2 ++ src/ca/wixhttpca.cpp | 9 ++++--- src/wixext/HttpCompiler.cs | 15 +++-------- src/wixlib/HttpExtension_Platform.wxi | 32 +++++++++++----------- src/wixlib/HttpExtension_arm.wxs | 8 ++++++ src/wixlib/HttpExtension_arm64.wxs | 8 ++++++ src/wixlib/HttpExtension_x64.wxs | 8 ++++++ src/wixlib/caDecor.wxi | 40 ++++++++++++++++++++++++++++ src/wixlib/caSuffix.wxi | 28 -------------------- src/wixlib/http.wixproj | 13 ++++----- 14 files changed, 151 insertions(+), 83 deletions(-) create mode 100644 src/ca/caDecor.h create mode 100644 src/wixlib/HttpExtension_arm.wxs create mode 100644 src/wixlib/HttpExtension_arm64.wxs create mode 100644 src/wixlib/HttpExtension_x64.wxs create mode 100644 src/wixlib/caDecor.wxi delete mode 100644 src/wixlib/caSuffix.wxi diff --git a/Http.wixext.sln b/Http.wixext.sln index 1e17caf7..fe5c52e9 100644 --- a/Http.wixext.sln +++ b/Http.wixext.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2016 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30204.135 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "httpca", "src\ca\httpca.vcxproj", "{90743805-C043-47C7-B5FF-8F5EE5C8A2DE}" EndProject 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 @@ +#pragma once +// 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. + + +#if defined(_M_ARM64) +#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_A64" +#elif defined(_M_AMD64) +#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X64" +#elif defined(_M_ARM) +#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_ARM" +#else +#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X86" +#endif diff --git a/src/ca/httpca.vcxproj b/src/ca/httpca.vcxproj index aa88d62e..608224c2 100644 --- a/src/ca/httpca.vcxproj +++ b/src/ca/httpca.vcxproj @@ -1,10 +1,9 @@ - - + Debug @@ -14,44 +13,63 @@ Release Win32 + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + Debug + ARM64 + + + Release + ARM64 + - + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE} DynamicLibrary - v141 + v142 Unicode httpca wixhttpca.def WiX Toolset Http CustomAction + 10.0 - + - + crypt32.lib;httpapi.lib;msi.lib - + Create - - - - - - - + - + 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}. @@ -59,4 +77,4 @@ - + \ No newline at end of file diff --git a/src/ca/httpca.vcxproj.filters b/src/ca/httpca.vcxproj.filters index d2ab3287..979b9ef3 100644 --- a/src/ca/httpca.vcxproj.filters +++ b/src/ca/httpca.vcxproj.filters @@ -26,10 +26,14 @@ Header Files + + Header Files + Source Files + \ No newline at end of file diff --git a/src/ca/precomp.h b/src/ca/precomp.h index 85aeb70e..d5143dac 100644 --- a/src/ca/precomp.h +++ b/src/ca/precomp.h @@ -14,3 +14,5 @@ #include "aclutil.h" #include "cost.h" + +#include "caDecor.h" diff --git a/src/ca/wixhttpca.cpp b/src/ca/wixhttpca.cpp index 58b46c0f..3c091192 100644 --- a/src/ca/wixhttpca.cpp +++ b/src/ca/wixhttpca.cpp @@ -193,16 +193,16 @@ static UINT SchedHttpUrlReservations( if (WCA_TODO_INSTALL == todoSched) { - hr = WcaDoDeferredAction(L"WixRollbackHttpUrlReservationsInstall", sczRollbackCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); + hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WixRollbackHttpUrlReservationsInstall"), sczRollbackCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); ExitOnFailure(hr, "Failed to schedule install URL reservations rollback."); - hr = WcaDoDeferredAction(L"WixExecHttpUrlReservationsInstall", sczCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); + hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WixExecHttpUrlReservationsInstall"), sczCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); ExitOnFailure(hr, "Failed to schedule install URL reservations execution."); } else { - hr = WcaDoDeferredAction(L"WixRollbackHttpUrlReservationsUninstall", sczRollbackCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); + hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WixRollbackHttpUrlReservationsUninstall"), sczRollbackCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); ExitOnFailure(hr, "Failed to schedule uninstall URL reservations rollback."); - hr = WcaDoDeferredAction(L"WixExecHttpUrlReservationsUninstall", sczCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); + hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"WixExecHttpUrlReservationsUninstall"), sczCustomActionData, cUrlReservations * COST_HTTP_URL_ACL); ExitOnFailure(hr, "Failed to schedule uninstall URL reservations execution."); } } @@ -210,6 +210,7 @@ static UINT SchedHttpUrlReservations( { WcaLog(LOGMSG_STANDARD, "No URL reservations scheduled."); } + LExit: ReleaseStr(sczSDDL); ReleaseStr(sczExistingSDDL); diff --git a/src/wixext/HttpCompiler.cs b/src/wixext/HttpCompiler.cs index bc64add2..a8c1bca8 100644 --- a/src/wixext/HttpCompiler.cs +++ b/src/wixext/HttpCompiler.cs @@ -7,6 +7,7 @@ namespace WixToolset.Http using System.Xml.Linq; using WixToolset.Data; using WixToolset.Extensibility; + using WixToolset.Extensibility.Data; using WixToolset.Http.Symbols; /// @@ -177,18 +178,8 @@ namespace WixToolset.Http ComponentRef = componentId, }); - if (this.Context.Platform == Platform.ARM) - { - // Ensure ARM version of the CA is referenced. - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "WixSchedHttpUrlReservationsInstall_ARM"); - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "WixSchedHttpUrlReservationsUninstall_ARM"); - } - else - { - // All other supported platforms use x86. - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "WixSchedHttpUrlReservationsInstall"); - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "WixSchedHttpUrlReservationsUninstall"); - } + this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedHttpUrlReservationsInstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64); + this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedHttpUrlReservationsUninstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64); } } diff --git a/src/wixlib/HttpExtension_Platform.wxi b/src/wixlib/HttpExtension_Platform.wxi index 223b8e06..28b3afe1 100644 --- a/src/wixlib/HttpExtension_Platform.wxi +++ b/src/wixlib/HttpExtension_Platform.wxi @@ -3,37 +3,39 @@ - + + - !(loc.WixSchedHttpUrlReservationsInstall) - !(loc.WixSchedHttpUrlReservationsUninstall) - !(loc.WixRollbackHttpUrlReservationsInstall) - !(loc.WixExecHttpUrlReservationsInstall) - !(loc.WixRollbackHttpUrlReservationsUninstall) - !(loc.WixExecHttpUrlReservationsUninstall) + !(loc.WixSchedHttpUrlReservationsInstall) + !(loc.WixSchedHttpUrlReservationsUninstall) + !(loc.WixRollbackHttpUrlReservationsInstall) + !(loc.WixExecHttpUrlReservationsInstall) + !(loc.WixRollbackHttpUrlReservationsUninstall) + !(loc.WixExecHttpUrlReservationsUninstall) - - - - - - + + + + + + - + = 600 OR (VersionNT >= 501 AND ((MsiNTProductType = 1 AND ServicePackLevel >= 2) OR (MsiNTProductType > 1))) ]]> - + = 600 OR (VersionNT >= 501 AND ((MsiNTProductType = 1 AND ServicePackLevel >= 2) OR (MsiNTProductType > 1))) ]]> + diff --git a/src/wixlib/HttpExtension_arm.wxs b/src/wixlib/HttpExtension_arm.wxs new file mode 100644 index 00000000..1f7669bb --- /dev/null +++ b/src/wixlib/HttpExtension_arm.wxs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/wixlib/HttpExtension_arm64.wxs b/src/wixlib/HttpExtension_arm64.wxs new file mode 100644 index 00000000..ac43a85b --- /dev/null +++ b/src/wixlib/HttpExtension_arm64.wxs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/wixlib/HttpExtension_x64.wxs b/src/wixlib/HttpExtension_x64.wxs new file mode 100644 index 00000000..1ba5e505 --- /dev/null +++ b/src/wixlib/HttpExtension_x64.wxs @@ -0,0 +1,8 @@ + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/wixlib/http.wixproj b/src/wixlib/http.wixproj index 6c56808a..fdd8c99b 100644 --- a/src/wixlib/http.wixproj +++ b/src/wixlib/http.wixproj @@ -1,18 +1,19 @@ - Library true en-us - + - + + + + - + - - + \ No newline at end of file -- cgit v1.2.3-55-g6feb