كيف يمكن إجراء مكالمة DLL مخصصة WIX لاستخدام وقت تشغيل التصحيح عبر وحدة دمج؟

StackOverflow https://stackoverflow.com/questions/2622094

سؤال

أحاول إنشاء بناء تصحيح مع تثبيت تصحيح مقابل لمنتجاتنا. أنا جديد على WIX لذا أرجو أن تسامح أي سذاجة موجودة هنا. تعتمد DLLS DELUG في مشروعي على كل من VS2008 و VS2008SP1 تصحيح أوقات التصحيح. لقد قمت بإنشاء ميزة Merge Module في Wix لتشغيل هذه الأوقات مع المثبت الخاص بي.

<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> 

إذا كنت أقوم بإنشاء تصحيح للمثبت ، أقوم بتضمين هذه الميزة مثل SO:

<!-- 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'/>

فكيف يمكنني تعبئة وقت تشغيل التصحيح بطريقة تجعل الإجراء المخصص أيضًا يمكنه الوصول إليه؟

هل كانت مفيدة؟

المحلول

لا يمكنك. لا يتم ارتكاب العديد من هذه الأوقات إلا في التثبيت الذي يحدث في نهاية التثبيت. بدلاً من ذلك ، يوصى بشدة بربط مكتبات CRT/ATL بشكل ثابت بالإجراءات المخصصة بحيث تكون الإجراءات المخصصة محتوية على نفسها تمامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top