这似乎不会导致问题,但这是我真正想要了解的事情。
基本上,我们有四个版本的产品: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。
我注意到在前一个setups文件夹下的补丁设计器中,顺序确实是1.0.1,1.0,1.1.1。当然,这不是确定Windows Installer运行补丁转换的顺序吗?!
如果有人知道这种行为,或者可以指出我正确的方向,我非常感激! :)
谢谢!
更新
我认为这已经成为一个问题! :(我认为变换的错误排序在File表更新时会引起问题。因为它认为它从1.0.1转换为&gt; 1.1.2,所以它假设File表中的一行是在那里,只需要修改,当我们真正从1.0转换为&gt; 1.1.2并且该行不会出现在表中并需要添加!
有人有任何想法吗?
答案 0 :(得分:1)
修补程序转换顺序导致了我遇到的问题!
默认情况下,InstallShield似乎允许在要修补的版本之前的任何版本上安装补丁转换。换句话说,我在Windows Installer眼中有效的所有三个变换都可用于我在目标机器上的1.0安装!
为什么这是我不知道的!谁想要申请1.0.1 - &gt; 1.1.2转换为1.0安装?!?!?!真的吗?!?!?!
无论如何,如果要将转换应用于为其构建转换的版本(是的,怪异的senario!),应该使用的设置是更改版本关系属性时的设置您选择以前的设置和高级选项卡。
需要将其更改为 Previous Setup Version = Latest Setup Version 。哦,不要再看看InstallShield描述这个属性的解释,因为它完全错误和误导!
此更改现在意味着Windows Installer将为给定的已安装版本寻找正确的转换(即,它将为1.0安装选择1.0 - &gt; 1.1.2转换)。
老实说,我仍然无法相信这种行为不是默认行为,而且我对Install Shield给出的完全误导性的描述感到震惊和震惊。
呼吸......