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