wix - 新版本的 Bootstrapper 完成后调用旧版本

标签 wix burn

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

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

3.29 完成后,它会调用计算机中安装的以前版本。

我在之前版本的屏幕上单击了“取消”来关闭它们。

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

更新
是不是因为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.

UPGRADEVERSION Element .

如果您计划使用相同的升级代码,请确保自定义操作 FINDRELATEDPRODUCTREMOVEEXISTINGPRODUCTS被压制了。

您还需要更新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/

相关文章:

visual-studio-2010 - 创建本地化的 WIX 3.6 Bootstrap 。

c++ - 每台机器安装 mapi 自定义表单服务器(基于消息)

Wix 工具集 : Successively check conditions

c++ - SHFileOperation 无法删除文件夹

wix WixStdbaLicenseUrl 在使用自定义主题时不会隐藏许可证

仅使用 .Net Core 的 Wix MSI Bootstrapper

c++ - 使用Wix Msi安装程序在安装后将CPP dll注册到COM中

service - "Service failed to start - Verify that you have sufficient privileges to start system services"

wix - 如何使用 Wix Bundle 卸载以前的版本并安装最新版本

user-interface - Bootstrapper 应用程序 UI - 如何在页面之间移动