This website uses cookies. By clicking Accept, you consent to the use of cookies. Click Here to learn more about how we use cookies.
Turn on suggestions
Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
- Revenera Community
- :
- InstallShield
- :
- InstallShield Forum
- :
- Class table
Subscribe
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
09:22 AM
How to identify com components ?
Besides manually stepping through every component to see which one has "com extract at build" set, or ".Net Com interop" set, is there something in the msi table that I can search for either by using the Direct Editor, or by using VBScript and accessing the windows installer database?
(6) Replies
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
10:25 AM
We are naming every component that have COM info in it with _COM.
For example:
notepad.exe_COM.
reg, Henno.
For example:
notepad.exe_COM.
reg, Henno.
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
10:31 AM
But, if someone does not remember to name that component with "com", or mis-spells it, it would not be identified. There must be a way of identifying it in the database...I wonder if there is some kind of algorism that could be used to find it in the Attributes column.
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
12:08 PM
COM information will typically associate class IDs with the component in the Class table. In general, this is one way to determine that COM extraction has been used against the keyfile of a component.
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
12:50 PM
I see nothing in the class table that gives me a component\file name, only classid (which mean nothing to me). It appears that there is no way (besides naming the components with a 'Com' in them, to identify com components in an install...correct?
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 06, 2009
01:04 PM
Each record in the Class table must provide a valid component name in the Component_ field. This will link the class ID to a component in the Component table. Since class information is always associated with the keyfile of a component, the corresponding record in the Component table provides the file record foreign key in the KeyPath column.
For example, the following screenshot shows a query of an MSI package which contains two files, both as keyfiles of their containing component. One of these files contained COM data that was extracted with COM extract at build.
I should note that this will only work with static or dynamic COM extraction. Components using .NET COM interop do not have any distinguishable information stored in the Registry table that would obviously identify the information as COM interop (meaning, the registry data in the Registry table would need to be analyed per component to look for COM interop specific information).
For example, the following screenshot shows a query of an MSI package which contains two files, both as keyfiles of their containing component. One of these files contained COM data that was extracted with COM extract at build.
I should note that this will only work with static or dynamic COM extraction. Components using .NET COM interop do not have any distinguishable information stored in the Registry table that would obviously identify the information as COM interop (meaning, the registry data in the Registry table would need to be analyed per component to look for COM interop specific information).
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Jul 07, 2009
12:11 PM
In the .ISM project file, in the direct Editor\Component table, there is an ISAttributes column. I think that a '49' value in this column indicates that this is a '.Net com Interop' component, and that a '20' in this column indicates that this is a 'Com Extract at Build' component. Does anyone agree or disagree with this? This information does not get to the .MSI file, so the .ISM file has to be searched for this information. Can anyone point me to a VBscript (any kind of script file would help), where using the Automation Interface (or something else), the .ISM file can be opened and the Component table read, and a list using a search criteria can be created. Another possibility is that I might be able to come up with a VBScript to read the .ISM file sequentially (it is stored in XML format), and parse out the information.
![](/skins/images/D60DF682EA37BF37032955CE10F3F0BB/responsive_peak/images/icon_anonymous_message.png)