У меня странная проблема с установщиком WIX.Он имеет настраиваемое действие, предотвращающее установку приложения при появлении новой версии:
<Upgrade Id='SOME_GUID'>
<UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
Minimum='$(var.Version)' IncludeMinimum='yes'
Maximum='$(var.Version)' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
Minimum='$(var.Version)' IncludeMinimum='no' />
</Upgrade>
<InstallExecuteSequence>
<Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
<Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
<InstallExecuteSequence>
<CustomAction Id='AlreadyUpdated' Error='$(var.ProductName) has already been updated to $(var.Version) or newer.' />
<CustomAction Id='NoDowngrade' Error='A later version of $(var.ProductName) is already installed.' />
Ничего особенного - все как в учебнике по WIX.Я использую пользовательский интерфейс Mondo с несколькими собственными пользовательскими диалоговыми окнами.
<UIRef Id="WixUI_Mondo" />
Проблема в в том, что настраиваемое действие "NoDowngrade" выполняется после того, как я нажимаю кнопку "Установить", после всех шагов настройки.Я ожидал увидеть сообщение сразу после запуска установщика.Я проверил installExecuteSEquence в таблице установщика, используя Orca util - CA «AlreadyUpdated» имеет Sequence = 27. Событие FindRelatedProducts имеет Sequence = 25.27 используется другим моим действием, "NoDowngrade", почти таким же, как "AlreadyUpdated".Первый диалог пользовательского интерфейса должен отображаться в Sequence = 49, я полагаю - PrepareDlg имеет это значение в InstallUISequence.Похоже, что ничего не может произойти между FindRelatedProducts и PrepareDlg, кроме моих пользовательских действий.
Но удивительно, что журнал установки говорит об обратном:
MSI (c) (90:88) [13:08:03:768]: Running UISequence
MSI (c) (90:88) [13:08:03:768]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (c) (90:88) [13:08:03:768]: **Doing action: FindRelatedProducts**
Action 13:08:03: FindRelatedProducts. Searching for related applications
Action start 13:08:03: FindRelatedProducts.
FindRelatedProducts: Found application: {E25981A8-83D3-4183-B53C-F6E70FC9D1E0}
MSI (c) (90:88) [13:08:03:769]: PROPERTY CHANGE: Adding SELFFOUND property. Its value is '{E25981A8-83D3-4183-B53C-F6E70FC9D1E0}'.
Action ended 13:08:03: FindRelatedProducts. Return value 1.
MSI (c) (90:88) [13:08:03:770]: Doing action: PrepareDlg
--------------------
MSI (s) (2C:84) [13:08:10:658]: Running ExecuteSequence
MSI (s) (2C:84) [13:08:10:658]: **Doing action: FindRelatedProducts**
Action 13:08:10: FindRelatedProducts. Searching for related applications
Action start 13:08:10: FindRelatedProducts.
MSI (s) (2C:84) [13:08:10:660]: Skipping FindRelatedProducts action: already done on client side
Action ended 13:08:10: FindRelatedProducts. Return value 0.
MSI (s) (2C:84) [13:08:10:660]: Doing action: AppSearch
Action 13:08:10: AppSearch. Searching for installed applications
Action start 13:08:10: AppSearch.
MSI (s) (2C:84) [13:08:10:662]: Skipping AppSearch action: already done on client side
Action ended 13:08:10: AppSearch. Return value 0.
MSI (s) (2C:84) [13:08:10:662]: **Doing action: AlreadyUpdated**
Action 13:08:10: AlreadyUpdated.
Action start 13:08:10: AlreadyUpdated.
APS DTE Axiom Server has already been updated to 12.1.1.1582 or newer.
MSI (s) (2C:84) [13:08:12:420]: Product: APS DTE Axiom Server -- APS DTE Axiom Server has already been updated to 12.1.1.1582 or newer.
Action ended 13:08:12: AlreadyUpdated. Return value 3.
Итак, мы видим, что FindRelatedProducts пытался выполнить дваждыно AlreadyUpdated CA выполняется только со второй попытки.Учебники ничего не говорят о размещении этого CA в InstallUISEquence.Это нужно, или, может быть, это не очень хороший подход, если его там нет?Или вы можете порекомендовать лучшее решение этой проблемы?