Thanks!  I look forward to hearing what you see with GetCost.

If anyone else is looking to query basic feature info I copied what I did
below.  It's pretty straight forward but maybe it'll save someone some time.


private class Feature

{

      public string     Id;

      public string     ParentId;

      public string     Title;

      public string     Description;

      public int        DisplayOrder;

}

features = new List<Feature>();

using (View v = session.Database.OpenView("SELECT * FROM Feature ORDER BY
Display"))

{

      if (v != null)

      {

            v.Execute();

            for (Record r = v.Fetch();

                   r != null;

                   r = v.Fetch())

            {

                  Feature f = new Feature();

                  f.Id = r.GetString("Feature");

                  f.ParentId = r.GetString("Feature_Parent");

                  f.Title = r.GetString("Title");

                  f.Description = r.GetString("Description");

                  f.DisplayOrder = r.GetInteger("Display");

                  features.Add(f);

                  r.Dispose();

            }

      }

}


On Tue, Mar 3, 2009 at 2:02 PM, Jason Ginchereau <jason...@microsoft.com>wrote:

> Hi Shawn,
>
> DTF's FeatureInfo class uses the MsiGetFeatureInfo API to retrieve the
> feature's attributes, title, and description. According to MSDN (
> http://msdn.microsoft.com/en-us/library/aa368612.aspx ), MsiGetFeatureInfo
> is on the list of functions that "must never be called from a custom
> action".
>
> Therefore, DTF does not include that function in the set of native APIs
> that get remoted over the IPC channel between the managed CA process and the
> installer session. Calling any non-remoted APIs with a CA session handle
> always results in an InvalidHandleException because you are calling with a
> remote handle.
>
> Perhaps MsiGetFeatureInfo should be smart enough to recognize when it's
> being called from the context of a CA and then query those values from the
> database instead of using MsiGetFeatureInfo, but it doesn't do that now. As
> a workaround you can do that query yourself, as you have done.
>
> The FeatureInfo.GetCost() method should work from within a CA, since the
> MsiGetFeatureCost API does get remoted. So there might be a bug in that
> method. When I get a chance, I'll try to add a test case to verify
> GetCost().
>
> -Jason-
>
> -----Original Message-----
> From: Shawn Dwyer [mailto:shawn.o.dw...@gmail.com]
> Sent: Tuesday, March 03, 2009 8:57 AM
> To: General discussion for Windows Installer XML toolset.
> Subject: [WiX-users] DTF Session object properties
>
> Hi,
>
> I'm trying to put together a simple managed custom action using DTF which
> will show each of the features, their descriptions, and their cost.  It
> seemed straight forward enough
>
>
> string msg = "";
>
> foreach (FeatureInfo fi in session.Features)
>
> {
>
> msg += string.Format
>
> (
>
> "Title: {0}\r\nDescription: {1}\r\nCost: {2}\r\n\r\n",
>
> fi.Title,
>
>            fi.Description,
>
>            fi.GetCost(false, true, InstallState.Local)
>
>      );
>
> }
>
> MessageBox.Show(msg,"Features");
>
> However, fi.Title thows the exception:
>
> System.Reflection.TargetInvocationException: Exception has been thrown by
> the target of an invocation. --->
> Microsoft.Deployment.WindowsInstaller.InvalidHandleException: The handle is
> invalid.
>   at Microsoft.Deployment.WindowsInstaller.FeatureInfo.get_Title()
>
> I get a similar error for fi.Description.  For fi.GetCost for one of my 3
> features it returns 0, for the others it returns -1099511627776 (=-1TB).
> I'm probably missing something obvious here but I can't seem to put my
> finger on it.  I have my custom task scheduled as follows:
>
> <InstallUISequence>
>
>      <Custom Action="ShowFeatures" After="CostFinalize" />
>
> </InstallUISequence>
>
> Any ideas?
>
> I am able to query the title and description directly with View v =
> Session.Database.OpenView("SELECT * FROM Feature ORDER BY Display");  I am
> also able to access FeatureInfo.RequestState and FeatureInfo.CurrentState
> without exception.
>
> Thanks,
>
> Shawn
>
>
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco,
> CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the
> Enterprise
> -Strategies to boost innovation and cut costs with open source
> participation
> -Receive a $600 discount off the registration fee with the source code:
> SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to