我有wix安装程序,它将一些文件复制到某些目录。每个文件都声明为单个组件,有一些路径 - 如果目录不存在,安装程序将创建它并将文件放在那里。
我想做什么:如果目录已经存在,安装程序不应该复制任何文件(即使文件不存在,也不应该复制到现有目录)。
但是不可能将“Never overwrite”设置为目录,那么如何防止将新文件复制到现有目录?我可以在这里使用任何条件(例如“是否存在目录”)?
答案 0 :(得分:1)
我可以在这里使用任何条件(例如“是否存在目录”)?
是的,你可以使用这样的Condition元素:
<Directory Id="FooFolder" Name="Foo">
<Component Id="SomeId">
<File Source="..." />
<Condition>Not FOO_FOLDER_ALREADY_EXISTS</Condition>
</Component>
</Directory>
Windows安装程序的Conditional Statement Syntax文档中说明了可以用作条件的内容。
在这种情况下,我相信您可以将 FOO_FOLDER_ALREADY_EXISTS
属性设置为DirectorySearch,如下所示:
<Property Id="FOO_FOLDER_ALREADY_EXISTS">
<DirectorySearch Id="FooFolderSearch" Path="[FooFolder]" />
</Property>
击> <击> 撞击>
修改:显然上面的目录搜索不起作用,因为[FooFolder]
属性仅在CostFinalize
操作期间解决(请参阅documentation)。但是在AppSearch
操作期间,目录搜索已经在此之前发生。
我不确定如何解决这个问题。它可能涉及在CostFinalize
之后使用自定义操作而不是Windows安装程序目录搜索来设置FOO_FOLDER_ALREADY_EXISTS属性。
答案 1 :(得分:0)
关于如何避免在成本最终确定之前设置属性的计时问题,另一种可靠的处理方法是将属性写入注册表。
我认为这是关于属性设置的时间问题的最常见的工作,它允许安装程序跟踪卸载的这些属性等...我已经用它来产生很好的效果。
以下a good article by Rob Mensching介绍了如何帮助您入门。