Wix财产评估

时间:2017-03-28 15:15:30

标签: wix windows-installer

如何在FileSearch部分中使用Component结果作为条件。 我想得到这样的东西:

    <Property Id=\"CONFIG_XML_EXISTS\">
        <DirectorySearch Id="CheckForConfigXml" Path="[INSTALLDIR]\">'
           <FileSearch Id="ConfigXmlSearch" Name="config.xml" />
        </DirectorySearch>
    </Property>
    ...
    <Component Id="c_DefaultConfig.xml" Guid="{1AAB0AFD-B763-4A55-8585-B0AD4D8CE23C}">
        <File Id="f_default_config.xml"
              Name="default-config.xml"
              Source="$(var.SourceRoot)\config.xml"/>
        <Condition>CONFIG_XML_EXISTS</Condition>
    </Component>

我不知道为什么但是属性wix不想评估CONFIG_XML_EXISTS

1 个答案:

答案 0 :(得分:0)

因为搜索在安装的早期发生,最可能的原因是INSTALLDIR没有价值。你还没有说你是在进行全新安装还是升级,所以不清楚你认为它可能从哪里获得它的价值。

我还要指出,该源代码的目的显然是为了防止安装文件(如果已存在),所以:

  1. 如果INSTALLDIR原来是安装文件的应用程序文件夹(通常是程序文件),那么用户通常可以更改此位置,因此不清楚文件是否符合您的预期。

  2. 文件覆盖规则可防止传入文件覆盖已修改的数据文件(修改日期&gt;创建日期),因此如果该配置文件已更改,则不会覆盖该文件,也不需要进行检查。

  3. 在您的评论中,您说“我的安装程序必须仅在目标(安装)目录中没有此类文件时才创建文件config.xml。如果此类文件存在,我的安装程序必须创建名为template.xml的文件”。我认为也许最简单的方法是在安装完成后在应用程序中,或者可能在安装完所有文件后的自定义操作中。在安装之前似乎没有好办法做到这一点,因为INSTALLDIR是不可预测的。我已经看到通过将XML文件安装到(例如)用户的应用程序数据来解决这种问题,并且在安装文件之后,应用程序或自定义操作可以看到哪些文件存在(或不存在)并从用户获取它们应用数据。