Почему установщик Windows устанавливает мои исправления в неправильном порядке?

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

По сути, у нас есть четыре версии нашего продукта: 1.0 (2.6.0.0), 1.0.1 (2.6.1.0), 1.1.1 (2.6.3.0) и 1.1.2 (2.6.4.0). Мы просто тестируем полный и исправленный установщик для 1.1.2.

Странные вещи, которые мы видим, заключаются в том, что при применении патча с 1.0 -> 1.1.2 журнал для установщика показывает, что он сначала выбирает использование преобразования патча 1.0.1 -> 1.1.2, что для меня глупо. поскольку есть преобразование из 1.0 -> 1.1.2, его можно использовать. Лог ниже:

SequencePatches starts. Product code: {A9206E66-68A6-4A64-8ECA-F96D2635FB33}, Product version: 2.6.0.0, Upgrade code: {58142252-3B0E-44CA-99EC-F9FB3C4D976E}, Product language 1033
MSI (c) (A4:18) [14:11:53:235]: PATCH SEQUENCER: verifying the applicability of minor upgrade patch C:\DOCUME~1\Testuser\LOCALS~1\Temp\{3E3C7709-FF95-48AF-8836-5D62996F0FD4}\[productname]112enu_x86.msp against product code: {A9206E66-68A6-4A64-8ECA-F96D2635FB33}, product version: 2.6.0.0, product language 1033 and upgrade code: {58142252-3B0E-44CA-99EC-F9FB3C4D976E}
MSI (c) (A4:18) [14:11:53:235]: PATCH SEQUENCER: minor upgrade patch C:\DOCUME~1\Testuser\LOCALS~1\Temp\{3E3C7709-FF95-48AF-8836-5D62996F0FD4}\[productname]112enu_x86.msp is applicable.
MSI (c) (A4:18) [14:11:53:245]: SequencePatches returns success.
MSI (c) (A4:18) [14:11:53:245]: Final Patch Application Order:
MSI (c) (A4:18) [14:11:53:245]: {1721243D-5A87-4972-9226-E87EE0B87A08} - C:\DOCUME~1\Testuser\LOCALS~1\Temp\{3E3C7709-FF95-48AF-8836-5D62996F0FD4}\[productname]112enu_x86.msp
MSI (c) (A4:18) [14:11:53:245]: {1721243D-5A87-4972-9226-E87EE0B87A08} - C:\DOCUME~1\Testuser\LOCALS~1\Temp\{3E3C7709-FF95-48AF-8836-5D62996F0FD4}\[productname]112enu_x86.msp
MSI (c) (A4:18) [14:11:53:245]: Machine policy value 'DisablePatch' is 0
MSI (c) (A4:18) [14:11:53:245]: Machine policy value 'AllowLockdownPatch' is 0
MSI (c) (A4:18) [14:11:53:245]: Machine policy value 'DisableLUAPatching' is 0
MSI (c) (A4:18) [14:11:53:245]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (c) (A4:18) [14:11:53:245]: Turning off patch optimization. {1721243D-5A87-4972-9226-E87EE0B87A08} patch is not authored to support it.
MSI (c) (A4:18) [14:11:53:245]: Looking for patch transform: 101enuTo112enu

... More stuff ...

MSI (c) (A4:18) [14:11:53:265]: Disallowing uninstallation of patch {1721243D-5A87-4972-9226-E87EE0B87A08} because it adds new entries to table CreateFolder
MSI (c) (A4:18) [14:11:53:265]: Note: 1: 2205 2:  3: PatchPackage 
MSI (c) (A4:18) [14:11:53:265]: TRANSFORM: 'PatchPackage' table is missing or empty.  No pre-transform fixup necessary.
MSI (c) (A4:18) [14:11:53:265]: TRANSFORM: Applying regular transform to database.

... More stuff ...

MSI (c) (A4:18) [14:11:53:265]: Looking for patch transform: 10enuTo112enu
DEBUG: Error 2748:  Transform 10enuTo112enu invalid for package C:\WINDOWS\Installer\882d.msi. Expected product version <= 2.6.0.0, found product version 2.6.4.0.
1: 2748 2: 10enuTo112enu 3: C:\WINDOWS\Installer\882d.msi 4: 2.6.0.0 5: 2.6.4.0 
MSI (c) (A4:18) [14:11:53:265]: Skipping validation for patch transform #10enuTo112enu.  Will not apply because previous transform was invalid
MSI (c) (A4:18) [14:11:53:265]: Looking for patch transform: 111enuTo112enu
DEBUG: Error 2748:  Transform 111enuTo112enu invalid for package C:\WINDOWS\Installer\882d.msi. Expected product version <= 2.6.3.0, found product version 2.6.4.0.
1: 2748 2: 111enuTo112enu 3: C:\WINDOWS\Installer\882d.msi 4: 2.6.3.0 5: 2.6.4.0 
MSI (c) (A4:18) [14:11:53:265]: Skipping validation for patch transform #111enuTo112enu.  Will not apply because previous transform was invalid

Так почему же он выбирает сначала применить неправильное преобразование? Я предполагаю, что он все равно применяет его, потому что, когда он доходит до правильного преобразования, он знает, что версия продукта была обновлена ​​​​до 2.6.4.0.

Я заметил, что в дизайнере патчей в папке предыдущих настроек действительно порядок 1.0.1, 1.0, 1.1.1. Конечно, это не определяет порядок, в котором установщик Windows запускает преобразования патча?!

Если кто-нибудь знает об этом поведении или может указать мне правильное направление, я был бы очень признателен! :)

Спасибо!

Обновить

Я думаю, это стало проблемой! :( Я думаю, что неправильный порядок преобразований вызывает проблемы при обновлении таблицы файлов. Поскольку он думает, что преобразуется из 1.0.1 -> 1.1.2, он предполагает, что строка в таблице файлов существует и просто нуждается в изменении , когда на самом деле мы переходим из 1.0 -> 1.1.2, а строки нет в таблице и ее нужно добавить!

У кого-нибудь есть мысли?


person Andy    schedule 19.06.2012    source источник


Ответы (1)


Порядок преобразования патча вызывал проблему, с которой я столкнулся!

Похоже, что по умолчанию InstallShield разрешает установку преобразований исправлений в любой версии, предшествующей версии, для которой исправлено исправление. Другими словами, все три моих преобразования допустимы в глазах установщика Windows для использования в моей установке 1.0 на целевой машине!

Почему это я понятия не имею! Кто захочет применить преобразование 1.0.1 -> 1.1.2 к установке 1.0?!?!?! Действительно??!?!?!

В любом случае, параметр, который следует использовать, если вы хотите применить преобразование к версии, для которой оно было создано (да, странный сценарий!), заключается в изменении свойства Version Relationship при выборе предыдущая настройка и вкладка «Дополнительно».

Его необходимо изменить на Предыдущая версия установки = Последняя версия установки. О, и не утруждайте себя поиском объяснения этого свойства в описании InstallShield, так как оно совершенно неверно и вводит в заблуждение!

Изменение свойства отношения версий

Это изменение теперь будет означать, что установщик Windows будет искать правильное преобразование для данной установленной версии (т. е. он выберет преобразование 1.0 -> 1.1.2 для установки 1.0).

Честно говоря, я до сих пор не могу поверить, что такое поведение не является поведением по умолчанию, и я шокирован и потрясен совершенно вводящим в заблуждение описанием, которое дает Install Shield.

И дыхание....

person Andy    schedule 21.06.2012