diff options
author | Bob Arnson <bob@joyofsetup.com> | 2020-05-25 21:49:38 -0400 |
---|---|---|
committer | Bob Arnson <bob@firegiant.com> | 2020-05-25 21:57:21 -0400 |
commit | 3aa4f95a7ac23567efbaebdae57007636e7f6058 (patch) | |
tree | a6985084bc89fc842b0869c8cbbf8aece9bb1b67 /src/ca | |
parent | 27afde67e4bb9ad06f8722a83984a09236516f69 (diff) | |
download | wix-3aa4f95a7ac23567efbaebdae57007636e7f6058.tar.gz wix-3aa4f95a7ac23567efbaebdae57007636e7f6058.tar.bz2 wix-3aa4f95a7ac23567efbaebdae57007636e7f6058.zip |
Support platform-specific CAs (including ARM64).
Diffstat (limited to 'src/ca')
-rw-r--r-- | src/ca/XmlConfig.cpp | 19 | ||||
-rw-r--r-- | src/ca/XmlFile.cpp | 23 | ||||
-rw-r--r-- | src/ca/qtexecca.cpp | 4 | ||||
-rw-r--r-- | src/ca/scaperfexec.cpp | 6 | ||||
-rw-r--r-- | src/ca/utilca.vcxproj | 26 |
5 files changed, 61 insertions, 17 deletions
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 | ||
956 | LExit: | 963 | LExit: |
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( | |||
157 | LExit: | 159 | LExit: |
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> |