我正在开发版本 3.28 的 Bootstrapper 项目(使用 customBA)一段时间。
在交付之前我将其更改为3.29并进行了测试。
3.29 完成后,它会调用计算机中安装的以前版本。
我在之前版本的屏幕上单击了“取消”来关闭它们。
- 为什么完成后会显示以前的版本?
- 是因为它们被缓存了吗?
- 如何避免这种情况发生?
更新
是不是因为UpgradeCode相似才搜索相关bundle?
如果是,我应该禁用缓存或定义升级行为吗?
旧 Bootstrap 运行的以下日志文件显示“此 bundle 正在由相关 bundle 以“升级”类型运行。我如何停止此操作?
[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
最佳答案
是的,这是正常行为,这是因为相同的升级代码。当它看到类似的升级代码时,它知道这些是相关的软件包,然后安装较新的软件包并卸载以前的软件包。
您可以通过更改第二个版本的产品代码和升级代码来解决此问题,这将是两个独立的产品,在 bundle 和 MSI 级别都进行更改是最简单的解决方案。
如果您取出升级代码,那么 bundle 将完全独立,并且不会知道它们是相关的,因此它们将作为全新的软件包安装。或者您可以设置 RELATEDBUNDLE Element元素只是“检测”。
我已经在常规 MSI 上尝试过此操作,对于常规 MSI,我们使用:
OnlyDetect YesNoType Set to "yes" to detect products and applications but do not uninstall.
如果您计划使用相同的升级代码,请确保自定义操作 FINDRELATEDPRODUCT和 REMOVEEXISTINGPRODUCTS被压制了。
您还需要更新MSI中的RelatedBundle和UpgradeVersion,因为burn会处理 bundle 和MSI级别的升级。请参阅这个问题:stackoverflow.com/questions/13052950/wix-burn-uninstallation 我以前也遇到过类似的问题,并与 Rob Mensching 进行了一些电子邮件通信,他提到升级是在 bundle 级别和包级别进行处理的。
为什么您不想安装以前的版本?通常最好的做法是升级,为什么要放弃它?
确保您正在安装的打包 MSI 能够共存。通常这意味着麻烦,因为它将把文件安装到公共(public)位置,并且您不知道哪个版本存在于哪里。
阅读这篇关于 Component Rules 的文章。 另外,如果您要走这条路线,您可以使用 MSI 中的 WixPath 属性。 WIXPATH
关于wix - 新版本的 Bootstrapper 完成后调用旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132189/