Wix引导程序会卸载另一个应用程序需要的依赖项

时间:2019-02-04 14:14:55

标签: wix

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

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

这两个捆绑包的结构如下:

捆绑A

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

B包

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

更新 :请让我们知道您如何测试捆绑软件。虚拟机?在什么情况下您会看到问题?


我不是捆绑专家,但可以(将验证其中的一部分,暂时将其转储):

  

燃烧参考计数 :我的快速冒烟测试似乎有效-应当保留 Dependency.msi 吗?< / p>      

两个软件包中的 Dependency.msi 文件是否相同?   例如包装代码或产品代码的差异? Please have a read here about major upgrade problems。确保您测试   升级方案。


原始答案

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

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

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

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


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

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

条件 :有一个条件可以添加到MsiPackage元素中。似乎无法将其用于您的目的。会检查。

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


链接