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