我想创建一个安装程序套件,以链式方式运行多个安装程序。主套件应使用配置文件,以便安装程序根据此配置 XML 决定运行哪个版本的 MSI。目标是避免在新版本软件发布时必须更新任何 WiX 或 Bootstrapper 项目。相反,只需更新配置 XML 即可更改将安装在链中的内容。
例如,只需更新 XML 中特定 MSI 的源路径,以便主安装程序读取此新路径并运行新 MSI 而不是旧 MSI。
据我了解,Bootstrapper 项目中的问题是所有包都是硬编码的,因此它没有为包的源路径提供灵 active 。
我还尝试在各个 MSI 中使用自定义操作。在读取 XML 后,我可以使用 C# 获取和设置 MSI 的属性,这看起来很有希望,但是这些属性不能用作源路径的变量。
我还尝试在第一个 MSI 中使用自定义操作运行第二个 MSI。遗憾的是,这没有成功。
如果有任何建议,我将不胜感激!
tldr,我想运行最初未包含在构建中的安装程序。类似于“DownloadUrl”,但来自本地网络。可以使用属性更改其值,因此无需在每次路径更改时都重新构建项目。
最佳答案
我认为使用单个 XML 文件来控制安装哪些包会很困难。在刻录脚本中,设置变量的选项仅限于:
-
<FileSearch>
-
<RegistrySearch>
-
<DirectorySearch>
-
<ComponentSearch>
-
<ProductSearch>
只有这些 <FileSearch>
和 <DirectorySearch>
可以探测源位置。
您可以使用文件的存在/不存在来控制 MSI 包的安装,从而使它起作用。在您的刻录项目中使用 util:FileSearch从源路径查找文件的元素:
<util:FileSearch Id="InstallMSI01"
Variable="InstallMSI01"
Result="exists"
Path="[SourceDir]InstallMSI01.txt" />
这应根据源路径中是否存在文件 InstallMSI01.txt 将变量 InstallMSI01 设置为“true”或“false”。然后,您可以在 MSIPackage 的安装条件中使用该变量:
<MsiPackage
Id="MSI01"
SourceFile="-- Your Source Path--"
InstallCondition="InstallMSI01 = "true"">
</MsiPackage>
关于c# - WiX - 如何使用配置文件来决定运行哪个 MSI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662390/