WiX - 如何使用配置文件来决定运行哪个MSI?

时间:2015-06-05 08:58:54

标签: c# wix windows-installer custom-action bootstrapper

我想创建一个在链中运行多个安装程序的安装程序套件。主套件应使用配置文件,以便安装程序根据此配置XML决定运行哪些版本的MSI。目标是避免在新版软件问世时更新任何WiX或Bootstrapper项目。相反,只需更新配置XML即可更改链中安装的内容。

例如,只需更新XML中特定MSI的源路径,以便主安装程序读取此新路径并运行新MSI而不是旧路径。

据我所知,Bootstrapper项目中的问题是所有软件包都是硬编码的,因此它不能为软件包的源路径提供灵活性。

我也尝试在个人MSI中使用自定义操作。看起来很有希望我可以在读取XML后使用C#获取和设置MSI的属性,但是这些属性不能用作源路径的变量。

我还尝试在第一个MSI中使用自定义操作运行第二个MSI。遗憾的是,这没有成功。

我很感激任何建议!

tldr ,我想运行最初未包含在构建中的安装程序。与' DownloadUrl'类似,但来自本地网络。它的值可以使用属性进行更改,因此每次路径更改时都不需要重建项目。

1 个答案:

答案 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 = &quot;true&quot;">
</MsiPackage>