Use session Properties. They are populated from the Property table only at
the beginning of each sequence (before your immediate CA runs) and can be
read and written by immediate CAs.

The "[PropertyName]" syntax used in formatted fields of the database (such
as some of the XmlConfig attributes and Condition element text) actually
read session properties, not the Property table, so using those properties
should be what you need. Remember to make your properties set in the UI
sequence public and secure to be consumed in the execute sequence, because
public secure property values will override the Property table values when
the execute sequence starts.

-----Original Message-----
From: David Drake (Excell Data Corporation) [mailto:a-ddr...@microsoft.com] 
Sent: Thursday, November 12, 2009 8:22 AM
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] Passing data into and out of a Custom Action

I am attempting to pass information in and out of a C# Custom Action, and am
having a hell of a time with it.

The problem I am attempting to solve is this:
There is a system XML configuration file on my target system.  The path to
the file is always known.  I need to look into this file and determine
whether or not a specific element/attribute exists.  If it does exist, I
need to recover its value and pass it back into the installer for later use.
If it does not exist, I need to return some sort of indication so that I
write it using an util:XmlConfig action.  The actual XML manipulations are
the easy part.  The problematic is passing the information in and out of the
CA.

I have found that if I use a Deferred custom action, I can take a value
entered in via the UI (file path, Xpath statement, etc) and use it in my CA
without issue.  I have not been able to pass anything back to the installer
though (whether or not the element exists).

I have also found that if I use an immediate action, I then have access to
the session object, which includes the Database object.  Unfortunately, the
Database object only includes what is in the database at the beginning of
the install, and not what may have been modified during the UI Sequence.  I
have used a MessageBox within the CA to show me what value lies in the
property when the CA executes, and extra UI Dialogs to examine the property
after it has been modified.  I am able to modify the property via the UI and
have it visible to the later UI Dialogs.  However, when I examine the
property via the Database object in the CA, it always contains the default
value, even if I pass something else in via the command line.

The reason for using the CA in this case is because Wix does not have any
ability to read files and react to the information found therein.

Is there any way to accomplish my goal here in an elegant and reusable way?
I wish it was as easy as creating some kind of parameterized call to a dll
with some kind of expected return value that would show up in some
property...

If code samples of what I've done so far are needed, I can supply that.

Thanks,
David
----------------------------------------------------------------------------
--
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus
on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to