如何:引用另一个DirectorySearch元素
如何:引用另一个DirectorySearch元素
很多时候,当你需要在同一个文件夹搜索(locate)很多不同的文件或者子目录,并且分配不同的Property给他们。因为你不能定义同样的DirectorySearch元素多次,所以你必须使用DirectorySearchRef元素。引用另一个DirectorySearch元素的时候,你需要(给DirectorySearchRef元素)指定相同的(对应的)Id、Parent、Path属性,否则在你使用light.exe链接的时候,将收到unresolved symbol 错误。
第一步:定义一个DirectorySearch元素
你需要首先定义一个父DirectorySearch元素。这个元素是包含若干需要单独分配Property的不同文件或者子目录的父元素。
<Property Id="SHDOCVW"> <DirectorySearch Id="WinDir" Path="[WindowsFolder]"> <DirectorySearch Id="Media" Path="Media"> <FileSearch Id="Chimes" Name="chimes.wav" /> </DirectorySearch> </DirectorySearch> </Property>
这里我们搜索的是Windows文件夹中Media文件夹下的“chimes.wav”文件。如果找到该文件,文件的完整路径将被赋值到公共Property“SHDOCVW”中。
第二步:定义DirectorySearchRef元素
为了在Media文件夹中搜索另外一个文件,你需要引用完全相同的Id、Parent Id、Path属性。因为Id为Media的DirectorySearch元素嵌套在Id为WinDir的DirectorySearch下面,它的Parent属性被自动赋值为父DirectorySearch元素的Id属性值;因此这里你必须指定DirectorySearchRef 元素的Parent属性值。
<Property Id="USER32"> <DirectorySearchRef Id="Media" Parent="WinDir" Path="Media"> <FileSearch Id="Chord" Name="chord.wav" /> </DirectorySearchRef> </Property>
如果你希望得到另一个Id为Media,但是在不同父路径下的DirectorySearch元素,你可以在一个不同于第一步中的父元素中定义一个新的DirectorySearch。(意思是这样做不会冲突)