【问题标题】:Upgrade from VS Setup MSI to Wix MSI being treated as uninstall从 VS Setup MSI 升级到 Wix MSI 被视为卸载
【发布时间】:2017-06-06 17:32:34
【问题描述】:

场景:

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

问题:

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

详情:

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

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

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

如果是2010 to 2010Wix to Wix,则不会出现此问题,只有在2010 to 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.

我不知道为什么会发生这种卸载。任何帮助表示赞赏。

【问题讨论】:

    标签: installation wix windows-installer setup-project


    【解决方案1】:

    没有足够的信息可以确定,但这应该会有所帮助:

    重大升级始终会卸载正在升级的产品。这就是基于新的 ProductCode、相同的 UpgradeCode 和递增的版本以及相同的安装上下文的重大升级的定义。这意味着您的问题取决于您对“卸载自定义操作”的假设

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

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

    【讨论】:

    • 好的。我会看看我是否可以使用 Wix's Dark 匹配 ID,看看它是否有帮助。您是否知道一种解决方法,我可以阻止在已安装的 msi 中执行卸载自定义操作?
    • 如果您在卸载自定义操作条件中使用“NOT UPGRADINGPRODUCTCODE”,由于升级而被卸载时它不会运行,只有在产品被完全卸载时才会运行。
    • 卸载逻辑在旧产品的卸载中是“硬编码的”,因此除非您修补旧产品,否则无法更改它。 “NOT UPGRADINGPRODUCTCODE”条件适用于被卸载/升级的旧产品,所以你不能在不打补丁的情况下将它添加到旧产品中。
    • 啊,是的,对已经部署的安装程序无能为力,除非您想知道如何修补它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多