Защо Windows Installer инсталира моите трансформации на корекция в грешен ред?

Това все още не изглежда да създава проблем, но е нещо, което наистина искам да разбера.

По принцип имаме четири версии на нашия продукт: 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 Installer изпълнява трансформациите на корекцията?!

Ако някой знае за това поведение или може да ме насочи в правилната посока, ще съм много благодарен! :)

Благодаря!

Актуализация

Мисля, че се превърна в проблем! :( Мисля, че неправилното подреждане на трансформациите причинява проблеми, когато таблицата с файлове се актуализира. Тъй като смята, че се трансформира от 1.0.1 -> 1.1.2, приема, че има ред в таблицата с файлове и просто трябва да се промени , когато наистина се трансформираме от 1.0 -> 1.1.2 и редът не присъства в таблицата и има нужда от добавяне!

Някой има ли някакви мисли?


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


Отговори (1)


Редът за преобразуване на корекцията причиняваше проблема, който изпитвах!

Изглежда, че по подразбиране InstallShield ще позволи преобразуванията на корекциите да бъдат инсталирани на всяка версия, по-ранна от версията, към която се извършва корекция. С други думи, всичките ми три трансформации са валидни в очите на Windows Installer за използване при моята инсталация 1.0 на целевата машина!

Защо е това, нямам идея! Кой би искал да приложи трансформация 1.0.1 -> 1.1.2 към инсталация 1.0?!?!?! Наистина ли??!?!?!

Както и да е, настройката, която трябва да се използва, ако искате да приложите трансформация към версията, за която трансформацията е създадена (да, странен сериал!), е да промените свойството Връзка на версията, когато изберете вашия предишна настройка и раздела за разширени.

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

Промяна на свойството за връзка на версията

Тази промяна сега ще означава, че Windows Installer ще търси правилната трансформация за дадената инсталирана версия (т.е. ще избере трансформацията 1.0 -> 1.1.2 за инсталацията 1.0).

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

И дъх....

person Andy    schedule 21.06.2012