Последовательность установки MSI - запускайте сценарии БД перед запуском сервисов

Folks,

мы сталкиваемся с некоторыми проблемами последовательности с нашей установкой MSI. В рамках нашего приложения мы устанавливаем несколько сервисов и позволяем пользователю выбирать, запускать их сразу или позже.

Когда они запускаются сразу же, кажется, что они запускаются слишком рано в последовательности установки - до того, как наш менеджер баз данных смог обновить базу данных.

Прямо сейчас наше настраиваемое действие для запуска средства обновления базы данных выглядит следующим образом - оно запускается после "InstallFinalize" - очень поздно в процессе.

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

Что было бы более подходящим шагом для запуска после или до того, чтобы убедиться, что сценарии БД выполняются до запуска какой-либо из установленных служб? Есть ли шаг "BeforeServiceStart"?

РЕДАКТИРОВАТЬ:

Простое определение атрибута "Before='StartServices'" для тега не решило мою проблему.

Я предполагаю, что проблема заключается в следующем: пользовательское действие имеет "внутренний текст", который представляет условие, и это условие: "&DbUpdateManager=3". Из того, что я могу сделать из проб и ошибок, это, вероятно, означает, что "функция DbUpdateManager должна быть опубликована".

Теперь проблема в том, что "PublishFeature" находится в конце последовательности установки, непосредственно перед "InstallFinalize", и определенно ПОСЛЕ InstallServices / StartServices. Поэтому, когда я указываю требование "Before=StartServices", условие "Функция DbUpdateManager должна быть опубликована" еще не выполняется, поэтому DbUpdateManager не выполняется:-(

Я попытался удалить условие - в этом случае мой DbUpdateManager иногда вообще не выполняется, иногда более чем один раз - нет четкой картины того, что происходит, когда.....

Есть еще идеи? Есть ли способ, которым я мог бы проверить условие "функция DbUpdateManager установлена", что будет верно после шага "InstallFiles"??

Марк

2 ответа

Решение

Здесь нет 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>
Другие вопросы по тегам