【发布时间】:2018-10-20 03:49:46
【问题描述】:
我正在运行 Wix 3.11.1,当尝试升级时,升级会进入维护模式,并在添加/删除程序列表中留下两个条目。
Product.wxs 的简短版本具有以下内容:
<Product Id="*" Name="Boo" Language="1033" Version="1.1.0.0" Manufacturer="Foo"
UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
<MajorUpgrade AllowDowngrades="no" AllowSameVersionUpgrades="yes"
DowngradeErrorMessage="!(loc.NewerVersionInstalled)" />
升级代码: 3F55CE54-8409-4918-9906-D8AD18794BFC
产品和包装代码为:
1.0
产品编号 FC49F622-02E6-40D9-ACD9-92BDD4AF5979
封装代码 6C49FAA1-5B11-4173-80A7-A7B3FA4313AE
1.1
产品编号 4871555F-F369-4159-9EF0-4BBDF07B6842
封装代码 3594D7C2-D5AC-4A41-A8C6-6E3D63C6ACA0
当我运行带有日志记录的安装程序时,我会得到如下所示的日志信息。 当升级代码相同且产品和包代码不同,并且版本在前三位数字中递增时,我认为应该进行升级,但事实并非如此。此外,这两个版本都是每台机器的,因此不应停止删除以前的版本。日志显示维护模式并且从不执行删除以前的版本。我在 msi 中有一个升级表,它显示 1.1 的最大值和 WIX_UPGRADE_DETECTED 作为操作。有谁知道什么会导致它进入维护模式而不是进行重大升级?
MSI (s) (68:9C) [15:04:38:423]: Doing action: RemoveExistingProducts
Action 15:04:38: RemoveExistingProducts. Removing applications
Action start 15:04:38: RemoveExistingProducts.
RemoveExistingProducts: Application: {FC49F622-02E6-40D9-ACD9-92BDD4AF5979}, Command line: UPGRADINGPRODUCTCODE={4871555F-F369-4159-9EF0-4BBDF07B6842} CLIENTPROCESSID=8344 CLIENTUILEVEL=0 MSICLIENTUSESEXTERNALUI=1 REMOVE=ALL
MSI (s) (68:BC) [15:04:38:423]: Resetting cached policy values
MSI (s) (68:BC) [15:04:38:423]: Machine policy value 'Debug' is 0
MSI (s) (68:BC) [15:04:38:423]: ******* RunEngine:
******* Product: {FC49F622-02E6-40D9-ACD9-92BDD4AF5979}
******* Action:
******* CommandLine: **********
MSI (s) (68:BC) [15:04:38:423]: Note: 1: 2203 2: C:\WINDOWS\Installer\inprogressinstallinfo.ipi 3: -2147287038
MSI (s) (68:BC) [15:04:38:423]: Machine policy value 'LimitSystemRestoreCheckpointing' is 0
MSI (s) (68:BC) [15:04:38:423]: Note: 1: 1717 2: Boo
MSI (s) (68:BC) [15:04:38:423]: Calling SRSetRestorePoint API. dwRestorePtType: 1, dwEventType: 102, llSequenceNumber: 0, szDescription: "Removed Boo".
MSI (s) (68:BC) [15:04:38:439]: The call to SRSetRestorePoint API succeeded. Returned status: 0, llSequenceNumber: 45.
MSI (s) (68:BC) [15:04:38:439]: End dialog not enabled
MSI (s) (68:BC) [15:04:38:439]: Original package ==> C:\WINDOWS\Installer\1179bb4.msi
MSI (s) (68:BC) [15:04:38:439]: Package we're running from ==> C:\WINDOWS\Installer\1179bb4.msi
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: Uninstall Flags override found.
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: Uninstall VersionNT override found.
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: Uninstall ServicePackLevel override found.
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: looking for appcompat database entry with ProductCode '{FC49F622-02E6-40D9-ACD9-92BDD4AF5979}'.
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (68:BC) [15:04:38:439]: Machine policy value 'DisablePatch' is 0
MSI (s) (68:BC) [15:04:38:439]: Machine policy value 'AllowLockdownPatch' is 0
MSI (s) (68:BC) [15:04:38:439]: Machine policy value 'DisableLUAPatching' is 0
MSI (s) (68:BC) [15:04:38:439]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: looking for appcompat database entry with ProductCode '{FC49F622-02E6-40D9-ACD9-92BDD4AF5979}'.
MSI (s) (68:BC) [15:04:38:439]: APPCOMPAT: no matching ProductCode found in database.
MSI (s) (68:BC) [15:04:38:439]: Transforms are not secure.
MSI (s) (68:BC) [15:04:38:439]: Command Line: UPGRADINGPRODUCTCODE={4871555F-F369-4159-9EF0-4BBDF07B6842} CLIENTPROCESSID=8344 CLIENTUILEVEL=0 MSICLIENTUSESEXTERNALUI=1 REMOVE=ALL
MSI (s) (68:BC) [15:04:38:439]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{6C49FAA1-5B11-4173-80A7-A7B3FA4313AE}'.
MSI (s) (68:BC) [15:04:38:439]: Product Code passed to Engine.Initialize: '{FC49F622-02E6-40D9-ACD9-92BDD4AF5979}'
MSI (s) (68:BC) [15:04:38:439]: Product Code from property table before transforms: '{FC49F622-02E6-40D9-ACD9-92BDD4AF5979}'
MSI (s) (68:BC) [15:04:38:439]: Product Code from property table after transforms: '{FC49F622-02E6-40D9-ACD9-92BDD4AF5979}'
MSI (s) (68:BC) [15:04:38:439]: Product registered: entering maintenance mode
更新:
这确实是一个捆绑安装。我认为 msi 是罪魁祸首,因为我认为 Wix 包会使用 msiexec 来执行卸载。
在我们的构建中,我们使用搜索词“0.0.0.0”来搜索包和 msi 中的版本,然后我们用正确的版本进行替换,并在构建结束时恢复 Bundle.wxs 和产品。 wxs。
当安装程序正在处理时,开发人员必须在构建文件中注释掉恢复,以便处理文件。开发人员完成后,他们需要将版本设置回“0.0.0.0”。在其中一个安装程序签入中,有人不得不忘记改回“0.0.0.0”。
我自己尝试了两个版本的 msi,升级确实删除了原始安装的条目。但是,即使版本正确,捆绑升级仍然会留下第二个条目。
【问题讨论】:
-
您需要显示整个日志。您只发布了 RemoveExistingProducts 操作的开始,是的,将处于维护模式并卸载旧产品,并设置 UPGRADINGPRODUCTCODE 操作(如预期的升级卸载),正如您从 ProductCode 中看到的那样,它是正在卸载 1.0。
-
我刚刚添加了完整日志文件的链接
-
再次查看日志,似乎很明显这是一个 WiX Bundle 安装。我对捆绑包的帮助太少了——我知道他们有自己的升级代码,但还没有测试过这会如何影响事情。您是否在未重建包含的 MSI 文件的情况下重建了捆绑包,然后重新安装?一个包通常通过设置我相信的 ARPSYSTEMCOMPONENT 来隐藏其组成的 MSI 文件,然后它添加一个包 ARP 条目 - 可选地允许 MSI 文件也显示在 ARP 中。你说的维护模式,就是捆绑维护模式吗?
标签: wix windows-installer