aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Arnson <bob@joyofsetup.com>2020-05-25 21:49:38 -0400
committerBob Arnson <bob@firegiant.com>2020-05-25 21:57:21 -0400
commit3aa4f95a7ac23567efbaebdae57007636e7f6058 (patch)
treea6985084bc89fc842b0869c8cbbf8aece9bb1b67
parent27afde67e4bb9ad06f8722a83984a09236516f69 (diff)
downloadwix-3aa4f95a7ac23567efbaebdae57007636e7f6058.tar.gz
wix-3aa4f95a7ac23567efbaebdae57007636e7f6058.tar.bz2
wix-3aa4f95a7ac23567efbaebdae57007636e7f6058.zip
Support platform-specific CAs (including ARM64).
-rw-r--r--appveyor.cmd3
-rw-r--r--src/ca/XmlConfig.cpp19
-rw-r--r--src/ca/XmlFile.cpp23
-rw-r--r--src/ca/qtexecca.cpp4
-rw-r--r--src/ca/scaperfexec.cpp6
-rw-r--r--src/ca/utilca.vcxproj26
-rw-r--r--src/test/WixToolsetTest.Util/UtilExtensionFixture.cs64
-rw-r--r--src/wixext/UtilCompiler.cs42
-rw-r--r--src/wixlib/UtilExtension.wxs93
-rw-r--r--src/wixlib/UtilExtension_Platform.wxi516
-rw-r--r--src/wixlib/UtilExtension_arm.wxs8
-rw-r--r--src/wixlib/UtilExtension_arm64.wxs8
-rw-r--r--src/wixlib/util.wixproj40
13 files changed, 477 insertions, 375 deletions
diff --git a/appveyor.cmd b/appveyor.cmd
index 3493d585..0dc63d47 100644
--- a/appveyor.cmd
+++ b/appveyor.cmd
@@ -9,5 +9,8 @@ msbuild -p:Configuration=Release src\test\WixToolsetTest.Util\WixToolsetTest.Uti
9 9
10msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.Util.wixext.csproj 10msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.Util.wixext.csproj
11 11
12msbuild -p:Configuration=Release src\test\WixToolsetTest.Util\WixToolsetTest.Util.csproj
13dotnet test -c Release --no-build src\test\WixToolsetTest.Util
14
12@popd 15@popd
13@endlocal \ No newline at end of file 16@endlocal \ No newline at end of file
diff --git a/src/ca/XmlConfig.cpp b/src/ca/XmlConfig.cpp
index 8c60979d..afd3dafb 100644
--- a/src/ca/XmlConfig.cpp
+++ b/src/ca/XmlConfig.cpp
@@ -588,8 +588,9 @@ extern "C" UINT __stdcall ExecXmlConfig(
588 HRESULT hrOpenFailure = S_OK; 588 HRESULT hrOpenFailure = S_OK;
589 UINT er = ERROR_SUCCESS; 589 UINT er = ERROR_SUCCESS;
590 590
591 BOOL fIsWow64Process = FALSE; 591#ifndef _WIN64
592 BOOL fIsFSRedirectDisabled = FALSE; 592 BOOL fIsFSRedirectDisabled = FALSE;
593#endif
593 BOOL fPreserveDate = FALSE; 594 BOOL fPreserveDate = FALSE;
594 595
595 LPWSTR pwzCustomActionData = NULL; 596 LPWSTR pwzCustomActionData = NULL;
@@ -635,10 +636,12 @@ extern "C" UINT __stdcall ExecXmlConfig(
635 hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa); 636 hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa);
636 ExitOnFailure(hr, "failed to process CustomActionData"); 637 ExitOnFailure(hr, "failed to process CustomActionData");
637 638
639#ifndef _WIN64
638 // Initialize the Wow64 API - store the result in fWow64APIPresent 640 // Initialize the Wow64 API - store the result in fWow64APIPresent
639 // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases 641 // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases
640 WcaInitializeWow64(); 642 WcaInitializeWow64();
641 fIsWow64Process = WcaIsWow64Process(); 643 BOOL fIsWow64Process = WcaIsWow64Process();
644#endif
642 645
643 if (xaOpenFile != xa && xaOpenFilex64 != xa) 646 if (xaOpenFile != xa && xaOpenFilex64 != xa)
644 { 647 {
@@ -657,6 +660,7 @@ extern "C" UINT __stdcall ExecXmlConfig(
657 // Open the file 660 // Open the file
658 ReleaseNullObject(pixd); 661 ReleaseNullObject(pixd);
659 662
663#ifndef _WIN64
660 if (xaOpenFilex64 == xa) 664 if (xaOpenFilex64 == xa)
661 { 665 {
662 if (!fIsWow64Process) 666 if (!fIsWow64Process)
@@ -670,6 +674,7 @@ extern "C" UINT __stdcall ExecXmlConfig(
670 674
671 fIsFSRedirectDisabled = TRUE; 675 fIsFSRedirectDisabled = TRUE;
672 } 676 }
677#endif
673 678
674 hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd); 679 hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd);
675 if (FAILED(hr)) 680 if (FAILED(hr))
@@ -945,15 +950,18 @@ extern "C" UINT __stdcall ExecXmlConfig(
945 ExitOnFailure(hr, "failed to set modified time of file : %ls", pwzFile); 950 ExitOnFailure(hr, "failed to set modified time of file : %ls", pwzFile);
946 } 951 }
947 952
953#ifndef _WIN64
948 if (fIsFSRedirectDisabled) 954 if (fIsFSRedirectDisabled)
949 { 955 {
950 fIsFSRedirectDisabled = FALSE; 956 fIsFSRedirectDisabled = FALSE;
951 WcaRevertWow64FSRedirection(); 957 WcaRevertWow64FSRedirection();
952 } 958 }
959#endif
953 } 960 }
954 } 961 }
955 962
956LExit: 963LExit:
964#ifndef _WIN64
957 // Make sure we revert FS Redirection if necessary before exiting 965 // Make sure we revert FS Redirection if necessary before exiting
958 if (fIsFSRedirectDisabled) 966 if (fIsFSRedirectDisabled)
959 { 967 {
@@ -961,6 +969,7 @@ LExit:
961 WcaRevertWow64FSRedirection(); 969 WcaRevertWow64FSRedirection();
962 } 970 }
963 WcaFinalizeWow64(); 971 WcaFinalizeWow64();
972#endif
964 973
965 ReleaseStr(pwzCustomActionData); 974 ReleaseStr(pwzCustomActionData);
966 ReleaseStr(pwzData); 975 ReleaseStr(pwzData);
@@ -1001,7 +1010,9 @@ extern "C" UINT __stdcall ExecXmlConfigRollback(
1001 UINT er = ERROR_SUCCESS; 1010 UINT er = ERROR_SUCCESS;
1002 1011
1003 int iIs64Bit; 1012 int iIs64Bit;
1013#ifndef _WIN64
1004 BOOL fIs64Bit = FALSE; 1014 BOOL fIs64Bit = FALSE;
1015#endif
1005 1016
1006 LPWSTR pwzCustomActionData = NULL; 1017 LPWSTR pwzCustomActionData = NULL;
1007 LPWSTR pwz = NULL; 1018 LPWSTR pwz = NULL;
@@ -1035,6 +1046,7 @@ extern "C" UINT __stdcall ExecXmlConfigRollback(
1035 hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData); 1046 hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData);
1036 ExitOnFailure(hr, "failed to read file contents from custom action data"); 1047 ExitOnFailure(hr, "failed to read file contents from custom action data");
1037 1048
1049#ifndef _WIN64
1038 fIs64Bit = (BOOL)iIs64Bit; 1050 fIs64Bit = (BOOL)iIs64Bit;
1039 1051
1040 if (fIs64Bit) 1052 if (fIs64Bit)
@@ -1055,6 +1067,7 @@ extern "C" UINT __stdcall ExecXmlConfigRollback(
1055 hr = WcaDisableWow64FSRedirection(); 1067 hr = WcaDisableWow64FSRedirection();
1056 ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API."); 1068 ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API.");
1057 } 1069 }
1070#endif
1058 1071
1059 hr = FileGetTime(pwzFileName, NULL, NULL, &ft); 1072 hr = FileGetTime(pwzFileName, NULL, NULL, &ft);
1060 ExitOnFailure(hr, "Failed to get modified date of file %ls.", pwzFileName); 1073 ExitOnFailure(hr, "Failed to get modified date of file %ls.", pwzFileName);
@@ -1082,11 +1095,13 @@ LExit:
1082 1095
1083 ReleaseFile(hFile); 1096 ReleaseFile(hFile);
1084 1097
1098#ifndef _WIN64
1085 if (fIs64Bit) 1099 if (fIs64Bit)
1086 { 1100 {
1087 WcaRevertWow64FSRedirection(); 1101 WcaRevertWow64FSRedirection();
1088 WcaFinalizeWow64(); 1102 WcaFinalizeWow64();
1089 } 1103 }
1104#endif
1090 1105
1091 ReleaseMem(pbData); 1106 ReleaseMem(pbData);
1092 1107
diff --git a/src/ca/XmlFile.cpp b/src/ca/XmlFile.cpp
index 95449126..71c9a390 100644
--- a/src/ca/XmlFile.cpp
+++ b/src/ca/XmlFile.cpp
@@ -464,9 +464,7 @@ LExit:
464 ReleaseStr(pwzCurrentFile); 464 ReleaseStr(pwzCurrentFile);
465 ReleaseStr(pwzCustomActionData); 465 ReleaseStr(pwzCustomActionData);
466 466
467 if (FAILED(hr)) 467 return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er);
468 er = ERROR_INSTALL_FAILURE;
469 return WcaFinalize(er);
470} 468}
471 469
472 470
@@ -483,7 +481,6 @@ extern "C" UINT __stdcall ExecXmlFile(
483 HRESULT hrOpenFailure = S_OK; 481 HRESULT hrOpenFailure = S_OK;
484 UINT er = ERROR_SUCCESS; 482 UINT er = ERROR_SUCCESS;
485 483
486 BOOL fIsWow64Process = FALSE;
487 BOOL fIsFSRedirectDisabled = FALSE; 484 BOOL fIsFSRedirectDisabled = FALSE;
488 BOOL fPreserveDate = FALSE; 485 BOOL fPreserveDate = FALSE;
489 486
@@ -533,10 +530,12 @@ extern "C" UINT __stdcall ExecXmlFile(
533 hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa); 530 hr = WcaReadIntegerFromCaData(&pwz, (int*) &xa);
534 ExitOnFailure(hr, "failed to process CustomActionData"); 531 ExitOnFailure(hr, "failed to process CustomActionData");
535 532
533#ifndef _WIN64
536 // Initialize the Wow64 API - store the result in fWow64APIPresent 534 // Initialize the Wow64 API - store the result in fWow64APIPresent
537 // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases 535 // If it fails, this doesn't warrant an error yet, because we only need the Wow64 API in some cases
538 WcaInitializeWow64(); 536 WcaInitializeWow64();
539 fIsWow64Process = WcaIsWow64Process(); 537 BOOL fIsWow64Process = WcaIsWow64Process();
538#endif
540 539
541 if (xaOpenFile != xa && xaOpenFilex64 != xa) 540 if (xaOpenFile != xa && xaOpenFilex64 != xa)
542 ExitOnFailure(hr = E_INVALIDARG, "invalid custom action data"); 541 ExitOnFailure(hr = E_INVALIDARG, "invalid custom action data");
@@ -558,6 +557,7 @@ extern "C" UINT __stdcall ExecXmlFile(
558 557
559 if (xaOpenFilex64 == xa) 558 if (xaOpenFilex64 == xa)
560 { 559 {
560#ifndef _WIN64
561 if (!fIsWow64Process) 561 if (!fIsWow64Process)
562 { 562 {
563 hr = E_NOTIMPL; 563 hr = E_NOTIMPL;
@@ -568,6 +568,7 @@ extern "C" UINT __stdcall ExecXmlFile(
568 ExitOnFailure(hr, "Custom action was told to act on a 64-bit component, but was unable to disable filesystem redirection through the Wow64 API."); 568 ExitOnFailure(hr, "Custom action was told to act on a 64-bit component, but was unable to disable filesystem redirection through the Wow64 API.");
569 569
570 fIsFSRedirectDisabled = TRUE; 570 fIsFSRedirectDisabled = TRUE;
571#endif
571 } 572 }
572 573
573 hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd); 574 hr = XmlLoadDocumentFromFileEx(pwzFile, XML_LOAD_PRESERVE_WHITESPACE, &pixd);
@@ -810,7 +811,9 @@ LExit:
810 fIsFSRedirectDisabled = FALSE; 811 fIsFSRedirectDisabled = FALSE;
811 WcaRevertWow64FSRedirection(); 812 WcaRevertWow64FSRedirection();
812 } 813 }
814#ifndef _WIN64
813 WcaFinalizeWow64(); 815 WcaFinalizeWow64();
816#endif
814 817
815 ReleaseStr(pwzCustomActionData); 818 ReleaseStr(pwzCustomActionData);
816 ReleaseStr(pwzData); 819 ReleaseStr(pwzData);
@@ -829,9 +832,7 @@ LExit:
829 832
830 XmlUninitialize(); 833 XmlUninitialize();
831 834
832 if (FAILED(hr)) 835 return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er);
833 er = ERROR_INSTALL_FAILURE;
834 return WcaFinalize(er);
835} 836}
836 837
837 838
@@ -882,6 +883,7 @@ extern "C" UINT __stdcall ExecXmlFileRollback(
882 hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData); 883 hr = WcaReadStreamFromCaData(&pwz, &pbData, &cbData);
883 ExitOnFailure(hr, "failed to read file contents from custom action data"); 884 ExitOnFailure(hr, "failed to read file contents from custom action data");
884 885
886#ifndef _WIN64
885 fIs64Bit = (BOOL)iIs64Bit; 887 fIs64Bit = (BOOL)iIs64Bit;
886 888
887 if (fIs64Bit) 889 if (fIs64Bit)
@@ -902,6 +904,7 @@ extern "C" UINT __stdcall ExecXmlFileRollback(
902 hr = WcaDisableWow64FSRedirection(); 904 hr = WcaDisableWow64FSRedirection();
903 ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API."); 905 ExitOnFailure(hr, "Custom action was told to rollback a 64-bit component, but was unable to Disable Filesystem Redirection through the Wow64 API.");
904 } 906 }
907#endif
905 908
906 // Always preserve the modified date on rollback 909 // Always preserve the modified date on rollback
907 hr = FileGetTime(pwzFileName, NULL, NULL, &ft); 910 hr = FileGetTime(pwzFileName, NULL, NULL, &ft);
@@ -937,8 +940,6 @@ LExit:
937 940
938 ReleaseMem(pbData); 941 ReleaseMem(pbData);
939 942
940 if (FAILED(hr)) 943 return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : er);
941 er = ERROR_INSTALL_FAILURE;
942 return WcaFinalize(er);
943} 944}
944 945
diff --git a/src/ca/qtexecca.cpp b/src/ca/qtexecca.cpp
index 6acad0bb..ddcc812f 100644
--- a/src/ca/qtexecca.cpp
+++ b/src/ca/qtexecca.cpp
@@ -131,6 +131,7 @@ HRESULT ExecCommon64(
131 HRESULT hr = S_OK; 131 HRESULT hr = S_OK;
132 LPWSTR pwzCommand = NULL; 132 LPWSTR pwzCommand = NULL;
133 DWORD dwTimeout = 0; 133 DWORD dwTimeout = 0;
134#ifndef _WIN64
134 BOOL fIsWow64Initialized = FALSE; 135 BOOL fIsWow64Initialized = FALSE;
135 BOOL fRedirected = FALSE; 136 BOOL fRedirected = FALSE;
136 137
@@ -145,6 +146,7 @@ HRESULT ExecCommon64(
145 hr = WcaDisableWow64FSRedirection(); 146 hr = WcaDisableWow64FSRedirection();
146 ExitOnFailure(hr, "Failed to enable filesystem redirection."); 147 ExitOnFailure(hr, "Failed to enable filesystem redirection.");
147 fRedirected = TRUE; 148 fRedirected = TRUE;
149#endif
148 150
149 hr = BuildCommandLine(wzArgumentsProperty, &pwzCommand); 151 hr = BuildCommandLine(wzArgumentsProperty, &pwzCommand);
150 ExitOnFailure(hr, "Failed to get Command Line"); 152 ExitOnFailure(hr, "Failed to get Command Line");
@@ -157,6 +159,7 @@ HRESULT ExecCommon64(
157LExit: 159LExit:
158 ReleaseStr(pwzCommand); 160 ReleaseStr(pwzCommand);
159 161
162#ifndef _WIN64
160 if (fRedirected) 163 if (fRedirected)
161 { 164 {
162 WcaRevertWow64FSRedirection(); 165 WcaRevertWow64FSRedirection();
@@ -166,6 +169,7 @@ LExit:
166 { 169 {
167 WcaFinalizeWow64(); 170 WcaFinalizeWow64();
168 } 171 }
172#endif
169 173
170 return hr; 174 return hr;
171} 175}
diff --git a/src/ca/scaperfexec.cpp b/src/ca/scaperfexec.cpp
index 04c0648a..c5425754 100644
--- a/src/ca/scaperfexec.cpp
+++ b/src/ca/scaperfexec.cpp
@@ -87,10 +87,10 @@ extern "C" UINT __stdcall RegisterPerfmon(
87 87
88 HMODULE hMod = NULL; 88 HMODULE hMod = NULL;
89 PFNPERFCOUNTERTEXTSTRINGS pfnPerfCounterTextString; 89 PFNPERFCOUNTERTEXTSTRINGS pfnPerfCounterTextString;
90 DWORD_PTR dwRet; 90 DWORD dwRet;
91 LPWSTR pwzShortPath = NULL; 91 LPWSTR pwzShortPath = NULL;
92 DWORD_PTR cchShortPath = MAX_PATH; 92 DWORD cchShortPath = MAX_PATH;
93 DWORD_PTR cchShortPathLength = 0; 93 DWORD cchShortPathLength = 0;
94 94
95 LPWSTR pwzCommand = NULL; 95 LPWSTR pwzCommand = NULL;
96 96
diff --git a/src/ca/utilca.vcxproj b/src/ca/utilca.vcxproj
index a2391880..38d209b2 100644
--- a/src/ca/utilca.vcxproj
+++ b/src/ca/utilca.vcxproj
@@ -6,6 +6,30 @@
6 <Import Project="..\..\packages\WixToolset.WcaUtil.4.0.11\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.11\build\WixToolset.WcaUtil.props')" /> 6 <Import Project="..\..\packages\WixToolset.WcaUtil.4.0.11\build\WixToolset.WcaUtil.props" Condition="Exists('..\..\packages\WixToolset.WcaUtil.4.0.11\build\WixToolset.WcaUtil.props')" />
7 7
8 <ItemGroup Label="ProjectConfigurations"> 8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|ARM">
10 <Configuration>Debug</Configuration>
11 <Platform>ARM</Platform>
12 </ProjectConfiguration>
13 <ProjectConfiguration Include="Release|ARM">
14 <Configuration>Release</Configuration>
15 <Platform>ARM</Platform>
16 </ProjectConfiguration>
17 <ProjectConfiguration Include="Debug|ARM64">
18 <Configuration>Debug</Configuration>
19 <Platform>ARM64</Platform>
20 </ProjectConfiguration>
21 <ProjectConfiguration Include="Release|ARM64">
22 <Configuration>Release</Configuration>
23 <Platform>ARM64</Platform>
24 </ProjectConfiguration>
25 <ProjectConfiguration Include="Debug|X64">
26 <Configuration>Debug</Configuration>
27 <Platform>X64</Platform>
28 </ProjectConfiguration>
29 <ProjectConfiguration Include="Release|X64">
30 <Configuration>Release</Configuration>
31 <Platform>X64</Platform>
32 </ProjectConfiguration>
9 <ProjectConfiguration Include="Debug|Win32"> 33 <ProjectConfiguration Include="Debug|Win32">
10 <Configuration>Debug</Configuration> 34 <Configuration>Debug</Configuration>
11 <Platform>Win32</Platform> 35 <Platform>Win32</Platform>
@@ -20,7 +44,7 @@
20 <ProjectGuid>{076018F7-19BD-423A-ABBF-229273DA08D8}</ProjectGuid> 44 <ProjectGuid>{076018F7-19BD-423A-ABBF-229273DA08D8}</ProjectGuid>
21 <ConfigurationType>DynamicLibrary</ConfigurationType> 45 <ConfigurationType>DynamicLibrary</ConfigurationType>
22 <TargetName>utilca</TargetName> 46 <TargetName>utilca</TargetName>
23 <PlatformToolset>v141</PlatformToolset> 47 <PlatformToolset>v142</PlatformToolset>
24 <CharacterSet>Unicode</CharacterSet> 48 <CharacterSet>Unicode</CharacterSet>
25 <ProjectModuleDefinitionFile>utilca.def</ProjectModuleDefinitionFile> 49 <ProjectModuleDefinitionFile>utilca.def</ProjectModuleDefinitionFile>
26 <Description>WiX Toolset Util CustomAction</Description> 50 <Description>WiX Toolset Util CustomAction</Description>
diff --git a/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs b/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
index eb4588ec..75e0b14f 100644
--- a/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
+++ b/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
@@ -43,13 +43,13 @@ namespace WixToolsetTest.Util
43 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4FileShare", "Wix4FileSharePermissions"); 43 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4FileShare", "Wix4FileSharePermissions");
44 Assert.Equal(new[] 44 Assert.Equal(new[]
45 { 45 {
46 "Binary:Wix4UtilCA_X86\t[Binary data]", 46 "Binary:Wix4UtilCA_X64\t[Binary data]",
47 "CustomAction:Wix4ConfigureSmbInstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbInstall\t", 47 "CustomAction:Wix4ConfigureSmbInstall_X64\t1\tWix4UtilCA_X64\tConfigureSmbInstall\t",
48 "CustomAction:Wix4ConfigureSmbUninstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbUninstall\t", 48 "CustomAction:Wix4ConfigureSmbUninstall_X64\t1\tWix4UtilCA_X64\tConfigureSmbUninstall\t",
49 "CustomAction:Wix4CreateSmb_X86\t11265\tWix4UtilCA_X86\tCreateSmb\t", 49 "CustomAction:Wix4CreateSmb_X64\t11265\tWix4UtilCA_X64\tCreateSmb\t",
50 "CustomAction:Wix4CreateSmbRollback_X86\t11585\tWix4UtilCA_X86\tDropSmb\t", 50 "CustomAction:Wix4CreateSmbRollback_X64\t11585\tWix4UtilCA_X64\tDropSmb\t",
51 "CustomAction:Wix4DropSmb_X86\t11265\tWix4UtilCA_X86\tDropSmb\t", 51 "CustomAction:Wix4DropSmb_X64\t11265\tWix4UtilCA_X64\tDropSmb\t",
52 "CustomAction:Wix4DropSmbRollback_X86\t11585\tWix4UtilCA_X86\tCreateSmb\t", 52 "CustomAction:Wix4DropSmbRollback_X64\t11585\tWix4UtilCA_X64\tCreateSmb\t",
53 "Wix4FileShare:ExampleFileShare\texample\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tAn example file share\tINSTALLFOLDER", 53 "Wix4FileShare:ExampleFileShare\texample\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tAn example file share\tINSTALLFOLDER",
54 "Wix4FileSharePermissions:ExampleFileShare\tEveryone\t1", 54 "Wix4FileSharePermissions:ExampleFileShare\tEveryone\t1",
55 }, results.OrderBy(s => s).ToArray()); 55 }, results.OrderBy(s => s).ToArray());
@@ -61,13 +61,13 @@ namespace WixToolsetTest.Util
61 var folder = TestData.Get(@"TestData\CloseApplication"); 61 var folder = TestData.Get(@"TestData\CloseApplication");
62 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder }); 62 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
63 63
64 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4CloseApplication"); 64 var results = build.BuildAndQuery(BuildARM64, "Binary", "CustomAction", "Wix4CloseApplication");
65 Assert.Equal(new[] 65 Assert.Equal(new[]
66 { 66 {
67 "Binary:Wix4UtilCA_X86\t[Binary data]", 67 "Binary:Wix4UtilCA_A64\t[Binary data]",
68 "CustomAction:Wix4CheckRebootRequired_X86\t65\tWix4UtilCA_X86\tWixCheckRebootRequired\t", 68 "CustomAction:Wix4CheckRebootRequired_A64\t65\tWix4UtilCA_A64\tWixCheckRebootRequired\t",
69 "CustomAction:Wix4CloseApplications_X86\t1\tWix4UtilCA_X86\tWixCloseApplications\t", 69 "CustomAction:Wix4CloseApplications_A64\t1\tWix4UtilCA_A64\tWixCloseApplications\t",
70 "CustomAction:Wix4CloseApplicationsDeferred_X86\t3073\tWix4UtilCA_X86\tWixCloseApplicationsDeferred\t", 70 "CustomAction:Wix4CloseApplicationsDeferred_A64\t3073\tWix4UtilCA_A64\tWixCloseApplicationsDeferred\t",
71 "Wix4CloseApplication:CloseMyApp\texplorer.exe\t\t\t3\t\tMYAPPISRUNNING\t\t", 71 "Wix4CloseApplication:CloseMyApp\texplorer.exe\t\t\t3\t\tMYAPPISRUNNING\t\t",
72 }, results.OrderBy(s => s).ToArray()); 72 }, results.OrderBy(s => s).ToArray());
73 } 73 }
@@ -81,10 +81,10 @@ namespace WixToolsetTest.Util
81 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "RemoveFile", "Wix4InternetShortcut"); 81 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "RemoveFile", "Wix4InternetShortcut");
82 Assert.Equal(new[] 82 Assert.Equal(new[]
83 { 83 {
84 "Binary:Wix4UtilCA_X86\t[Binary data]", 84 "Binary:Wix4UtilCA_X64\t[Binary data]",
85 "CustomAction:Wix4CreateInternetShortcuts_X86\t3073\tWix4UtilCA_X86\tWixCreateInternetShortcuts\t", 85 "CustomAction:Wix4CreateInternetShortcuts_X64\t3073\tWix4UtilCA_X64\tWixCreateInternetShortcuts\t",
86 "CustomAction:Wix4RollbackInternetShortcuts_X86\t3329\tWix4UtilCA_X86\tWixRollbackInternetShortcuts\t", 86 "CustomAction:Wix4RollbackInternetShortcuts_X64\t3329\tWix4UtilCA_X64\tWixRollbackInternetShortcuts\t",
87 "CustomAction:Wix4SchedInternetShortcuts_X86\t1\tWix4UtilCA_X86\tWixSchedInternetShortcuts\t", 87 "CustomAction:Wix4SchedInternetShortcuts_X64\t1\tWix4UtilCA_X64\tWixSchedInternetShortcuts\t",
88 "RemoveFile:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tvtpzs3bw.lnk|WiX Toolset.lnk\tINSTALLFOLDER\t2", 88 "RemoveFile:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tvtpzs3bw.lnk|WiX Toolset.lnk\tINSTALLFOLDER\t2",
89 "Wix4InternetShortcut:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tINSTALLFOLDER\tWiX Toolset.lnk\thttps://wixtoolset.org\t0\t\t0", 89 "Wix4InternetShortcut:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tINSTALLFOLDER\tWiX Toolset.lnk\thttps://wixtoolset.org\t0\t\t0",
90 }, results.OrderBy(s => s).ToArray()); 90 }, results.OrderBy(s => s).ToArray());
@@ -113,19 +113,19 @@ namespace WixToolsetTest.Util
113 var folder = TestData.Get(@"TestData\EventManifest"); 113 var folder = TestData.Get(@"TestData\EventManifest");
114 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder }); 114 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
115 115
116 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4EventManifest", "Wix4XmlFile"); 116 var results = build.BuildAndQuery(BuildARM64, "Binary", "CustomAction", "Wix4EventManifest", "Wix4XmlFile");
117 Assert.Equal(new[] 117 Assert.Equal(new[]
118 { 118 {
119 "Binary:Wix4UtilCA_X86\t[Binary data]", 119 "Binary:Wix4UtilCA_A64\t[Binary data]",
120 "CustomAction:Wix4ConfigureEventManifestRegister_X86\t1\tWix4UtilCA_X86\tConfigureEventManifestRegister\t", 120 "CustomAction:Wix4ConfigureEventManifestRegister_A64\t1\tWix4UtilCA_A64\tConfigureEventManifestRegister\t",
121 "CustomAction:Wix4ConfigureEventManifestUnregister_X86\t1\tWix4UtilCA_X86\tConfigureEventManifestUnregister\t", 121 "CustomAction:Wix4ConfigureEventManifestUnregister_A64\t1\tWix4UtilCA_A64\tConfigureEventManifestUnregister\t",
122 "CustomAction:Wix4ExecXmlFile_X86\t11265\tWix4UtilCA_X86\tExecXmlFile\t", 122 "CustomAction:Wix4ExecXmlFile_A64\t11265\tWix4UtilCA_A64\tExecXmlFile\t",
123 "CustomAction:Wix4ExecXmlFileRollback_X86\t11521\tWix4UtilCA_X86\tExecXmlFileRollback\t", 123 "CustomAction:Wix4ExecXmlFileRollback_A64\t11521\tWix4UtilCA_A64\tExecXmlFileRollback\t",
124 "CustomAction:Wix4RegisterEventManifest_X86\t3073\tWix4UtilCA_X86\tCAQuietExec\t", 124 "CustomAction:Wix4RegisterEventManifest_A64\t3073\tWix4UtilCA_A64\tCAQuietExec\t",
125 "CustomAction:Wix4RollbackRegisterEventManifest_X86\t3393\tWix4UtilCA_X86\tCAQuietExec\t", 125 "CustomAction:Wix4RollbackRegisterEventManifest_A64\t3393\tWix4UtilCA_A64\tCAQuietExec\t",
126 "CustomAction:Wix4RollbackUnregisterEventManifest_X86\t3329\tWix4UtilCA_X86\tCAQuietExec\t", 126 "CustomAction:Wix4RollbackUnregisterEventManifest_A64\t3329\tWix4UtilCA_A64\tCAQuietExec\t",
127 "CustomAction:Wix4SchedXmlFile_X86\t1\tWix4UtilCA_X86\tSchedXmlFile\t", 127 "CustomAction:Wix4SchedXmlFile_A64\t1\tWix4UtilCA_A64\tSchedXmlFile\t",
128 "CustomAction:Wix4UnregisterEventManifest_X86\t3137\tWix4UtilCA_X86\tCAQuietExec\t", 128 "CustomAction:Wix4UnregisterEventManifest_A64\t3137\tWix4UtilCA_A64\tCAQuietExec\t",
129 "Wix4EventManifest:Manifest.dll\t[#Manifest.dll]", 129 "Wix4EventManifest:Manifest.dll\t[#Manifest.dll]",
130 "Wix4XmlFile:Config_Manifest.dllMessageFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@messageFileName[\\]]\tmessageFileName\t[Manifest.dll]\t4100\tManifest.dll\t", 130 "Wix4XmlFile:Config_Manifest.dllMessageFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@messageFileName[\\]]\tmessageFileName\t[Manifest.dll]\t4100\tManifest.dll\t",
131 "Wix4XmlFile:Config_Manifest.dllResourceFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@resourceFileName[\\]]\tresourceFileName\t[Manifest.dll]\t4100\tManifest.dll\t", 131 "Wix4XmlFile:Config_Manifest.dllResourceFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@resourceFileName[\\]]\tresourceFileName\t[Manifest.dll]\t4100\tManifest.dll\t",
@@ -203,5 +203,15 @@ namespace WixToolsetTest.Util
203 var result = WixRunner.Execute(newArgs.ToArray()); 203 var result = WixRunner.Execute(newArgs.ToArray());
204 result.AssertSuccess(); 204 result.AssertSuccess();
205 } 205 }
206
207 private static void BuildARM64(string[] args)
208 {
209 var newArgs = args.ToList();
210 newArgs.Add("-platform");
211 newArgs.Add("arm64");
212
213 var result = WixRunner.Execute(newArgs.ToArray());
214 result.AssertSuccess();
215 }
206 } 216 }
207} 217}
diff --git a/src/wixext/UtilCompiler.cs b/src/wixext/UtilCompiler.cs
index 672c3f68..273a03c7 100644
--- a/src/wixext/UtilCompiler.cs
+++ b/src/wixext/UtilCompiler.cs
@@ -875,7 +875,7 @@ namespace WixToolset.Util
875 875
876 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 876 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
877 877
878 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "CloseApplications", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 878 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "CloseApplications", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
879 879
880 if (!this.Messaging.EncounteredError) 880 if (!this.Messaging.EncounteredError)
881 { 881 {
@@ -1181,8 +1181,8 @@ namespace WixToolset.Util
1181 } 1181 }
1182 } 1182 }
1183 1183
1184 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbInstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 1184 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbInstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
1185 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbUninstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 1185 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbUninstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
1186 1186
1187 if (!this.Messaging.EncounteredError) 1187 if (!this.Messaging.EncounteredError)
1188 { 1188 {
@@ -1489,7 +1489,7 @@ namespace WixToolset.Util
1489 IconIndex = iconIndex, 1489 IconIndex = iconIndex,
1490 }); 1490 });
1491 1491
1492 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedInternetShortcuts", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 1492 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedInternetShortcuts", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
1493 1493
1494 // make sure we have a CreateFolder table so that the immediate CA can add temporary rows to handle installation and uninstallation 1494 // make sure we have a CreateFolder table so that the immediate CA can add temporary rows to handle installation and uninstallation
1495 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "CreateFolder"); 1495 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "CreateFolder");
@@ -1677,8 +1677,8 @@ namespace WixToolset.Util
1677 this.ParseHelper.CreateRegistryTuple(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false); 1677 this.ParseHelper.CreateRegistryTuple(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false);
1678 } 1678 }
1679 1679
1680 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "InstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 1680 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "InstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
1681 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "UninstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 1681 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "UninstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
1682 } 1682 }
1683 1683
1684 /// <summary> 1684 /// <summary>
@@ -2156,8 +2156,8 @@ namespace WixToolset.Util
2156 }); 2156 });
2157 } 2157 }
2158 2158
2159 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonInstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2159 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonInstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2160 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonUninstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2160 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonUninstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2161 } 2161 }
2162 2162
2163 2163
@@ -2204,8 +2204,8 @@ namespace WixToolset.Util
2204 }); 2204 });
2205 } 2205 }
2206 2206
2207 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestRegister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2207 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestRegister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2208 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestUnregister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2208 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestUnregister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2209 } 2209 }
2210 2210
2211 /// <summary> 2211 /// <summary>
@@ -2248,7 +2248,7 @@ namespace WixToolset.Util
2248 2248
2249 if (!this.Messaging.EncounteredError) 2249 if (!this.Messaging.EncounteredError)
2250 { 2250 {
2251 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedFormatFiles", this.Context.Platform, CustomActionPlatforms.X64 | CustomActionPlatforms.X86); 2251 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedFormatFiles", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2252 2252
2253 section.AddTuple(new WixFormatFilesTuple(sourceLineNumbers) 2253 section.AddTuple(new WixFormatFilesTuple(sourceLineNumbers)
2254 { 2254 {
@@ -2348,8 +2348,8 @@ namespace WixToolset.Util
2348 2348
2349 } 2349 }
2350 2350
2351 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestRegister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2351 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestRegister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2352 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestUnregister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2352 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestUnregister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2353 2353
2354 if (null != messageFile || null != parameterFile || null != resourceFile) 2354 if (null != messageFile || null != parameterFile || null != resourceFile)
2355 { 2355 {
@@ -2460,7 +2460,7 @@ namespace WixToolset.Util
2460 2460
2461 if (!this.Messaging.EncounteredError) 2461 if (!this.Messaging.EncounteredError)
2462 { 2462 {
2463 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedSecureObjects", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X64 | CustomActionPlatforms.X86); 2463 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedSecureObjects", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2464 2464
2465 var id = this.ParseHelper.CreateIdentifier("sec", objectId, tableName, domain, user); 2465 var id = this.ParseHelper.CreateIdentifier("sec", objectId, tableName, domain, user);
2466 section.AddTuple(new SecureObjectsTuple(sourceLineNumbers, id) 2466 section.AddTuple(new SecureObjectsTuple(sourceLineNumbers, id)
@@ -2809,7 +2809,7 @@ namespace WixToolset.Util
2809 2809
2810 if (!this.Messaging.EncounteredError) 2810 if (!this.Messaging.EncounteredError)
2811 { 2811 {
2812 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RemoveFoldersEx", this.Context.Platform, CustomActionPlatforms.X86); 2812 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RemoveFoldersEx", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2813 2813
2814 section.AddTuple(new WixRemoveFolderExTuple(sourceLineNumbers, id) 2814 section.AddTuple(new WixRemoveFolderExTuple(sourceLineNumbers, id)
2815 { 2815 {
@@ -2885,7 +2885,7 @@ namespace WixToolset.Util
2885 2885
2886 if (!this.Messaging.EncounteredError) 2886 if (!this.Messaging.EncounteredError)
2887 { 2887 {
2888 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RegisterRestartResources", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2888 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RegisterRestartResources", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2889 2889
2890 section.AddTuple(new WixRestartResourceTuple(sourceLineNumbers, id) 2890 section.AddTuple(new WixRestartResourceTuple(sourceLineNumbers, id)
2891 { 2891 {
@@ -2977,7 +2977,7 @@ namespace WixToolset.Util
2977 2977
2978 if (!this.Messaging.EncounteredError) 2978 if (!this.Messaging.EncounteredError)
2979 { 2979 {
2980 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedServiceConfig", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 2980 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedServiceConfig", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
2981 2981
2982 section.AddTuple(new ServiceConfigTuple(sourceLineNumbers) 2982 section.AddTuple(new ServiceConfigTuple(sourceLineNumbers)
2983 { 2983 {
@@ -3081,7 +3081,7 @@ namespace WixToolset.Util
3081 Attributes = attributes, 3081 Attributes = attributes,
3082 }); 3082 });
3083 3083
3084 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "TouchFileDuringInstall", this.Context.Platform, CustomActionPlatforms.X86); 3084 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "TouchFileDuringInstall", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
3085 } 3085 }
3086 } 3086 }
3087 3087
@@ -3285,7 +3285,7 @@ namespace WixToolset.Util
3285 3285
3286 if (null != componentId) 3286 if (null != componentId)
3287 { 3287 {
3288 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureUsers", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 3288 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureUsers", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
3289 } 3289 }
3290 3290
3291 if (!this.Messaging.EncounteredError) 3291 if (!this.Messaging.EncounteredError)
@@ -3669,7 +3669,7 @@ namespace WixToolset.Util
3669 } 3669 }
3670 } 3670 }
3671 3671
3672 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlConfig", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 3672 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlConfig", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
3673 } 3673 }
3674 3674
3675 /// <summary> 3675 /// <summary>
@@ -3720,7 +3720,7 @@ namespace WixToolset.Util
3720 3720
3721 private void AddReferenceToSchedXmlFile(SourceLineNumber sourceLineNumbers, IntermediateSection section) 3721 private void AddReferenceToSchedXmlFile(SourceLineNumber sourceLineNumbers, IntermediateSection section)
3722 { 3722 {
3723 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlFile", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86); 3723 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlFile", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM | CustomActionPlatforms.ARM64);
3724 } 3724 }
3725 3725
3726 /// <summary> 3726 /// <summary>
diff --git a/src/wixlib/UtilExtension.wxs b/src/wixlib/UtilExtension.wxs
index 50828416..62d9e37a 100644
--- a/src/wixlib/UtilExtension.wxs
+++ b/src/wixlib/UtilExtension.wxs
@@ -63,62 +63,6 @@
63 </UI> 63 </UI>
64 </Fragment> 64 </Fragment>
65 65
66 <Fragment>
67 <CustomAction Id="$(var.Prefix)FailWhenDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixFailWhenDeferred" Execute="deferred" Return="check" SuppressModularization="yes" />
68
69 <InstallExecuteSequence>
70 <Custom Action="$(var.Prefix)FailWhenDeferred$(var.Suffix)" Before="InstallFinalize" Overridable="yes">WIXFAILWHENDEFERRED=1 AND VersionNT &gt; 400</Custom>
71 </InstallExecuteSequence>
72 </Fragment>
73
74 <Fragment>
75 <CustomAction Id="$(var.Prefix)WaitForEvent$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="immediate" Return="check" SuppressModularization="yes" />
76
77 <InstallExecuteSequence>
78 <Custom Action="$(var.Prefix)WaitForEvent$(var.Suffix)" Before="InstallFinalize" Overridable="yes" />
79 </InstallExecuteSequence>
80 </Fragment>
81
82 <Fragment>
83 <CustomAction Id="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="deferred" Return="check" SuppressModularization="yes" />
84
85 <InstallExecuteSequence>
86 <Custom Action="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" After="InstallInitialize" Overridable="yes" />
87 </InstallExecuteSequence>
88 </Fragment>
89
90 <Fragment>
91 <CustomAction Id="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExitEarlyWithSuccess" Execute="immediate" Return="check" SuppressModularization="yes" />
92
93 <InstallExecuteSequence>
94 <Custom Action="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" After="FindRelatedProducts" Overridable="yes">NEWERVERSIONDETECTED AND VersionNT &gt; 400</Custom>
95 </InstallExecuteSequence>
96 </Fragment>
97
98 <Fragment>
99 <CustomAction Id="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRemoveFoldersEx" Execute="immediate" Return="ignore" />
100
101 <InstallExecuteSequence>
102 <Custom Action="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" Before="CostInitialize" />
103 </InstallExecuteSequence>
104 </Fragment>
105
106 <Fragment>
107 <CustomAction Id="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastSettingChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
108
109 <InstallExecuteSequence>
110 <Custom Action="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
111 </InstallExecuteSequence>
112 </Fragment>
113
114 <Fragment>
115 <CustomAction Id="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastEnvironmentChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
116
117 <InstallExecuteSequence>
118 <Custom Action="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
119 </InstallExecuteSequence>
120 </Fragment>
121
122 <!-- WiX OS-detection properties and custom action --> 66 <!-- WiX OS-detection properties and custom action -->
123 <Fragment> 67 <Fragment>
124 <CustomAction Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" /> 68 <CustomAction Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" />
@@ -382,43 +326,6 @@
382 <CustomActionRef Id="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" /> 326 <CustomActionRef Id="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" />
383 </Fragment> 327 </Fragment>
384 328
385 <!-- ShellExec custom actions (for when only one is needed; multiple executions need their own IDs) -->
386 <Fragment>
387 <PropertyRef Id="WixShellExecBinaryId" />
388 <CustomAction Id="$(var.Prefix)ShellExecBinary$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExecBinary" Execute="immediate" Return="check" Impersonate="yes" />
389 </Fragment>
390
391 <Fragment>
392 <PropertyRef Id="WixShellExecTarget" />
393 <CustomAction Id="$(var.Prefix)ShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes" />
394 </Fragment>
395
396 <Fragment>
397 <PropertyRef Id="WixUnelevatedShellExecTarget" />
398 <CustomAction Id="$(var.Prefix)UnelevatedShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixUnelevatedShellExec" Execute="immediate" Return="check" Impersonate="yes" />
399 </Fragment>
400
401 <Fragment>
402 <PropertyRef Id="WixQuietExecCmdLine" />
403 <CustomAction Id="$(var.Prefix)QuietExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
404 </Fragment>
405
406 <Fragment>
407 <PropertyRef Id="WixQuietExec64CmdLine" />
408 <CustomAction Id="$(var.Prefix)QuietExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
409 </Fragment>
410
411 <!-- SilentExec custom actions differ from QtExec in that they do not log the commandline or output of the exe -->
412 <Fragment>
413 <PropertyRef Id="WixSilentExecCmdLine" />
414 <CustomAction Id="$(var.Prefix)SilentExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec" Execute="immediate" Return="check" Impersonate="yes" />
415 </Fragment>
416
417 <Fragment>
418 <PropertyRef Id="WixSilentExec64CmdLine" />
419 <CustomAction Id="$(var.Prefix)SilentExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec64" Execute="immediate" Return="check" Impersonate="yes" />
420 </Fragment>
421
422 <Fragment> 329 <Fragment>
423 <BundleExtension Id="WixUtilBundleExtension" SourceFile="utilbe.dll" Name="WixUtilBundleExtension\utilbe.dll" /> 330 <BundleExtension Id="WixUtilBundleExtension" SourceFile="utilbe.dll" Name="WixUtilBundleExtension\utilbe.dll" />
424 </Fragment> 331 </Fragment>
diff --git a/src/wixlib/UtilExtension_Platform.wxi b/src/wixlib/UtilExtension_Platform.wxi
index 0d7fed09..c557e04b 100644
--- a/src/wixlib/UtilExtension_Platform.wxi
+++ b/src/wixlib/UtilExtension_Platform.wxi
@@ -3,221 +3,303 @@
3 3
4 4
5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs"> 5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?include caDecor.wxi ?> 6 <?include caDecor.wxi ?>
7 7
8 <!-- 8 <Fragment>
9 The following actions do not support X64. 9 <CustomAction Id="$(var.Prefix)FailWhenDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixFailWhenDeferred" Execute="deferred" Return="check" SuppressModularization="yes" />
10 --> 10
11 <?if $(var.platform)!=x64 ?> 11 <InstallExecuteSequence>
12 12 <Custom Action="$(var.Prefix)FailWhenDeferred$(var.Suffix)" Before="InstallFinalize" Overridable="yes">WIXFAILWHENDEFERRED=1 AND VersionNT &gt; 400</Custom>
13 <Fragment> 13 </InstallExecuteSequence>
14 <CustomAction Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCheckRebootRequired" Execute="immediate" Return="ignore" SuppressModularization="yes" /> 14 </Fragment>
15 15
16 <InstallExecuteSequence> 16 <Fragment>
17 <!-- Condition this so it runs on install and MMode, but not uninstall --> 17 <CustomAction Id="$(var.Prefix)WaitForEvent$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="immediate" Return="check" SuppressModularization="yes" />
18 <Custom Action="$(var.Prefix)CheckRebootRequired$(var.Suffix)" After="InstallFinalize" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 18
19 </InstallExecuteSequence> 19 <InstallExecuteSequence>
20 </Fragment> 20 <Custom Action="$(var.Prefix)WaitForEvent$(var.Suffix)" Before="InstallFinalize" Overridable="yes" />
21 21 </InstallExecuteSequence>
22 <Fragment> 22 </Fragment>
23 <CustomAction Id="$(var.Prefix)CloseApplications$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplications" Execute="immediate" Return="check" SuppressModularization="yes" /> 23
24 <CustomAction Id="$(var.Prefix)CloseApplicationsDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplicationsDeferred" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 24 <Fragment>
25 <CustomActionRef Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" /> 25 <CustomAction Id="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="deferred" Return="check" SuppressModularization="yes" />
26 26
27 <InstallExecuteSequence> 27 <InstallExecuteSequence>
28 <Custom Action="$(var.Prefix)CloseApplications$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 28 <Custom Action="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" After="InstallInitialize" Overridable="yes" />
29 </InstallExecuteSequence> 29 </InstallExecuteSequence>
30 </Fragment> 30 </Fragment>
31 31
32 <Fragment> 32 <Fragment>
33 <CustomAction Id="$(var.Prefix)RegisterRestartResources$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRegisterRestartResources$(var.Suffix)" Execute="immediate" Return="check" SuppressModularization="yes" /> 33 <CustomAction Id="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExitEarlyWithSuccess" Execute="immediate" Return="check" SuppressModularization="yes" />
34 34
35 <InstallExecuteSequence> 35 <InstallExecuteSequence>
36 <Custom Action="$(var.Prefix)RegisterRestartResources$(var.Suffix)" Before="InstallValidate" Overridable="yes" /> 36 <Custom Action="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" After="FindRelatedProducts" Overridable="yes">NEWERVERSIONDETECTED AND VersionNT &gt; 400</Custom>
37 </InstallExecuteSequence> 37 </InstallExecuteSequence>
38 </Fragment> 38 </Fragment>
39 39
40 <Fragment> 40 <Fragment>
41 <UIRef Id="ConfigureUsersErrorText" /> 41 <CustomAction Id="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRemoveFoldersEx" Execute="immediate" Return="ignore" />
42 42
43 <CustomAction Id="$(var.Prefix)ConfigureUsers$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureUsers" Execute="immediate" Return="check" SuppressModularization="yes" /> 43 <InstallExecuteSequence>
44 <CustomAction Id="$(var.Prefix)CreateUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateUser" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 44 <Custom Action="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" Before="CostInitialize" />
45 <CustomAction Id="$(var.Prefix)CreateUserRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 45 </InstallExecuteSequence>
46 <!-- RemoveUser is a type commit action because it is not possible to rollback the removal of a user --> 46 </Fragment>
47 <CustomAction Id="$(var.Prefix)RemoveUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="commit" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 47
48 48 <Fragment>
49 <InstallExecuteSequence> 49 <CustomAction Id="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastSettingChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
50 <Custom Action="$(var.Prefix)ConfigureUsers$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 50
51 </InstallExecuteSequence> 51 <InstallExecuteSequence>
52 </Fragment> 52 <Custom Action="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
53 53 </InstallExecuteSequence>
54 <Fragment> 54 </Fragment>
55 <UIRef Id="ConfigureSmbErrorsText" /> 55
56 56 <Fragment>
57 <CustomAction Id="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 57 <CustomAction Id="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastEnvironmentChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
58 <CustomAction Id="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 58
59 <CustomAction Id="$(var.Prefix)CreateSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 59 <InstallExecuteSequence>
60 <CustomAction Id="$(var.Prefix)CreateSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 60 <Custom Action="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
61 <CustomAction Id="$(var.Prefix)DropSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 61 </InstallExecuteSequence>
62 <CustomAction Id="$(var.Prefix)DropSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 62 </Fragment>
63 63
64 <InstallExecuteSequence> 64 <!-- ShellExec custom actions (for when only one is needed; multiple executions need their own IDs) -->
65 <Custom Action="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 65 <Fragment>
66 <Custom Action="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" After="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom> 66 <PropertyRef Id="WixShellExecBinaryId" />
67 </InstallExecuteSequence> 67 <CustomAction Id="$(var.Prefix)ShellExecBinary$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExecBinary" Execute="immediate" Return="check" Impersonate="yes" />
68 </Fragment> 68 </Fragment>
69 69
70 <Fragment> 70 <Fragment>
71 <UIRef Id="PerCounterDataErrorsText" /> 71 <PropertyRef Id="WixShellExecTarget" />
72 72 <CustomAction Id="$(var.Prefix)ShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes" />
73 <CustomAction Id="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="InstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" /> 73 </Fragment>
74 <CustomAction Id="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UninstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" /> 74
75 <CustomAction Id="$(var.Prefix)RegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 75 <Fragment>
76 <CustomAction Id="$(var.Prefix)UnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 76 <PropertyRef Id="WixUnelevatedShellExecTarget" />
77 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 77 <CustomAction Id="$(var.Prefix)UnelevatedShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixUnelevatedShellExec" Execute="immediate" Return="check" Impersonate="yes" />
78 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 78 </Fragment>
79 79
80 <InstallExecuteSequence> 80 <Fragment>
81 <Custom Action="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 81 <PropertyRef Id="WixQuietExecCmdLine" />
82 <Custom Action="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 82 <CustomAction Id="$(var.Prefix)QuietExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
83 </InstallExecuteSequence> 83 </Fragment>
84 </Fragment> 84
85 85 <Fragment>
86 <Fragment> 86 <PropertyRef Id="WixQuietExec64CmdLine" />
87 <UIRef Id="ConfigurePerfmonErrorsText" /> 87 <CustomAction Id="$(var.Prefix)QuietExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
88 88 </Fragment>
89 <CustomAction Id="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 89
90 <CustomAction Id="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 90 <!-- SilentExec custom actions differ from QtExec in that they do not log the commandline or output of the exe -->
91 <CustomAction Id="$(var.Prefix)RegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 91 <Fragment>
92 <CustomAction Id="$(var.Prefix)UnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 92 <PropertyRef Id="WixSilentExecCmdLine" />
93 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 93 <CustomAction Id="$(var.Prefix)SilentExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec" Execute="immediate" Return="check" Impersonate="yes" />
94 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 94 </Fragment>
95 95
96 <InstallExecuteSequence> 96 <Fragment>
97 <Custom Action="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 97 <PropertyRef Id="WixSilentExec64CmdLine" />
98 <Custom Action="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 98 <CustomAction Id="$(var.Prefix)SilentExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec64" Execute="immediate" Return="check" Impersonate="yes" />
99 </InstallExecuteSequence> 99 </Fragment>
100 </Fragment> 100
101 101 <Fragment>
102 <Fragment> 102 <CustomAction Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCheckRebootRequired" Execute="immediate" Return="ignore" SuppressModularization="yes" />
103 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" /> 103
104 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" /> 104 <InstallExecuteSequence>
105 <CustomAction Id="$(var.Prefix)RegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 105 <!-- Condition this so it runs on install and MMode, but not uninstall -->
106 <CustomAction Id="$(var.Prefix)UnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" /> 106 <Custom Action="$(var.Prefix)CheckRebootRequired$(var.Suffix)" After="InstallFinalize" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
107 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" /> 107 </InstallExecuteSequence>
108 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 108 </Fragment>
109 109
110 <InstallExecuteSequence> 110 <Fragment>
111 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 111 <CustomAction Id="$(var.Prefix)CloseApplications$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplications" Execute="immediate" Return="check" SuppressModularization="yes" />
112 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 112 <CustomAction Id="$(var.Prefix)CloseApplicationsDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplicationsDeferred" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
113 </InstallExecuteSequence> 113 <CustomActionRef Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" />
114 </Fragment> 114
115 115 <InstallExecuteSequence>
116 <Fragment> 116 <Custom Action="$(var.Prefix)CloseApplications$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
117 <CustomAction Id="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" /> 117 </InstallExecuteSequence>
118 <CustomAction Id="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" /> 118 </Fragment>
119 <CustomAction Id="$(var.Prefix)RegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 119
120 <CustomAction Id="$(var.Prefix)UnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" /> 120 <Fragment>
121 <CustomAction Id="$(var.Prefix)RollbackRegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" /> 121 <CustomAction Id="$(var.Prefix)RegisterRestartResources$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRegisterRestartResources$(var.Suffix)" Execute="immediate" Return="check" SuppressModularization="yes" />
122 <CustomAction Id="$(var.Prefix)RollbackUnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 122
123 123 <InstallExecuteSequence>
124 <InstallExecuteSequence> 124 <Custom Action="$(var.Prefix)RegisterRestartResources$(var.Suffix)" Before="InstallValidate" Overridable="yes" />
125 <Custom Action="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" After="$(var.Prefix)SchedXmlFile$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom> 125 </InstallExecuteSequence>
126 <Custom Action="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 126 </Fragment>
127 </InstallExecuteSequence> 127
128 </Fragment> 128 <Fragment>
129 129 <UIRef Id="ConfigureUsersErrorText" />
130 <Fragment> 130
131 <CustomAction Id="$(var.Prefix)SchedServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedServiceConfig" Execute="immediate" Return="check" SuppressModularization="yes" /> 131 <CustomAction Id="$(var.Prefix)ConfigureUsers$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureUsers" Execute="immediate" Return="check" SuppressModularization="yes" />
132 <CustomAction Id="$(var.Prefix)ExecServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecServiceConfig" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 132 <CustomAction Id="$(var.Prefix)CreateUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateUser" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
133 <CustomAction Id="$(var.Prefix)RollbackServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RollbackServiceConfig" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 133 <CustomAction Id="$(var.Prefix)CreateUserRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
134 134 <!-- RemoveUser is a type commit action because it is not possible to rollback the removal of a user -->
135 <InstallExecuteSequence> 135 <CustomAction Id="$(var.Prefix)RemoveUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="commit" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
136 <!-- Condition this so it runs on install and MMode, but not uninstall --> 136
137 <Custom Action="$(var.Prefix)SchedServiceConfig$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 137 <InstallExecuteSequence>
138 </InstallExecuteSequence> 138 <Custom Action="$(var.Prefix)ConfigureUsers$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
139 </Fragment> 139 </InstallExecuteSequence>
140 140 </Fragment>
141 <Fragment> 141
142 <CustomAction Id="$(var.Prefix)TouchFileDuringInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 142 <Fragment>
143 <CustomAction Id="$(var.Prefix)TouchFileDuringUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 143 <UIRef Id="ConfigureSmbErrorsText" />
144 <CustomAction Id="$(var.Prefix)ExecuteTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 144
145 <CustomAction Id="$(var.Prefix)RollbackTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 145 <CustomAction Id="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
146 146 <CustomAction Id="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
147 <InstallExecuteSequence> 147 <CustomAction Id="$(var.Prefix)CreateSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
148 <Custom Action="$(var.Prefix)TouchFileDuringUninstall" Before="RemoveFiles" Overridable="yes" /> 148 <CustomAction Id="$(var.Prefix)CreateSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
149 <Custom Action="$(var.Prefix)TouchFileDuringInstall" After="InstallFiles" Overridable="yes" /> 149 <CustomAction Id="$(var.Prefix)DropSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
150 </InstallExecuteSequence> 150 <CustomAction Id="$(var.Prefix)DropSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
151 </Fragment> 151
152 152 <InstallExecuteSequence>
153 <Fragment> 153 <Custom Action="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
154 <UIRef Id="XmlFileErrorsText" /> 154 <Custom Action="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" After="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom>
155 155 </InstallExecuteSequence>
156 <CustomAction Id="$(var.Prefix)SchedXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlFile" Execute="immediate" Return="check" SuppressModularization="yes" /> 156 </Fragment>
157 <CustomAction Id="$(var.Prefix)ExecXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFile" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 157
158 <CustomAction Id="$(var.Prefix)ExecXmlFileRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFileRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 158 <Fragment>
159 159 <UIRef Id="PerCounterDataErrorsText" />
160 <InstallExecuteSequence> 160
161 <Custom Action="$(var.Prefix)SchedXmlFile$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom> 161 <CustomAction Id="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="InstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
162 </InstallExecuteSequence> 162 <CustomAction Id="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UninstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
163 </Fragment> 163 <CustomAction Id="$(var.Prefix)RegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
164 164 <CustomAction Id="$(var.Prefix)UnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
165 <Fragment> 165 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
166 <UIRef Id="XmlConfigErrorsText" /> 166 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
167 167
168 <CustomAction Id="$(var.Prefix)SchedXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlConfig" Execute="immediate" Return="check" SuppressModularization="yes" /> 168 <InstallExecuteSequence>
169 <CustomAction Id="$(var.Prefix)ExecXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfig" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 169 <Custom Action="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
170 <CustomAction Id="$(var.Prefix)ExecXmlConfigRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfigRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 170 <Custom Action="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
171 171 </InstallExecuteSequence>
172 <InstallExecuteSequence> 172 </Fragment>
173 <Custom Action="$(var.Prefix)SchedXmlConfig$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom> 173
174 </InstallExecuteSequence> 174 <Fragment>
175 </Fragment> 175 <UIRef Id="ConfigurePerfmonErrorsText" />
176 176
177 <Fragment> 177 <CustomAction Id="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
178 <CustomAction Id="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedInternetShortcuts" Execute="immediate" Return="check" SuppressModularization="yes" /> 178 <CustomAction Id="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
179 <CustomAction Id="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRollbackInternetShortcuts" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 179 <CustomAction Id="$(var.Prefix)RegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
180 <CustomAction Id="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCreateInternetShortcuts" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 180 <CustomAction Id="$(var.Prefix)UnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
181 181 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
182 <InstallExecuteSequence> 182 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
183 <Custom Action="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" Before="RemoveFolders" Overridable="yes">VersionNT &gt; 400</Custom> 183
184 <Custom Action="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" Before="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom> 184 <InstallExecuteSequence>
185 <Custom Action="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" After="CreateShortcuts" Overridable="yes">VersionNT &gt; 400</Custom> 185 <Custom Action="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
186 </InstallExecuteSequence> 186 <Custom Action="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
187 </Fragment> 187 </InstallExecuteSequence>
188 188 </Fragment>
189 <?endif ?> 189
190 190 <Fragment>
191 191 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
192 <!-- 192 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
193 The following actions do support all platforms. 193 <CustomAction Id="$(var.Prefix)RegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
194 --> 194 <CustomAction Id="$(var.Prefix)UnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
195 <Fragment> 195 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
196 <UIRef Id="SecureObjectsErrors" /> 196 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
197 197
198 <CustomAction Id="$(var.Prefix)SchedSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjects" Execute="immediate" Return="check" SuppressModularization="yes" /> 198 <InstallExecuteSequence>
199 <CustomAction Id="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjectsRollback" Execute="immediate" Return="check" SuppressModularization="yes" /> 199 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
200 <CustomAction Id="$(var.Prefix)ExecSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjects" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 200 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
201 <CustomAction Id="$(var.Prefix)ExecSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjectsRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 201 </InstallExecuteSequence>
202 202 </Fragment>
203 <InstallExecuteSequence> 203
204 <!-- Condition this so it runs on install and MMode, but not uninstall --> 204 <Fragment>
205 <Custom Action="$(var.Prefix)SchedSecureObjects$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 205 <CustomAction Id="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
206 <Custom Action="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" After="UnpublishFeatures" Overridable="yes">VersionNT &gt; 400</Custom> 206 <CustomAction Id="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
207 </InstallExecuteSequence> 207 <CustomAction Id="$(var.Prefix)RegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
208 </Fragment> 208 <CustomAction Id="$(var.Prefix)UnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
209 209 <CustomAction Id="$(var.Prefix)RollbackRegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
210 <Fragment> 210 <CustomAction Id="$(var.Prefix)RollbackUnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
211 <CustomAction Id="$(var.Prefix)SchedFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedFormatFiles" Execute="immediate" Return="check" SuppressModularization="yes" /> 211
212 <CustomAction Id="$(var.Prefix)ExecFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 212 <InstallExecuteSequence>
213 <CustomAction Id="$(var.Prefix)RollbackFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 213 <Custom Action="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" After="$(var.Prefix)SchedXmlFile$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom>
214 214 <Custom Action="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
215 <InstallExecuteSequence> 215 </InstallExecuteSequence>
216 <Custom Action="$(var.Prefix)SchedFormatFiles$(var.Suffix)" After="InstallFiles" /> 216 </Fragment>
217 </InstallExecuteSequence> 217
218 </Fragment> 218 <Fragment>
219 219 <CustomAction Id="$(var.Prefix)SchedServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedServiceConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
220 <Fragment> 220 <CustomAction Id="$(var.Prefix)ExecServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecServiceConfig" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
221 <Binary Id="$(var.Prefix)UtilCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))utilca.dll" /> 221 <CustomAction Id="$(var.Prefix)RollbackServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RollbackServiceConfig" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
222 </Fragment> 222
223 <InstallExecuteSequence>
224 <!-- Condition this so it runs on install and MMode, but not uninstall -->
225 <Custom Action="$(var.Prefix)SchedServiceConfig$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
226 </InstallExecuteSequence>
227 </Fragment>
228
229 <Fragment>
230 <CustomAction Id="$(var.Prefix)TouchFileDuringInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
231 <CustomAction Id="$(var.Prefix)TouchFileDuringUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
232 <CustomAction Id="$(var.Prefix)ExecuteTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
233 <CustomAction Id="$(var.Prefix)RollbackTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
234
235 <InstallExecuteSequence>
236 <Custom Action="$(var.Prefix)TouchFileDuringUninstall" Before="RemoveFiles" Overridable="yes" />
237 <Custom Action="$(var.Prefix)TouchFileDuringInstall" After="InstallFiles" Overridable="yes" />
238 </InstallExecuteSequence>
239 </Fragment>
240
241 <Fragment>
242 <UIRef Id="XmlFileErrorsText" />
243
244 <CustomAction Id="$(var.Prefix)SchedXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlFile" Execute="immediate" Return="check" SuppressModularization="yes" />
245 <CustomAction Id="$(var.Prefix)ExecXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFile" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
246 <CustomAction Id="$(var.Prefix)ExecXmlFileRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFileRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
247
248 <InstallExecuteSequence>
249 <Custom Action="$(var.Prefix)SchedXmlFile$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
250 </InstallExecuteSequence>
251 </Fragment>
252
253 <Fragment>
254 <UIRef Id="XmlConfigErrorsText" />
255
256 <CustomAction Id="$(var.Prefix)SchedXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
257 <CustomAction Id="$(var.Prefix)ExecXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfig" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
258 <CustomAction Id="$(var.Prefix)ExecXmlConfigRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfigRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
259
260 <InstallExecuteSequence>
261 <Custom Action="$(var.Prefix)SchedXmlConfig$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
262 </InstallExecuteSequence>
263 </Fragment>
264
265 <Fragment>
266 <CustomAction Id="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedInternetShortcuts" Execute="immediate" Return="check" SuppressModularization="yes" />
267 <CustomAction Id="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRollbackInternetShortcuts" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
268 <CustomAction Id="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCreateInternetShortcuts" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
269
270 <InstallExecuteSequence>
271 <Custom Action="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" Before="RemoveFolders" Overridable="yes">VersionNT &gt; 400</Custom>
272 <Custom Action="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" Before="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom>
273 <Custom Action="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" After="CreateShortcuts" Overridable="yes">VersionNT &gt; 400</Custom>
274 </InstallExecuteSequence>
275 </Fragment>
276
277 <Fragment>
278 <UIRef Id="SecureObjectsErrors" />
279
280 <CustomAction Id="$(var.Prefix)SchedSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjects" Execute="immediate" Return="check" SuppressModularization="yes" />
281 <CustomAction Id="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjectsRollback" Execute="immediate" Return="check" SuppressModularization="yes" />
282 <CustomAction Id="$(var.Prefix)ExecSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjects" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
283 <CustomAction Id="$(var.Prefix)ExecSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjectsRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
284
285 <InstallExecuteSequence>
286 <!-- Condition this so it runs on install and MMode, but not uninstall -->
287 <Custom Action="$(var.Prefix)SchedSecureObjects$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
288 <Custom Action="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" After="UnpublishFeatures" Overridable="yes">VersionNT &gt; 400</Custom>
289 </InstallExecuteSequence>
290 </Fragment>
291
292 <Fragment>
293 <CustomAction Id="$(var.Prefix)SchedFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedFormatFiles" Execute="immediate" Return="check" SuppressModularization="yes" />
294 <CustomAction Id="$(var.Prefix)ExecFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
295 <CustomAction Id="$(var.Prefix)RollbackFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
296
297 <InstallExecuteSequence>
298 <Custom Action="$(var.Prefix)SchedFormatFiles$(var.Suffix)" After="InstallFiles" />
299 </InstallExecuteSequence>
300 </Fragment>
301
302 <Fragment>
303 <Binary Id="$(var.Prefix)UtilCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))utilca.dll" />
304 </Fragment>
223</Include> 305</Include>
diff --git a/src/wixlib/UtilExtension_arm.wxs b/src/wixlib/UtilExtension_arm.wxs
new file mode 100644
index 00000000..c3ec27f7
--- /dev/null
+++ b/src/wixlib/UtilExtension_arm.wxs
@@ -0,0 +1,8 @@
1<?xml version="1.0"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=arm ?>
7 <?include UtilExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/wixlib/UtilExtension_arm64.wxs b/src/wixlib/UtilExtension_arm64.wxs
new file mode 100644
index 00000000..1d552acf
--- /dev/null
+++ b/src/wixlib/UtilExtension_arm64.wxs
@@ -0,0 +1,8 @@
1<?xml version="1.0"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?define platform=arm64 ?>
7 <?include UtilExtension_Platform.wxi ?>
8</Wix>
diff --git a/src/wixlib/util.wixproj b/src/wixlib/util.wixproj
index e3688adf..720b184b 100644
--- a/src/wixlib/util.wixproj
+++ b/src/wixlib/util.wixproj
@@ -14,6 +14,8 @@
14 <Compile Include="UtilExtension.wxs" /> 14 <Compile Include="UtilExtension.wxs" />
15 <Compile Include="UtilExtension_x86.wxs" /> 15 <Compile Include="UtilExtension_x86.wxs" />
16 <Compile Include="UtilExtension_x64.wxs" /> 16 <Compile Include="UtilExtension_x64.wxs" />
17 <Compile Include="UtilExtension_arm.wxs" />
18 <Compile Include="UtilExtension_arm64.wxs" />
17 <EmbeddedResource Include="en-us.wxl" /> 19 <EmbeddedResource Include="en-us.wxl" />
18 <EmbeddedResource Include="de-de.wxl" /> 20 <EmbeddedResource Include="de-de.wxl" />
19 <EmbeddedResource Include="es-es.wxl" /> 21 <EmbeddedResource Include="es-es.wxl" />
@@ -22,9 +24,26 @@
22 <EmbeddedResource Include="pt-br.wxl" /> 24 <EmbeddedResource Include="pt-br.wxl" />
23 <EmbeddedResource Include="it-it.wxl" /> 25 <EmbeddedResource Include="it-it.wxl" />
24 </ItemGroup> 26 </ItemGroup>
27
25 <ItemGroup> 28 <ItemGroup>
26 <None Include="packages.config" /> 29 <None Include="packages.config" />
27 </ItemGroup> 30 </ItemGroup>
31
32 <ItemGroup>
33 <BindInputPaths Include="$(OutputPath)Win32">
34 <BindName>x86</BindName>
35 </BindInputPaths>
36 <BindInputPaths Include="$(OutputPath)x64)">
37 <BindName>x64</BindName>
38 </BindInputPaths>
39 <BindInputPaths Include="$(OutputPath)arm)">
40 <BindName>arm</BindName>
41 </BindInputPaths>
42 <BindInputPaths Include="$(OutputPath)arm64)">
43 <BindName>arm64</BindName>
44 </BindInputPaths>
45 </ItemGroup>
46
28 <ItemGroup> 47 <ItemGroup>
29 <ProjectReference Include="..\be\utilbe.vcxproj"> 48 <ProjectReference Include="..\be\utilbe.vcxproj">
30 <Name>utilbe</Name> 49 <Name>utilbe</Name>
@@ -33,18 +52,38 @@
33 <ProjectReference Include="..\ca\utilca.vcxproj"> 52 <ProjectReference Include="..\ca\utilca.vcxproj">
34 <Name>utilca</Name> 53 <Name>utilca</Name>
35 <Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project> 54 <Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project>
55 <Properties>Platform=ARM</Properties>
56 </ProjectReference>
57 <ProjectReference Include="..\ca\utilca.vcxproj">
58 <Name>utilca</Name>
59 <Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project>
60 <Properties>Platform=ARM64</Properties>
61 </ProjectReference>
62 <ProjectReference Include="..\ca\utilca.vcxproj">
63 <Name>utilca</Name>
64 <Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project>
65 <Properties>Platform=x86</Properties>
66 </ProjectReference>
67 <ProjectReference Include="..\ca\utilca.vcxproj">
68 <Name>utilca</Name>
69 <Project>{076018F7-19BD-423A-ABBF-229273DA08D8}</Project>
70 <Properties>Platform=x64</Properties>
36 </ProjectReference> 71 </ProjectReference>
37 </ItemGroup> 72 </ItemGroup>
73
38 <ItemGroup> 74 <ItemGroup>
39 <None Include="caerr.wxi" /> 75 <None Include="caerr.wxi" />
40 <None Include="caDecor.wxi" /> 76 <None Include="caDecor.wxi" />
41 <None Include="UtilExtension_Platform.wxi" /> 77 <None Include="UtilExtension_Platform.wxi" />
42 </ItemGroup> 78 </ItemGroup>
79
43 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " /> 80 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " />
44 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets') " /> 81 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\wix.targets') " />
82
45 <Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' "> 83 <Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
46 <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/." /> 84 <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/." />
47 </Target> 85 </Target>
86
48 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 87 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
49 <PropertyGroup> 88 <PropertyGroup>
50 <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> 89 <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>
@@ -52,5 +91,6 @@
52 <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'))" /> 91 <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'))" />
53 <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0104\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0104\build\WixToolset.MSBuild.props'))" /> 92 <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0104\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0104\build\WixToolset.MSBuild.props'))" />
54 </Target> 93 </Target>
94
55 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" /> 95 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" />
56</Project> 96</Project>