تسلسل تثبيت MSI - تشغيل البرامج النصية لقاعدة البيانات قبل بدء الخدمات

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

سؤال

يا قوم،

نواجه بعض مشكلات التسلسل أثناء تثبيت MSI.كجزء من تطبيقنا، نقوم بتثبيت مجموعة من الخدمات ونسمح للمستخدم باختيار بدء تشغيلها على الفور أو لاحقًا.

عندما تبدأ على الفور، يبدو أنها تبدأ مبكرًا جدًا في تسلسل التثبيت - قبل أن تتاح الفرصة لمدير قاعدة البيانات لدينا لتحديث قاعدة البيانات.

في الوقت الحالي، يبدو الإجراء المخصص لدينا لتشغيل أداة تحديث قاعدة البيانات على النحو التالي - يتم تشغيله بعد "InstallFinalize" - في وقت متأخر جدًا من العملية.

   <InstallExecuteSequence>
      <RemoveExistingProducts After='InstallInitialize' />
      <Custom Action='RunDbUpdateManagerAction' After='InstallFinalize'>
           DbUpdateManager=3</Custom>
   </InstallExecuteSequence>

ما هي الخطوة الأكثر ملاءمة للتشغيل بعد أو قبل التأكد من تنفيذ البرامج النصية لقاعدة البيانات؟ قبل أي من الخدمات المثبتة تبدأ؟هل هناك خطوة "قبل بدء الخدمة"؟

يحرر:

مجرد تحديد السمة "Before='StartServices'" على العلامة لم يحل مشكلتي.

أفترض أن الموضوع هو كالتالي:يحتوي الإجراء المخصص على "نص داخلي"، يمثل شرطًا، وهذا الشرط هو:"&DbUpdateManager=3".مما يمكنني استنتاجه من التجربة والخطأ، ربما يعني هذا "يجب نشر ميزة DbUpdateManager".

والآن المشكلة هي:تأتي "PublishFeature" في نهاية تسلسل التثبيت، قبل "InstallFinalize" مباشرة، وبالتأكيد بعد InstallServices / StartServices.لذلك عندما أحدد متطلبات "Before=StartServices"، فإن الشرط "يجب نشر ميزة DbUpdateManager" ليس صحيحًا بعد، لذلك لا يتم تنفيذ DbUpdateManager :-(

لقد حاولت إزالة الشرط - في هذه الحالة، أحيانًا لا يتم تنفيذ DbUpdateManager الخاص بي على الإطلاق، وأحيانًا أكثر من مرة - لا يوجد نمط واضح حقيقي لما يحدث عندما....

هل هناك المزيد من الأفكار؟؟هل هناك طريقة يمكنني من خلالها التحقق من وجود شرط "تم تثبيت ميزة DbUpdateManager" والذي سيكون صحيحًا بعد خطوة "InstallFiles"؟؟

مارك

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

المحلول

لا يوجد BeforeServiceStart, ، ولكن يمكنك المحاولة Before='StartServices'.

نصائح أخرى

حسنًا، يبدو أن marc_s حصل على إجابة على هذا السؤال في مقال آخر سؤال.ومع ذلك، نظرًا لأن الحل الذي قدمته كان مختلفًا بعض الشيء وأن السؤال الآخر يتطلب القليل من إعادة البناء للحصول على حل، فإليك بالضبط ما نجح بالنسبة لي:

...
<InstallExecuteSequence>
  <Custom Action="CopyConfigs" 
          After="InstallFiles"><![CDATA[&ProductFeature = 3]]></Custom>
</InstallExecuteSequence>
<CustomAction Id="CopyConfigs"
              FileKey="copySamples"
              ExeCommand=""
              Execute="deferred"
              Impersonate="no"/>

<Directory Id="TARGETDIR" Name="SourceDir">
...
  <Directory Id="Config" Name="Config">
    <Component Id="ShippedConfigs" Guid="{8E6344C8-2B3F-4654-8B42-C09E76200052}">
      <File Id="copySamples"
            Source="$(var.ProjectDir)config\Copy.Configs.Sample.cmd"
            KeyPath="no"
            DiskId="1" />
    </Component>
  </Directory>
</Directory>

<Feature Id="ProductFeature" Title="MyService" Level="1">
  <ComponentRef Id="ShippedConfigs" />
  ...
</Feature>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top