installation - 从 VS 安装 MSI 升级到 Wix MSI 被视为卸载

标签 installation wix windows-installer setup-project

场景:

到目前为止我们一直使用VS 2010安装项目。今后将新版本迁移到 Wix。

问题:

Msiexec 将升级视为卸载+全新安装,而不仅仅是升级。

详细信息:

  • 我对新的 WIX 设置使用了相同的 UpgradeCode Guid
  • 我已根据需要添加了 MajorUpgrade 标记
  • 我还尝试使用 UpgradeUpgradeVersion 而不是 MajorUpgrade
  • 版本号已更新
  • 我已经重组了 WXS,看看这是否是问题所在

注意 - 系统正确地将两者识别为同一产品,并在安装过程中自动删除旧产品。

问题是,旧产品作为卸载而不是升级运行。 我设置了一个在卸载期间运行的自定义操作,这将删除用户数据。现在的问题是,由于某种原因,此自定义操作在升级过程中被触发。

如果是 2010 到 2010Wix 到 Wix,则不会发生此问题,仅当是 2010 到 Wix 时。

场景

  • 1.0(使用 2010 年构建)-> 1.1(使用 2010 年构建)- 未触发自定义操作
  • 1.0(使用 2010 年构建)-> 1.1(使用 Wix 构建)- 卸载自定义操作
  • 1.1(使用 Wix 构建)-> 1.2(使用 Wix 构建)- 未触发自定义操作

我在日志中注意到的唯一区别 -

VS 2010 至 2010

Action ended: MsiUnpublishAssemblies. Return value 1.
MSI (s) (90:A4) : Skipping action: _[guid].uninstall.SetProperty (condition is false)
MSI (s) (90:A4): Skipping action: _[guid].uninstall (condition is false)
MSI (s) (90:A4) [21:54:10:299]: Doing action: UnpublishComponents
Action start 21:54:10: UnpublishComponents.

2010 年至 WIX -

MsiUnpublishAssemblies. Return value 1.
Doing action: [guid].uninstall.SetProperty
Action start : [guid].uninstall.SetProperty.
MSI (s) (90:D4) : 
Note: 
1: 2235 
2:  
3: ExtendedType 
4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = '[guid].uninstall.SetProperty' 
MSI (s) (90:D4) : PROPERTY CHANGE: Adding [guid].uninstall property. Its value is '/installtype=notransaction /action=uninstall /LogFile= ... "[custom-action].exe" "oldmsi.tmp"'.
Action ended _[guid].SetProperty. Return value 1.
MSI (s) (90:D4) : Doing action: _[guid].uninstall
Action start : _[guid].uninstall.
MSI (s) (90:D4): 
Note: 
1: 2235 
2:  
3: ExtendedType 
4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = '_[guid].uninstall' 
Action ended: _[guid].uninstall. Return value 1.
MSI (s) (90:D4): Doing action: UnpublishComponents
Action start : UnpublishComponents.

我不知道为什么会发生这种卸载。如有任何帮助,我们将不胜感激。

最佳答案

没有足够的信息来确定,但这应该有帮助:

主要升级总是会卸载正在升级的产品。这是基于新产品代码、相同升级代码和增量版本以及相同安装上下文的主要升级的定义。这意味着您的问题取决于您对“卸载自定义操作”的假设

Visual Studio“卸载”自定义操作并不是真正的“卸载”自定义操作。当组件(由组件 id 表示)被删除时,它们会被调用。当您从 VS 2010 构建转到 VS 2010 构建时,组件 ID 保持不变(内部引用计数)并且组件保持安装状态。 WiX 版本也会发生同样的情况。当您从 VS 2010 构建转到 WiX 构建时,组件 ID 可能已更改,因此 VS 2010 构建的 MSI 中的组件被删除,因此调用自定义操作。

换句话说,问题很可能是 VS 2010 构建中的组件 ID(您看不到,因为 VS 2010 甚至没有暗示它们的存在)与 WiX 构建中的组件 ID 不同。

关于installation - 从 VS 安装 MSI 升级到 Wix MSI 被视为卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44396328/

相关文章:

wix - 如何使用 Wix 检查 .net 5(版本 3.11)

installation - MSI 安装失败,因为 "Another version of this product is already installed"

Python 安装编译错误

node.js - 在树莓派3上npm安装 Electron 错误

windows - 如何在 Windows 上安装 Poppler?

c - 在windows下安装gtk并使用gcc编译?

wix - 在 Wix 安装程序中放置多个快捷方式

visual-studio-2012 - WiX Bootstrap 应用程序

visual-studio - MSI 阻止注册表项修复

.net - 卸载旧版本的应用程序