1

我正在用 3.28 版开发我的 Bootstrapper 项目(使用 customBA)有一段时间了。

在交付之前,我将其更改为 3.29 并对其进行了测试。

当 3.29 完成时,它会调用机器中安装的先前版本。

我在以前的版本屏幕上单击了取消以关闭它们。

  1. 为什么以前的版本会在完成时显示?
  2. 是因为它们被缓存了吗?
  3. 如何避免这种情况发生?

UPDATE
是不是因为 UpgradeCode 相似,它会搜索相关的捆绑包?
如果是,我应该禁用缓存还是定义升级行为?

旧引导程序运行的以下日志文​​件显示“此捆绑包正在由相关捆绑包以'升级'类型运行。如何停止此操作?

[0B0C:2F34][2013-08-13T09:40:09]i001: Burn v3.7.1224.0, Windows v6.1 (Build 7601: Service Pack 1), path: C:\ProgramData\Package Cache\{b9f02a31-dacf-4347-b0d9-523d558be9af}\App1.Bootstrapper.exe, cmdline: '-uninstall -quiet -burn.related.upgrade -burn.embedded BurnPipe.{816C6916-20FF-4170-B29B-840713FCD78D} {84E89FE4-BE80-4A73-A176-FAF22D4C459F} 12176 -burn.unelevated BurnPipe.{55C769EC-EB8D-4196-BFA4-A4D4DB3390DB} {953972A4-1945-4ABB-AA00-3A323155D1D0} 9756'
[0B0C:2F34][2013-08-13T09:40:09]i003: This bundle is being run by a related bundle as type 'Upgrade'.
[0B0C:2F34][2013-08-13T09:40:09]i000: Setting string variable 'WixBundleLog' to value 'C:\Users\Ranjith\AppData\Local\Temp\App1.Bootstrapper_20130813094009.log'
[0B0C:2F34][2013-08-13T09:40:09]i000: Loading managed bootstrapper application.
[0B0C:2F34][2013-08-13T09:40:09]i000: Creating BA thread to run asynchronously.
[0B0C:1214][2013-08-13T09:40:09]i000: Setting string variable 'INSTALLER_LANGUAGE' to value 'en-US'
[0B0C:1214][2013-08-13T09:40:09]i000: Setting default INSTALLER_LANGUAGE as en-US
[0B0C:2F34][2013-08-13T09:40:10]i100: Detect begin, 4 packages
[0B0C:2F34][2013-08-13T09:40:10]i102: Detected related bundle: {17819140-8d62-4611-8636-2e672025ec96}, type: Upgrade, scope: PerMachine, version: 3.29.0.0, operation: None
[0B0C:2F34][2013-08-13T09:40:10]i102: Detected related bundle: {f5896a5a-1734-45ff-a55b-d9801f87bed3}, type: Upgrade, scope: PerMachine, version: 3.29.0.0, operation: None
[0B0C:2F34][2013-08-13T09:40:10]i103: Detected related package: {49CEDE58-FA13-49C9-8900-B9B71BADAC90}, scope: PerMachine, version: 3.29.0.0, language: 0 operation: Downgrade
[0B0C:2F34][2013-08-13T09:40:10]i103: Detected related package: {49CEDE58-FA13-49C9-8900-B9B71BADAC90}, scope: PerMachine, version: 3.29.0.0, language: 0 operation: Downgrade
[0B0C:2F34][2013-08-13T09:40:10]i101: Detected package: App1.Prerequisites.SQLServer_setup.exe, state: Absent, cached: Complete
[0B0C:2F34][2013-08-13T09:40:10]i101: Detected package: App1.Prerequisites_setup.exe, state: Absent, cached: Complete
[0B0C:2F34][2013-08-13T09:40:10]i101: Detected package: App1.Setup.en, state: Obsolete, cached: Complete
[0B0C:2F34][2013-08-13T09:40:10]i101: Detected package: App1.Setup.de, state: Obsolete, cached: None
[0B0C:2F34][2013-08-13T09:40:10]i199: Detect complete, result: 0x0
[0B0C:1214][2013-08-13T09:40:12]i000: Cancelling...
[0B0C:2F34][2013-08-13T09:40:12]i500: Shutting down, exit code: 0x0
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: INSTALLER_LANGUAGE = en-US
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleAction = 3
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleElevated = 1
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleInstalled = 1
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleLastUsedSource = D:\Projects\Client\App1\Development\trunk\src\App1_Installers\App1.Bootstrapper\bin\Release\
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleLog = C:\Users\Ranjith\AppData\Local\Temp\App1.Bootstrapper_20130813094009.log
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleManufacturer = Client GmbH
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleName = 
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleOriginalSource = D:\Projects\Client\App1\Development\trunk\src\App1_Installers\App1.Bootstrapper\bin\Release\App1.Bootstrapper.exe
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleProviderKey = {b9f02a31-dacf-4347-b0d9-523d558be9af}
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleTag = 
[0B0C:2F34][2013-08-13T09:40:12]i410: Variable: WixBundleVersion = 3.28.0.0
[0B0C:2F34][2013-08-13T09:40:12]i007: Exit code: 0x0, restarting: No
4

1 回答 1

1

是的,这是正常行为,这是因为相同的升级代码。当它看到类似的升级代码时,它知道这些是相关的包,然后安装较新的包并卸载以前的包。

您可以通过更改第二个版本的产品代码和升级代码来解决此问题,这些将是 2 个独立的产品,在捆绑和 MSI 级别进行更改,这将是最简单的解决方案。

如果您取出升级代码,那么捆绑包将是完全独立的,并且不会知道它们是相关的,因此它们将作为一个全新的包安装。或者,您可以将RELATEDBUNDLE Element元素设置为“DETECT”。

我已经在常规 MSI 上尝试过这个,对于常规 MSI,我们使用:

OnlyDetect YesNoType 设置为“yes”以检测产品和应用程序但不卸载。

UPGRADEVERSION 元素中。

如果您计划使用相同的升级代码,请确保取消自定义操作FINDRELATEDPRODUCTREMOVEEXISTINGPRODUCTS

您还需要更新 MSI 中的 RelatedBundle 和 UpgradeVersion,因为 burn 会在捆绑包和 MSI 级别处理升级。看到这个问题:stackoverflow.com/questions/13052950/wix-burn-uninstallation 我曾经有过类似的问题,并与 Rob Mensching 进行了一些电子邮件通信,他提到升级是在捆绑级别和包级别处理的。

为什么不希望安装以前的版本?通常最好的做法是升级,你为什么要远离它?

确保您正在安装的打包 MSI 能够共存。通常这意味着麻烦,因为它将文件安装到公共位置并且您不知道哪个版本存在于何处。

阅读这篇关于组件规则的文章。此外,如果您要走这条路线,您可以在 MSI 中使用 WixPath 属性。 WIXPATH

于 2013-08-14T13:58:12.840 回答