我有 wix 安装程序,它将一些文件复制到一些目录。每个文件都被声明为单个组件,带有一些路径 - 如果目录不存在,安装程序将创建它并将文件放置在那里。
我想要做什么:如果目录已经存在,安装程序不应该复制任何文件(即使文件不存在,也不应该复制到已经存在的目录)。
但是不可能将“从不覆盖”设置为目录,那么如何防止将新文件复制到现有目录?我可以在这里使用任何条件(例如“是否存在目录”)?
我可以在这里使用任何条件(例如“是否存在目录”)?
是的,您可以像这样使用 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 属性。
关于如何避免在成本最终确定之前设置属性的时间问题,另一种可靠的处理方法是将属性写入注册表。
我相信这是解决设置属性的时间问题的最常见工作,它允许安装程序跟踪这些属性以进行卸载等......我已经使用它取得了很好的效果。
这是Rob Mensching 撰写的一篇很好的文章,介绍了如何帮助您入门。