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