【问题标题】:Installing a binary if it is already present using WIX installer使用 WIX 安装程序安装二进制文件(如果它已经存在)
【发布时间】:2018-06-14 05:23:32
【问题描述】:

背景:客户一直在复制一组二进制文件并将其放在特定位置,以便他们运行 NinjaTrader 指标。例如:假设客户“A”使用了First.dllsecond.dll客户“B”使用了First.dllThird.dll(他们确实使用了不使用任何安装程序,而只是从服务器位置复制)

当前要求:我必须创建一个包含所有可能更新的 DLL 的 WIX 安装程序,但需要注意的是,它应该只安装之前版本客户已经在他的机器上的那些更新的 dll。因此,如果新的 WIX 安装程序具有 First_1000.dllSecond_1000.dllThird_1000.dllFourth_1000.dll,那么它应该在 客户“A”和“B”上表现如下:

客户“A”:使用此安装程序,他的机器应该只有First_1000.dllSecond_1000.dll 而不是其他的。

客户“B”:使用此安装程序,他的机器应该只有First_1000.dllThird_1000.dll 而不是其他的。

我尝试过的:使用 directorySearchFileSearch,但我无法有条件地安装,要么安装全部要么安装没有任何。另一个问题是它不会删除以前版本的二进制文件。

我需要什么:如何调用CustomAction方法并使用返回结果来决定是否安装,这样我也可以删除以前版本的文件。

【问题讨论】:

  • 这是技术上的必需品(由于安全性、许可、大小等...),还是不了解所涉及技术挑战的经理要求的“必备”功能?您所描述的不是火箭科学,但仍然有很多复杂性需要处理和修复错误,而收益似乎很少?你可以相信这是准确的:没有人会对高级部署印象深刻,但如果你把它搞砸了,你会遇到很多麻烦。需求可以简化吗?
  • 不是必须的 也欢迎任何其他想法,我选择 wix 希望它有一些内置功能可以利用,但看起来不是很多。我可以只使用 wix 捆绑二进制文件从 CA 做所有事情吗?

标签: wix windows-installer


【解决方案1】:

总体建议:首先不要将部署作为开发任务。部署您的文件和设置,并在应用程序启动时进行任何高级配置。

如果您只需要一个文件副本和一些注册表项,请不要实现任何自定义逻辑 - 当然也不要只使用 WiX/MSI 作为“外壳”或“容器”在一个自定义操作中完成所有操作。

有许多工具可以帮助您部署软件:How to create windows installer(还列出了不是 MSI 工具的旧工具)。

有一次我写了this step-by-step answer for a WiX installer


如果您问我实现您想要的最简单的方法,那么我将通过单个 MSI 安装所有文件并使用应用程序本身通过许可证代码(如果有)调整对高级功能(如果适用)的任何访问)。这可以最大限度地降低您的部署复杂性,并将高级功能置于熟悉的环境中:在用户环境中进行应用程序调试(很可能)。

这避免了a world of pain of custom setup logic - 这是由sequencingimpersonationconditioningconcerns 严重过度复杂化,更不用说runtime dependencies 和其他挑战。总的来说,这会导致设置逻辑为very hard to debug 的整体问题 - 由于复杂性的所有这些方面的集体影响。

【讨论】:

    【解决方案2】:

    应该起作用的一般方法是:

    1. 将组件(每个包含一个文件)分组为功能,安装后将为每个客户做正确的事情。

    2. 使用基于文件搜索结果和搜索设置的属性值的特征条件。

    WiX 文档中的这个示例,Conditional Installation 似乎几乎完全符合您的要求。

    从长远来看,您应该构建一个不需要此类搜索行为的设置。你没有说为什么文件名会改变,但我猜你正在使用不同的名称作为一种版本控制。安装、补丁、服务包、升级等都根据其二进制版本替换文件。在精心设计的应用程序和安装中,现有文件的二进制版本可能都是 1.0。如果新文件都是 1.1 版本,那么所有旧文件都将被替换。如果是 1.0 版(因此未更改),则不会被替换。文件名不会改变。版本控制是更新的基础,所以我建议朝这个方向发展。

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多