WiX 安装程序 - 使用不同的属性多次运行 MSI?

WiX Installer - Run an MSI multiple times with different properties?

提问人:lequinne 提问时间:4/10/2018 更新时间:4/10/2018 访问量:622

问:

我正在使用 WiX 工具集(我的第一个)构建引导程序。它适用于 Microsoft Flight Sim 系列的附加包。MFSF 有多个版本,客户通常希望将我们的附加包安装到多个模拟器中。这自然意味着将许多相同的文件安装到多个不同的根目录中。我知道我可以通过将属性从引导程序传递到 MsiPackage 来轻松选择一个根文件夹。但是有没有办法让软件包安装到多个根文件夹呢?

我的标题可能有点误导 - 两次运行相同的 MSI 很可能是一个巨大的禁忌。我真的在问,将一组文件安装到多个用户选择的位置,而无需将它们多次包含在我的引导程序中,我可以采取的最佳方向是什么?

谢谢 法

Wix Windows安装程序

评论

0赞 PhilDW 4/10/2018
您绝对不能两次运行相同的 MSI - 它将进入维护模式,而不是全新安装文件。你们支持多少种不同的飞行模拟器?
0赞 lequinne 4/10/2018
四。它们都包含一些文件,这些文件被安装到所有版本的同一位置(我通过引导程序中的单独 MSI 安装这些文件一次),一些文件对于每个版本都不同,以及大量文件对于所有版本都是相同的文件,但需要安装到四个 sim 目录中的每一个。现在我只是为每个版本使用不同的 MSI,其中包括进入 sim 目录的所有文件,包括与版本相关的文件和共享文件,但这会导致一个非常大的安装程序,我认为必须有更好的方法。
0赞 Christopher Painter 4/10/2018
文件是否相同,只是目录不同?
0赞 lequinne 4/10/2018
@ChristopherPainter肯定的。相同的文件,相同的目录树结构,在安装过程中分布到 1-4 个不同的位置(根目录)。

答:

1赞 Christopher Painter 4/10/2018 #1

这听起来像是我必须在IsWiX安装程序中与Visual Studio集成所要做的事情。我有一堆文件需要安装到每个检测到的 VS 版本中。为此,我:

1) 创作 AppSearch 以设置具有目标的属性。

2) 创建组件并安装到我的目录。这些实际上从未被任何东西使用过,但它是无害的。

3) 使用 CopyFile 元素将文件复制到目标。如果 AppSearch 未找到目标,则 MSI 会隐式跳过重复。

https://github.com/iswix-llc/iswix/blob/master/Source/Installer/IsWiX/Code/Product.wxs

https://github.com/iswix-llc/iswix/blob/master/Source/Installer/IsWiXNewAddInMM/IsWiXNewAddInMM.wxs

评论

0赞 lequinne 4/11/2018
听起来完全一样的问题,我会尝试你的方法并让你知道。谢谢!
0赞 Stein Åsmul 4/11/2018
自从我使用此功能以来,它已经很久了,但我记得 MSI 甚至会在卸载时删除重复的文件 - 前提是在卸载期间卸载了托管组件。我认为这应该是一个很好的解决方案,但还有很多工作要做。祝你好运。如果软件包很大,无法编译,也许可以尝试使用未压缩的外部源文件或外部 cab 来加快编译过程?(我从未尝试过使用 WiX 的未压缩文件,但应该很容易做到)。或者,如果您有巨大的二进制文件,请在安装测试期间将它们替换为微小的测试文件?
0赞 Christopher Painter 4/11/2018
当然,它会删除它们。自 2008 年以来,我广泛使用这种模式。几乎没有什么可测试的。
0赞 Stein Åsmul 4/11/2018
感谢您验证 Chris - 我最近没有使用过很多东西。关于测试;我正在考虑一次安装多少个产品的不同组合。有一些排列,但你是对的,不是最糟糕的测试问题。我想这取决于要安装的产品有多大。如果他们很大,我希望 OP 有一些 QA 人员忙于帮助分担繁琐的测试。大包裹从来都不是一件有趣的事情,因为周转时间很长。
0赞 Christopher Painter 4/11/2018
我在他的问题中没有看到任何说这是一个大包裹的内容。我也看不出他必须安装多少文件。我的模式在扩展方面不是那么好......它只为少数几个文件而设计。