如何在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
。
答案 0 :(得分:0)
因为搜索在安装的早期发生,最可能的原因是INSTALLDIR没有价值。你还没有说你是在进行全新安装还是升级,所以不清楚你认为它可能从哪里获得它的价值。
我还要指出,该源代码的目的显然是为了防止安装文件(如果已存在),所以:
如果INSTALLDIR原来是安装文件的应用程序文件夹(通常是程序文件),那么用户通常可以更改此位置,因此不清楚文件是否符合您的预期。
文件覆盖规则可防止传入文件覆盖已修改的数据文件(修改日期&gt;创建日期),因此如果该配置文件已更改,则不会覆盖该文件,也不需要进行检查。
在您的评论中,您说“我的安装程序必须仅在目标(安装)目录中没有此类文件时才创建文件config.xml。如果此类文件存在,我的安装程序必须创建名为template.xml的文件”。我认为也许最简单的方法是在安装完成后在应用程序中,或者可能在安装完所有文件后的自定义操作中。在安装之前似乎没有好办法做到这一点,因为INSTALLDIR是不可预测的。我已经看到通过将XML文件安装到(例如)用户的应用程序数据来解决这种问题,并且在安装文件之后,应用程序或自定义操作可以看到哪些文件存在(或不存在)并从用户获取它们应用数据。