Предупреждение о снижении рейтинга WIX отображается не вовремя - PullRequest
3 голосов
/ 19 декабря 2011

У меня странная проблема с установщиком 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.Это нужно, или, может быть, это не очень хороший подход, если его там нет?Или вы можете порекомендовать лучшее решение этой проблемы?

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Повторите раздел InstallExecuteSequence для InstallUISequence. Вы хотите, чтобы проверки происходили во время диалогов, поэтому они являются частью InstallUISequence. Вы также хотите, чтобы они происходили во время InstallExecuteSequence, если пользователь выполняет тихую установку, пропуская пользовательский интерфейс.

<InstallUISequence>
  <Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
  <Custom Action='NoDowngrade'    After='FindRelatedProducts'>NEWERFOUND</Custom>
<InstallExecuteSequence>

<InstallExecuteSequence>
  <Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
  <Custom Action='NoDowngrade'    After='FindRelatedProducts'>NEWERFOUND</Custom>
<InstallExecuteSequence>
1 голос
/ 19 декабря 2011

Используйте MajorUpgrade вместо.

...