Люди,
у нас возникают проблемы с секвенированием при установке 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» ??
Марк