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: [email protected]
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: [email protected]
> 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
> [email protected]
> 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
> [email protected]
> 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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users