首页 文章

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

提问于
浏览
2

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

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

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

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

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

我很感激任何建议!

tldr ,I 'd like to run installers which were not originally included in the build. Similarly to ' DownloadUrl ', but from a local network. Its value could be altered using properties, so there' d无需在每次路径更改时重建项目 .

1 回答

  • 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>
    

相关问题