Последовательность установки 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>