Wix 属性评估



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

<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

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

我还要指出,该源代码的目的显然是为了防止安装文件(如果已经有一个),因此:

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

  2. 文件
  3. 覆盖规则可防止传入文件覆盖修改后的数据文件(修改日期>创建日期),因此如果该配置文件已更改,则不会覆盖它,您无需执行检查。

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

最新更新