Thanks for that advice Peter.

I'll with the int.

Cheers,
Anil.
On Thu, Aug 25, 2011 at 4:54 PM, Peter Shirtcliffe <pshirtcli...@sdl.com>wrote:

> I'd be very surprised if that were the case. With each release of the
> Windows
> OS and Windows Installer, new error codes are added. At some future date,
> the
> API functions could return an error code that is not within your enum's
> legal
> set of values. Stick with an int.
>
> -----Original Message-----
> From: Anil Patel [mailto:apatel...@googlemail.com]
> Sent: 25 August 2011 16:43
> To: General discussion for Windows Installer XML toolset.
> Subject: Re: [WiX-users] Identifying Features that have been installed
>
> The numeric codes for the symbolics can be looked up here but I'm sure
> there
> is a way to get the Enums for them.
>
>
> http://msdn.microsoft.com/en-us/library/18d8fbe8-a967-4f1c-ae50-99ca8e491d2d(
> PROT.10).aspx
>
>
> On Thu, Aug 25, 2011 at 4:26 PM, Anil Patel <apatel...@googlemail.com
> >wrote:
>
> > Hi Peter & James,
> >
> > I really appreciate your help on this - thank you!!
> >
> > I went with the interop route and attach a sample app (if anyone is
> > interested) in what I have done.
> >
> > Best Regards,
> > Anil.
> >
> > using System;
> > using System.Collections.Generic;
> > using System.Linq;
> > using System.Text;
> > using System.Runtime.InteropServices;
> > namespace ConsoleApplication2
> > {
> >     class Program
> >
> >     {
> >         [DllImport("msi", CharSet = CharSet.Auto)]
> >         static extern int MsiGetProductCode(string component,
> StringBuilder
> > buffer);
> >
> >         [DllImport("msi", CharSet = CharSet.Auto)]
> >         static extern int MsiEnumFeatures(string product, uint
> > featureIndex, StringBuilder featureBuffer, StringBuilder parentBuffer);
> >
> >         [DllImport("msi", CharSet = CharSet.Auto)]
> >         static extern int MsiQueryFeatureState(string product, string
> > featureBuffer);
> >
> >         public static string GetProductCode(string component)
> >         {
> >             StringBuilder productCodeStringBuilder = new
> > StringBuilder(512);
> >             int nRes = MsiGetProductCode(component,
> > productCodeStringBuilder);
> >             return productCodeStringBuilder.ToString();
> >
> >             //switch (MsiGetProductCode(component,
> > productCodeStringBuilder))
> >
> >             //{
> >             //    case ERROR_SUCCESS:
> >             //        return productCodeStringBuilder.ToString();
> >             //    // *Please* don't actually just throw an exception like
> > this.
> >             //    // Throw the relevent exception based on the error code
> > returned.
> >             //    case ERROR_BAD_CONFIGURATION:
> >             //        throw new Exception("The configuration data is
> > corrupt.");
> >             //    case ERROR_INSTALL_FAILURE:
> >             //        throw new Exception("The product code could not be
> > determined.");
> >             //    case ERROR_INVALID_PARAMETER:
> >             //        throw new Exception("An invalid parameter was
> passed
> > to the function.");
> >             //    case ERROR_UNKNOWN_COMPONENT:
> >             //        throw new Exception("The specified component is
> > unknown.");
> >             //    default:
> >             //        throw new Exception();
> >             //}
> >         }
> >         public static void EnumFeatures(string product)
> >         {
> >             StringBuilder featureBuf = new StringBuilder(256);
> >             StringBuilder parentBuf = new StringBuilder(256);
> >
> >             for (uint i=0; ; i++)
> >             {
> >                 int nRes = MsiEnumFeatures(product, i, featureBuf,
> > parentBuf);
> >                 if (nRes != 0)
> >                     break;
> >
> >                 int featureQCode = QueryFeatureState(product,
> > featureBuf.ToString());
> >
> >                 Console.WriteLine(String.Format("Feature {0} ",
> > featureBuf.ToString()));
> >             }
> >             return;
> >         }
> >
> >         public static int QueryFeatureState(string product, string
> feature)
> >         {
> >             return MsiQueryFeatureState(product, feature);
> >         }
> >
> >         static void Main(string[] args)
> >         {
> >             //pass in guid of product
> >             string s =
> > GetProductCode("{14CCA315-92CE-48E7-8C7C-87923F770B47}");
> >             EnumFeatures(s);
> >         }
> >     }
> > }
> >
> > //useful links
> > http://source.winehq.org/source/include/msi.h
> > http://msdn.microsoft.com/en-us/library/aa369426(v=VS.85).aspx
> >
> >
> >
> >
> >
> > On Thu, Aug 25, 2011 at 3:33 PM, James Johnston
> <johnst...@inn-soft.com>wrote:
> >
> >> You could always use the COM library if you're not comfortable with the
> C
> >> API calls.  Add a COM reference to "Microsoft Windows Installer Object
> >> Library" to your project...
> >>
> >> Installer.get_Features and Installer.get_FeatureState look like they
> might
> >> be useful.
> >>
> >> -----Original Message-----
> >> From: Anil Patel [mailto:apatel...@googlemail.com]
> >> Sent: Thursday, August 25, 2011 11:12
> >> To: General discussion for Windows Installer XML toolset.
> >> Subject: Re: [WiX-users] Identifying Features that have been installed
> >>
> >> Hi Peter,
> >>
> >> Really appreciate your feedback on this.
> >>
> >> The MsiGetEnumsFeatues() is defined as
> >>
> >> UINT MsiEnumFeatures(
> >>  __in   LPCTSTR szProduct,
> >>  __in   DWORD iFeatureIndex,
> >>  __out  LPTSTR lpFeatureBuf,
> >>  __out  LPTSTR lpParentBuf
> >> );
> >>
> >> So to get the product code, I found this code
> >>
> >>        [DllImport("msi", CharSet = CharSet.Auto)]
> >>        static extern int MsiGetProductCode(string component,
> StringBuilder
> >> buffer);
> >>
> >>        public static string GetProductCode(string component)
> >>        {
> >>            StringBuilder productCodeStringBuilder = new
> >> StringBuilder(512);
> >>            switch (MsiGetProductCode(component,
> productCodeStringBuilder))
> >>            {
> >>                case ERROR_SUCCESS:
> >>                    return productCodeStringBuilder.ToString();
> >>                // *Please* don't actually just throw an exception like
> >> this.
> >>                // Throw the relevent exception based on the error code
> >> returned.
> >>                case ERROR_BAD_CONFIGURATION:
> >>                    throw new Exception("The configuration data is
> >> corrupt.");
> >>                case ERROR_INSTALL_FAILURE:
> >>                    throw new Exception("The product code could not be
> >> determined.");
> >>                case ERROR_INVALID_PARAMETER:
> >>                    throw new Exception("An invalid parameter was passed
> to
> >> the function.");
> >>                case ERROR_UNKNOWN_COMPONENT:
> >>                    throw new Exception("The specified component is
> >> unknown.");
> >>                default:
> >>                    throw new Exception();
> >>            }
> >>        }
> >>
> >> The problem is thay symbolic constants in the switch statement (eg
> >> ERROR_INVALID_PARAMETER which are uints) aren't recognised so error on
> >> compile.
> >>
> >> Do you know how I can resolve these. I'm assuming there might be an Enum
> >> for
> >> them but I can't locate them.
> >>
> >> Again any help would be appreciated.
> >>
> >> Regards,
> >> Anil.
> >>
> >>
> >> On Thu, Aug 25, 2011 at 11:13 AM, Peter Shirtcliffe
> >> <pshirtcli...@sdl.com>wrote:
> >>
> >> > MsiEnumFeatures()
> >> > http://msdn.microsoft.com/en-us/library/aa370098%28v=vs.85%29.aspx
> >> >
> >> >
> >> > -----Original Message-----
> >> > From: Anil Patel [mailto:apatel...@googlemail.com]
> >> > Sent: 25 August 2011 11:08
> >> > To: General discussion for Windows Installer XML toolset.
> >> > Subject: [WiX-users] Identifying Features that have been installed
> >> >
> >> > Hello,
> >> >
> >> > I have a configuration program that is run manually by a user
> >> > (following a new install or a change to an existing installation)
> >> > which allows the user to configure the installed features.
> >> >
> >> > There is a requirement to disable the configuration of features not
> >> > installed by the user.
> >> >
> >> > The question is, is there a way for the configuration program to
> >> > identify which featues have been installed?
> >> >
> >> > I could record this data into the registry during the install and
> >> > remove it when a feature is uninstalled but I just wondered if there
> >> > was any other way of doing this.
> >> >
> >> > Thank you for your time.
> >> >
> >> >
> >> > Regards,
> >> > Anil.
> >> >
> >> > ----------------------------------------------------------------------
> >> > -------
> >> > -
> >> > EMC VNX: the world's simplest storage, starting under $10K The only
> >> > unified storage solution that offers unified management Up to 160%
> >> > more powerful than alternatives and 25% more efficient.
> >> > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> >> > _______________________________________________
> >> > WiX-users mailing list
> >> > WiX-users@lists.sourceforge.net
> >> > https://lists.sourceforge.net/lists/listinfo/wix-users
> >> > SDL PLC confidential, all rights reserved.
> >> > If you are not the intended recipient of this mail SDL requests and
> >> > requires that you delete it without acting upon or copying any of its
> >> > contents, and we further request that you advise us.
> >> > SDL PLC is a public limited company registered in England and Wales.
> >> >  Registered number: 02675207.
> >> > Registered address: Globe House, Clivemont Road, Maidenhead, Berkshire
> >> > SL6 7DY, UK.
> >> >
> >> >
> >> >
> >> > ----------------------------------------------------------------------
> >> > -------- EMC VNX: the world's simplest storage, starting under $10K
> >> > The only unified storage solution that offers unified management Up to
> >> > 160% more powerful than alternatives and 25% more efficient.
> >> > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> >> > _______________________________________________
> >> > WiX-users mailing list
> >> > WiX-users@lists.sourceforge.net
> >> > https://lists.sourceforge.net/lists/listinfo/wix-users
> >> >
> >>
> >>
>
> ----------------------------------------------------------------------------
> >> --
> >> EMC VNX: the world's simplest storage, starting under $10K The only
> >> unified
> >> storage solution that offers unified management Up to 160% more powerful
> >> than alternatives and 25% more efficient.
> >> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> >> _______________________________________________
> >> WiX-users mailing list
> >> WiX-users@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/wix-users
> >>
> >>
> >>
> >>
>
> -----------------------------------------------------------------------------
> -
> >> EMC VNX: the world's simplest storage, starting under $10K
> >> The only unified storage solution that offers unified management
> >> Up to 160% more powerful than alternatives and 25% more efficient.
> >> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> >> _______________________________________________
> >> WiX-users mailing list
> >> WiX-users@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/wix-users
> >>
> >
> >
>
> -----------------------------------------------------------------------------
> -
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified management
> Up to 160% more powerful than alternatives and 25% more efficient.
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>
> ------------------------------------------------------------------------------
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified management
> Up to 160% more powerful than alternatives and 25% more efficient.
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management 
Up to 160% more powerful than alternatives and 25% more efficient. 
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to