Hi Justin,
Take a look at suggested sequences in the sequence tables 
(http://msdn2.microsoft.com/en-us/library/aa372404(VS.85).aspx).
For your example important to understand the order of the following actions 
(this is recommended order):
- Checking launch conditions (LaunchConditions action)
- Application Search (AppSearch action)
- File Costing (CostInitialize, FileCost, CostFinalize, and InstallValidate 
actions).

The fragment

<Property ...>
  <DirectorySearch ...>
    <FileSearch ... />
  </DirectorySearch>
</Property>

is an application search phase and it is happening before File costing.  During 
file costing three major operations are performed:
- Feature conditions evaluated
- Component conditions evaluated
- Directory table is resolved (meaning that INSTALLLOCATION will get its final 
value)

As you can see, using [INSTALLLOCATION] in Application Search phase is wrong 
because this property may change its value during file costing.  That is why 
instead of AppSearch you need to use custom action to set the value of 
XMLFILEEXISTS.  Now, because you want to change the installation state of the 
feature, your custom action must be sequenced *before* InstallValidate.  My 
apologies to RW, my advise should've been *before*, not *after* InstallValidate.

Regarding custom action.  This code is wrong:

    <InstallExecuteSequence>
      <Custom Action='ifFILEEXISTS' After='Installvalidate' />
       XMLFILEEXISTS
      </Custom>

You should not condition your custom action based on the value of XMLFILEEXISTS 
property.  Remove condition.
You did not show how you set your custom action.  For samples, visit this page 
(http://www.wixwiki.com/index.php?title=Guide_to_CustomActions).

The simplest sample I can suggest is Type 54 (the better choice is using C++ 
dll).  Warning - not tested:

<Property Id="IfFileExistScript">
  <![CDATA[
  Sub Main()
    Dim path, fso
    path = Session.Property("INSTALLLOCATION")
    fso = CreateObject("Scripting.FileSystemObject")
    If (fso.FileExists(path & "abc.xml")) Then
      Session.Property("XMLFILEEXISTS") = "1"
    End If
  End Sub
  ]]>
</Property>

<CustomAction Id="IfFileExist" VBScriptCall="Main" Property="IfFileExistScript" 
/>

<InstallExecuteSequence>
  <Custom Action="IfFileExist" Before"InstallValidate" />
</InstallExecuteSequence>


Regards,
Alex



-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Justintu
Sent: Sunday, March 02, 2008 4:14 AM
To: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] Condition based on INSTALLLOCATION


Hi Alex,
I am having exactly the same problem as RW had, trying to check if a file
exists or not in the installation directory. I have tried to use custom
action but failed and my code is something like this:
<Property Id="XMLFILEEXISTS">
      <DirectorySearch Id="CheckXMLFileDir" Path="[INSTALLLOCATION]"
Depth="0">
        <FileSearch Id="My.XML" Name=" My.XML" />
      </DirectorySearch>
    </Property>

    <InstallExecuteSequence>
      <Custom Action='ifFILEEXISTS' After='Installvalidate' />
       XMLFILEEXISTS
      </Custom>

    </InstallExecuteSequence>

         <Feature Id="MyXML" Level="1" Title="My XML" Description="Select to
permit installer to backup and replace your XML with a clean version.">
          <ComponentRef Id="MyXMLFiles" />
          <Condition Level='1000'>
            XMLFILEEXISTS
          </Condition>
        </Feature>


Are you able to provide a sample on how to do this?

Many thanks.

Justin


Alexander Shevchuk wrote:
>
> You need to schedule custom action after InstallValidate to set the value
> of the XMLFILEEXISTS property.
>
> Alex
>
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of RW
> Sent: Friday, February 01, 2008 11:23 AM
> To: wix-users@lists.sourceforge.net
> Subject: [WiX-users] Condition based on INSTALLLOCATION
>
> Hi,
>
> I'm trying to turn on and off a feature based on whether a file already
> exists in the installation directory.
>
> To do this, I'm setting a property based on a FileSearch:
>
>     <Property Id="XMLFILEEXISTS">
>       <DirectorySearch Id="CheckXMLFileDir" Path="[INSTALLLOCATION]"
> Depth="0">
>         <FileSearch Id="My.XML" Name=" My.XML" />
>       </DirectorySearch>
>     </Property>
>
> Then, in the feature I have a level condition on it:
>
>         <Feature Id="MyXML" Level="1" Title="My XML" Description="Select
> to
> permit installer to backup and replace your XML with a clean version.">
>           <ComponentRef Id="MyXMLFiles" />
>           <Condition Level='1000'>
>             XMLFILEEXISTS
>           </Condition>
>         </Feature>
>
>
> However, this doesn't appear to work.  Looking in the log files, it
> appears
> that XMLFILEEXISTS is evaluated as part of the AppSearch, which happens
> before the INSTALLLOCATION property is even set, therefore I'm not sure
> where it's looking!
>
> I could be totally wrong of course... but in the log file, the
> INSTALLLOCATION is set much later than any reference to My.XML.
>
> Any ideas on what the right way to do this is?
>
> Many thanks
>
> RW.
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>

--
View this message in context: 
http://www.nabble.com/Condition-based-on-INSTALLLOCATION-tp15233800p15787100.html
Sent from the wix-users mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to