【问题标题】:Wix bootstrapper uninstalls a dependency that another application needsWix 引导程序卸载另一个应用程序需要的依赖项
【发布时间】:2019-02-04 14:14:55
【问题描述】:

我用两个独立的 wix 引导程序创建了两个自定义应用程序。

应用程序可以按任意顺序和任意组合安装。

这两个包的结构如下所示:

捆绑 A

  • 应用程序 A.msi
  • Dependency.msi

捆绑 B

  • 应用程序 B.msi
  • Dependency.msi

当我卸载我首先安装的任何应用程序时会出现问题,因为它会从另一个应用程序下卸载依赖项,导致其中一个或另一个在运行时失败。

如果安装了其他程序,我如何确保我的安装程序不会卸载依赖项?我需要为卸载编写自定义操作吗?

我对 Wix 引导程序非常陌生。我以前只写过简单的 msi 安装程序,所以我不确定从哪里开始,而且文档似乎很薄。

【问题讨论】:

  • 跑了一个快速测试,它似乎工作。两个 Bundle 中的 Dependency.msi 文件是否相同,或者在包代码或产品代码等方面是否存在差异?
  • 目前不能再看这个了,下面的建议是尽力而为。 Please have a read here about major upgrade problems。确保您测试升级方案。

标签: wix


【解决方案1】:

更新:请告诉我们您是如何测试捆绑包的。虚拟机?您在什么情况下会看到问题?


我不是捆绑专家,但这里有(将验证其中的一些,现在只是将其转储):

Burn Reference Counting:我的快速冒烟测试似乎奏效了 - Dependency.msi 在预期的时候仍然存在?

两个 Bundle 中的 Dependency.msi 文件是否相同,或者是否存在 例如包装代码或产品代码的差异? Please have a read here about major upgrade problems。确保你测试 升级场景。


原答案

Merge Module / WiX Include Files:您可以使用合并模块或 WiX 包含文件将相关设置的组件合并到多个 MSI 文件中。 merge modulesWiX Include Files 在编译时被合并到设置中。这样,当安装了两个主要设置时,每个组件的引用计数将为两个。在所有引用它们的安装程序都被卸载之前,卸载将不会删除已安装的组件。

  • WiX Include Files 基本上就像 C++ 中包含的普通头文件一样工作,它是一个预处理器操作 - 基本上只是字符串导入。您在许多设置中包含相同的 WiX sn-p。这是灵活的。它是代码重用,而不是二进制重用。结果与合并模块的结果相同 - 卸载所有实例时卸载组件。

  • Merge Module 是在编译时合并的小型 MSI 片段,因此您可以将共享的依赖组件注入到多个设置中。合并模块被合并为一个整体。合并到较新设置中的较新合并模块版本将升级所有已安装应用程序的共享文件(前提是您正确设计了合并模块)。二进制重用。

  • Chris Painter's IsWiX 教程展示了如何使用合并模块:https://github.com/iswix-llc/iswix-tutorials


永久:您可以将 Dependency.msi 设置设置为永久。这意味着它永远不会被卸载。升级能力必须经过测试。

一个捆绑包/一个 MSI:我想您可以将所有设置合并到一个 setup.exe 捆绑包中?您还可以使用 WiX 包含文件合并模块 将所有 MSI 文件合并到一个 setup.msi 中。在现实世界中几乎永远不会做正确的事:Wix to Install multiple Applications

条件:有一个条件可以添加到 MsiPackage 元素中。看起来它不能用于您的目的。会检查的。

部署技术:替代部署技术不是很好。


链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多