使用WIX安装程序安装二进制文件(如果已存在)

使用WIX安装程序安装二进制文件(如果已存在),wix,windows-installer,Wix,Windows Installer,背景:客户一直在复制一组二进制文件,并将其放在特定位置,以便运行NinjaTrader指示器。例如:假设客户“A使用了第一个.dll,第二个.dll,客户“B”使用了第一个.dll和第三个.dll(他们没有使用任何安装程序,只是从服务器位置复制) 当前要求:我必须创建一个WIX安装程序,其中包含所有可能的更新dll,并警告说,它应该只安装那些客户已经在其机器上安装了以前版本的更新dll。因此,如果新的WIX安装程序具有第一个\u 1000.dll,第二个\u 1000.dll,第三个\u 100

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

当前要求:我必须创建一个WIX安装程序,其中包含所有可能的更新dll,并警告说,它应该只安装那些客户已经在其机器上安装了以前版本的更新dll。因此,如果新的WIX安装程序具有
第一个\u 1000.dll
第二个\u 1000.dll
第三个\u 1000.dll
第四个\u 1000.dll
,那么它应该在客户“A”和“B”上表现如下:

客户“A”:使用此安装程序,他的机器应该只有
第一个\u 1000.dll
第二个\u 1000.dll
,而不是其他

客户“B”:使用此安装程序,他的机器应该只有
第一个\u 1000.dll
第三个\u 1000.dll
,而不是其他

我尝试的内容:使用目录搜索文件搜索,但我无法有条件地安装,它要么安装全部,要么不安装。另一个问题是它不会删除以前版本的二进制文件

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

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

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

有许多工具可以帮助您部署软件:(还列出了不是MSI工具的遗留工具)

有一次我写道


如果你问我实现你想要的最简单的方法,那么我会通过单个MSI安装所有文件,并使用应用程序本身通过许可证代码(如果有)调整对高级功能的访问(如果适用)。这将最小化部署复杂性,并将高级功能放在熟悉的上下文中:在用户上下文中调试应用程序(最有可能)

这避免了因
排序
模拟
条件化
问题而过度复杂的问题,更不用说
运行时依赖关系
和其他挑战了。总的来说,这会导致设置逻辑很难调试的总体问题,这是由于所有这些方面的复杂性的共同影响。

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

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

有许多工具可以帮助您部署软件:(还列出了不是MSI工具的遗留工具)

有一次我写道


如果你问我实现你想要的最简单的方法,那么我会通过单个MSI安装所有文件,并使用应用程序本身通过许可证代码(如果有)调整对高级功能的访问(如果适用)。这将最小化部署复杂性,并将高级功能放在熟悉的上下文中:在用户上下文中调试应用程序(最有可能)


这避免了因
排序
模拟
条件化
问题而过度复杂的问题,更不用说
运行时依赖关系
和其他挑战了。总的来说,这会导致设置逻辑很难调试的总体问题,这是由于复杂性的所有这些方面的共同影响。

应该工作的一般方法是:

  • 将组件(每个组件包含一个文件)分组到功能中,这些功能在安装后将为每个客户做正确的事情

  • 根据文件搜索的结果和从搜索中设置的特性值使用要素条件

  • WiX文档中的这个例子似乎与您所寻找的几乎完全一样


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

    应该采取的一般方法是:

  • 将组件(每个组件包含一个文件)分组到功能中,这些功能在安装后将为每个客户做正确的事情

  • 根据文件搜索的结果和从搜索中设置的特性值使用要素条件

  • WiX文档中的这个例子似乎与您所寻找的几乎完全一样

    从长远来看,你应该建立一个