Как можно сделать вызовом DLL DLL EAVE DLL WIX, чтобы использовать время выполнения отладки через модуль Merge?
-
26-09-2019 - |
Вопрос
Я пытаюсь создать отладочную сборку с помощью соответствующего установщика отладки для нашего продукта. Я новичок в Wix, поэтому, пожалуйста, простите любое наименьшее, содержащееся здесь. Отладка DLL в моем проекте зависит от обоих VS2008, так и для отладки VS2008SP1. Я создал функцию модуля Merge в Wix, чтобы объединить эти runchimes с моим установщиком.
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
<!-- Include our 'variables' file -->
<!--<?include variables.wxi ?>-->
<!--<Fragment>-->
<DirectoryRef Id="TARGETDIR">
<!-- Always install the 32 bit ATL/CRT libraries, but only install the 64 bit ones on a 64 bit build -->
<Merge Id="AtlFiles_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_ATL_x86.msm"
DiskId="1"
Language="1033"/>
<Merge Id="AtlPolicy_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_ATL_x86.msm"
DiskId="1"
Language="1033"/>
<Merge Id="CrtFiles_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_DebugCRT_x86.msm"
DiskId="1"
Language="1033"/>
<Merge Id="CrtPolicy_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_DebugCRT_x86.msm"
DiskId="1"
Language="1033"/>
<Merge Id="MfcFiles_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_DebugMFC_x86.msm"
DiskId="1"
Language="1033"/>
<Merge Id="MfcPolicy_x86"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_DebugMFC_x86.msm"
DiskId="1"
Language="1033"/>
<!-- If this is a 64 bit build, install the relevant modules -->
<?if $(env.Platform) = "x64" ?>
<Merge Id="AtlFiles_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_ATL_x86_x64.msm"
DiskId="1"
Language="1033"/>
<Merge Id="AtlPolicy_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_ATL_x86_x64.msm"
DiskId="1"
Language="1033"/>
<Merge Id="CrtFiles_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_DebugCRT_x86_x64.msm"
DiskId="1"
Language="1033"/>
<Merge Id="CrtPolicy_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_DebugCRT_x86_x64.msm"
DiskId="1"
Language="1033"/>
<Merge Id="MfcFiles_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_DebugMFC_x86_x64.msm"
DiskId="1"
Language="1033"/>
<Merge Id="MfcPolicy_x64"
SourceFile="$(env.CommonProgramFiles)\Merge Modules\policy_9_0_Microsoft_VC90_DebugMFC_x86_x64.msm"
DiskId="1"
Language="1033"/>
<?endif?>
</DirectoryRef>
<Feature Id="MS2008_SP1_DbgRuntime"
Title="VC2008 Debug Runtimes"
AllowAdvertise="no"
Display="hidden"
Level="1">
<!-- 32 bit libraries -->
<MergeRef Id="AtlFiles_x86"/>
<MergeRef Id="AtlPolicy_x86"/>
<MergeRef Id="CrtFiles_x86"/>
<MergeRef Id="CrtPolicy_x86"/>
<MergeRef Id="MfcFiles_x86"/>
<MergeRef Id="MfcPolicy_x86"/>
<!-- 64 bit libraries -->
<?if $(env.Platform) = "x64" ?>
<MergeRef Id="AtlFiles_x64"/>
<MergeRef Id="AtlPolicy_x64"/>
<MergeRef Id="CrtFiles_x64"/>
<MergeRef Id="CrtPolicy_x64"/>
<MergeRef Id="MfcFiles_x64"/>
<MergeRef Id="MfcPolicy_x64"/>
<?endif?>
</Feature>
<!--</Fragment>-->
</Include>
Если я делаю отладочную сборку установщика, я включаю эту функцию, как так:
<!-- The 'Feature' that contains the debug CRT/ATL libraries -->
<?if $(var.Configuration) = "Debug"?>
<?include ..\includes\MS2008_SP1_DbgRuntime.wxi?>
<?endif?>
Единственная проблема заключается в том, что мой установщик также включает в себя пользовательское действие, которое также зависит от выполнения отладки:
<!-- Private key installer -->
<Binary Id="InstallPrivateKey" SourceFile="..\InstallPrivateKey\win32\$(var.Configuration)\InstallPrivateKey.dll"></Binary>
<CustomAction Id='InstallKey' BinaryKey='InstallPrivateKey' DllEntry='InstallPrivateKey'/>
Итак, как я могу упаковать время выполнения отладки таким образом, чтобы пользовательские действия также имели доступ к нему?
Решение
Вы не можете. Многие из этих занятий зачастивают только в Installfinalize, что происходит в конце установки. Вместо этого настоятельно рекомендуется статически связать библиотеки CRT / ATL на пользовательские действия, чтобы пользовательские действия были полностью самостоятельными.