Wix属性评估

Wix属性评估,wix,windows-installer,Wix,Windows Installer,如何使用FileSearch结果作为组件部分中的条件。 我想得到这样的东西: <Property Id=\"CONFIG_XML_EXISTS\"> <DirectorySearch Id="CheckForConfigXml" Path="[INSTALLDIR]\">' <FileSearch Id="ConfigXmlSearch" Name="config.xml" /> </Dire

如何使用
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>

'
...
配置文件XML存在

我不知道为什么,但是属性wix不想评估
CONFIG\u XML\u EXISTS

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

我还要指出,该源代码的目的显然是为了防止安装已经存在的文件,因此:

  • 如果INSTALLDIR原来是安装文件的应用程序文件夹(通常是程序文件),那么用户通常可以更改此位置,因此不清楚文件将位于您期望的位置

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


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

    一,。如何指定评估阶段(复制文件之前)2。上面的代码就是一个例子,我当前的项目我真的必须检查exstanceIn general installs从不检查他们将要安装的每个文件是否存在,以查看它们是否存在-他们利用标准文件替换规则,因此关于您的异常的更多细节将有所帮助。同样,没有迹象表明您是否正在进行新安装或升级,也没有迹象表明用户是否可以更改INSTALLDIR,这使得您的测试毫无意义。我知道,一般来说,安装程序不会执行我试图执行的操作,但无论如何。。。。这里的想法是:我的安装程序必须创建文件
    config.xml
    ,前提是目标(安装)目录中没有这样的文件。如果存在这样的文件,我的安装程序必须创建名为
    template.xml
    的文件。