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