If you wire up an installer class CA in VDPROJ and edit the resultant MSI in 
Orca you'll see that you are actually getting 2 CA's for each CA.   Was is a 
Type 51 CA that's setting a property with the same name as the second deferred 
CA.   This is the serialization of properties that the installcontext is 
deserializing for you.

So for DTF, whether it's WiX or InstallShield or whatever,  you need an 
immeadiate CA that serializes and sets the property that will become 
CustomActionData and then in your deferred CA you need to deserialize it.

The serialization looks something like this: ( shoot from hip coding, not 
tested )

            CustomActionData cad = new CustomActionData();
            cad.Add( new KeyValuePair<"PROPA","VALUEA");
            session["DeferredCustomActionName"] = cad.ToString();

The deserialization looks something like this:

            CustomActionData cad = new 
CustomActionData(session["CustomActionData"]);
            string valuea = cad["PROPA"];

BTW, in case Jason is reading, maybe I'm missing something but the constructor 
choices for the CustomActionData class could probably be a little better.  The 
CustomActionData property is always `CustomActionData` so maybe there should be 
an overload that takes the session class as an argument and automatically gets 
the CustomActionData property.

I hope that helps.

Regards,
Chris



Christopher Painter, Author of Deployment Engineering Blog
Have a hot tip, know a secret or read a really good thread that deserves 
attention? E-Mail Me


--- On Mon, 6/16/08, Phil H <[EMAIL PROTECTED]> wrote:

> From: Phil H <[EMAIL PROTECTED]>
> Subject: [WiX-users]  DTF: Saving data in deffered custom action
> To: wix-users@lists.sourceforge.net
> Date: Monday, June 16, 2008, 6:34 PM
> I have inherited some WIX code (ie I am a newbie) and have
> moved the managed
> custom action over to DTF (which is very nice BTW).
> 
> Previously the CA did something along these lines: 
> 
> public class MyInstaller :
> System.Configuration.Install.Installer
> {     
>       public override void
> Install(System.Collections.IDictionary stateSaver)
>       {
>               base.Install (stateSaver);
>               stateSaver.Add(SS_KEY_INSTALLED_PROFILE, AddProfile());
>               :                                       
>       }
>       
>       public override void
> Uninstall(System.Collections.IDictionary savedState)
>       {
>               :
>               bool didInstallProfile =
> (bool)savedState[SS_KEY_INSTALLED_PROFILE];
>               :
>       }
> }
> 
> 
> Using DTF how can I store a value during the install that I
> can retrieve in
> the uninstall? Note that I am using a deferred custom
> action so the Database
> etc properties of the DTF Session object aren't
> available.
> 
> Out of hope I tried session.CustomActionData but that
> doesn't seem to
> persist.
> 
> TIA,
> 
> Phil
> 
> -- 
> View this message in context:
> http://www.nabble.com/DTF%3A-Saving-data-in-deffered-custom-action-tp17858653p17858653.html
> Sent from the wix-users mailing list archive at Nabble.com.
> 
> 
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://sourceforge.net/services/buy/index.php
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users


      

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to