Последовательность установки MSI - запускать сценарии БД перед запуском сервисов - PullRequest
3 голосов
/ 25 марта 2009

Люди,

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

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

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

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

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

EDIT:

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

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

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

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

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

Марк

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

Что ж, похоже, что 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>
1 голос
/ 25 марта 2009

Нет BeforeServiceStart, но вы можете попробовать Before='StartServices'.

...