Bugs item #1656236, was opened at 2007-02-09 08:42
Message generated for change (Settings changed) made by pmarcu
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=642714&aid=1656236&group_id=105970

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: candle
Group: None
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Lorne Laliberte (lornelaliberte)
>Assigned to: pmarcu (pmarcu)
Summary: FileSearch requires a parent folder found at depth 0

Initial Comment:
While testing the <FileSearch> and <DirectorySearch> elements, I've discovered 
what is either a bug, or a limitation, in WiX or MSI. 

(Based on Rob's quote about the difficulty of working with AppSearch I think 
it's most likely a bug in WiX. :)

It's a bit tricky to describe, but basically it has to do with the FileSearch 
element needing two things: 

 - it must be in a DirectorySearch element that describes its parent folder 
with an effective depth of 0; although the attribute can be higher it must be 
found at level 0

 - if that DirectorySearch has a parent DirectorySearch element, it must have 
been found at an effective depth of 0 as well

For example:

Let's assume we have the following folder structure:

C:\Temp\a\b\c\d\e\f\

And inside that folder structure we have a file:

C:\Temp\a\b\c\d\e\f\foo.txt


This search will NOT work:

<Property Id="FOO_DOT_TEXT_0">
        <DirectorySearch Depth='0' Id="dir_search_0" Path="C:\Temp\a" >
                <FileSearch Id="file_search_0" Name="foo.txt" />
        </DirectorySearch>
</Property>


This search will NOT work either:

<Property Id="FOO_DOT_TEXT_1">
        <DirectorySearch Depth='0' Id="dir_search_1" Path="C:\Temp" >
                <DirectorySearch Depth='8' Id="dir_search_2" Path="f" >
                        <FileSearch Id="file_search_1" Name="foo.txt" />
                </DirectorySearch>
        </DirectorySearch>
</Property>


This search will NOT work either:

<Property Id="FOO_DOT_TEXT_2">
        <DirectorySearch Depth='0' Id="dir_search_5" Path="C:\Temp" >
                <DirectorySearch Depth='5' Id="dir_search_6" Path="d" >
                        <DirectorySearch Depth='2' Id="dir_search_7" Path="f" >
                                <FileSearch Id="file_search_2" Name="foo.txt" />
                        </DirectorySearch>
                </DirectorySearch>
        </DirectorySearch>
</Property>


However, this search WILL work:

<Property Id="FOO_DOT_TEXT_3">
        <DirectorySearch Depth='0' Id="dir_search_8" Path="C:\Temp" >
                <DirectorySearch Depth='6' Id="dir_search_9" Path="e" >
                        <DirectorySearch Depth='0' Id="dir_search_10" Path="f" >
                                <FileSearch Id="file_search_3" Name="foo.txt" />
                        </DirectorySearch>
                </DirectorySearch>
        </DirectorySearch>
</Property>


One workaround I've found is to use two searches, like this:

<Property Id="FOLDER_F">
        <DirectorySearch Depth='0' Id="dir_search_11" Path="C:\Temp" >
                <DirectorySearch Depth='8' Id="dir_search_12" Path="f" />
        </DirectorySearch>
</Property>

<Property Id="FOO_DOT_TEXT_4">
        <DirectorySearch Depth='0' Id="dir_search_13" Path="[FOLDER_F]" >
                <FileSearch Id="file_search_4" Name="foo.txt" />
        </DirectorySearch>
</Property>

...which seems to work just fine so long as the properties are defined in the 
correct order.

Is this a bug in WiX, or a limitation in MSI?


So to summarize, there are two possible bugs:

1. you can't recursively search for a file without specifying its parent folder 
(the file must be found at an effective depth of 0)

2. you can't recursively search for the parent folder either (the file's parent 
folder must also be found at an effective depth of 0)


----------------------------------------------------------------------

Comment By: Lorne Laliberte (lornelaliberte)
Date: 2007-04-18 13:04

Message:
Logged In: YES 
user_id=1705700
Originator: YES

(Uh - I meant <DirectorySearch> where I used <Directory> above.)

----------------------------------------------------------------------

Comment By: Lorne Laliberte (lornelaliberte)
Date: 2007-04-18 13:01

Message:
Logged In: YES 
user_id=1705700
Originator: YES

Ah, I think I just realized something. The Depth attribute means something
different when there is a child <FileSearch> element.

If there is no child <FileSearch> element, the Directory's @Depth means
"the number of levels down from the parent <Directory> to look for @Path."

If there is a child <FileSearch> element, the Directory's @Depth means
"the number of levels down from @Path to look for the file."

In the latter case, the <Directory> element itself is assumed to be have a
depth of 0, which is why something like this doesn't work:

<!-- DOES NOT WORK: -->
<Property Id="FOO_DOT_TEXT_1">
<DirectorySearch Depth='0' Id="dir_search_1" Path="C:\Temp" >
<DirectorySearch Depth='8' Id="dir_search_2" Path="f" >
<FileSearch Id="file_search_1" Name="foo.txt" />
</DirectorySearch>
</DirectorySearch>
</Property>

The Depth='8' isn't specifying the depth between dir_search_1 and
dir_search_2, it's specifying the depth between dir_search 2 and
file_search_1. The depth between dir_search_1 and dir_search_2 defaults to
0, which is why it fails.

It becomes a bit clearer once you see what happens in the MSI database.
:)

Perhaps the documentation should be amended to clarify that the Depth
attribute means something different (from the perspective of a WiX user,
anyway) when a FileSearch is used.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=642714&aid=1656236&group_id=105970

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
WiX-devs mailing list
WiX-devs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-devs

Reply via email to