1

我有 wix 安装程序,它将一些文件复制到一些目录。每个文件都被声明为单个组件,带有一些路径 - 如果目录不存在,安装程序将创建它并将文件放置在那里。

我想要做什么:如果目录已经存在,安装程序不应该复制任何文件(即使文件不存在,也不应该复制到已经存在的目录)。

但是不可能将“从不覆盖”设置为目录,那么如何防止将新文件复制到现有目录?我可以在这里使用任何条件(例如“是否存在目录”)?

4

2 回答 2

2

我可以在这里使用任何条件(例如“是否存在目录”)?

是的,您可以像这样使用 Condition 元素:

<Directory Id="FooFolder" Name="Foo">
    <Component Id="SomeId">
        <File Source="..." />
        <Condition>Not FOO_FOLDER_ALREADY_EXISTS</Condition>
    </Component>
</Directory>

Windows 安装程序的条件语句语法文档中解释了可以用作条件的事物类型。

在这种情况下,我相信您可以像这样使用DirectorySearchFOO_FOLDER_ALREADY_EXISTS设置属性:

<Property Id="FOO_FOLDER_ALREADY_EXISTS">
    <DirectorySearch Id="FooFolderSearch" Path="[FooFolder]" />
</Property>

编辑:显然上面的目录搜索不起作用,因为该[FooFolder]属性仅在CostFinalize操作期间解析(请参阅文档)。但是在此之前,目录搜索已经发生在AppSearch操作期间。

我不确定如何解决这个问题。它可能涉及在CostFinalize使用自定义操作而不是 Windows 安装程序目录搜索之后设置 FOO_FOLDER_ALREADY_EXISTS 属性。

于 2012-04-10T10:55:50.973 回答
0

关于如何避免在成本最终确定之前设置属性的时间问题,另一种可靠的处理方法是将属性写入注册表。

我相信这是解决设置属性的时间问题的最常见工作,它允许安装程序跟踪这些属性以进行卸载等......我已经使用它取得了很好的效果。

这是Rob Mensching 撰写的一篇很好的文章,介绍了如何帮助您入门。

于 2013-07-30T17:23:11.053 回答