Blog
MSI Advertising Tables
- April 13, 2022
- Posted by: Laraonline2020
- Category: End User Computing

MSI Advertising Tables Basically the Installer developers discourage the use of self-registration. Instead, Registry entries should be made through these tables. While there is one table that simply writes Registry keys (the Registry table), there are others that are more specialized. These specialized tables enable the Installer to make full use of COM, support advertising of COM components, and uninstall such components completely.
Extension Table:
What is an Extension table?
The Extension table contains the information necessary to register file extensions with the operating system. This information allows the Installer to support common operations, such as opening files directly from a mail message, or providing a context menu to them in Windows Explorer. This table contains the following columns:

Extension:
This is the actual file extension to be registered. Do not put a period in front of the extension. The maximum length for this column is 255 characters.
Component:
This column identifies the component that controls the registration of this extension.
ProgId_:
This column identifies the ProgId (if any) that should be associated with this extension.
MIME_:
This column identifies the MIME (Multipurpose Internet Mail Extension) type (if any) that should be associated with this extension.
Feature_:
This column is a foreign key into the feature table. It identifies the feature that provides the server application for this extension. This table is processed by the RegisterExtensionInfo and UnregisterExtension- Info actions.
Verb Table:
What is a Verb table?
The Verb table contains command-verb information associated with file extensions that must be generated as a part of product advertisement. Each row generates a set of registry keys and values. This table contains the following columns:

Extension_:
This column is a foreign key that refers back to a row in the Extension table, specifying the file extension that’s being used.
Verb:
This is the verb for the command, just as it should be displayed.
Sequence:
If there are multiple verbs for an extension, we can use this column to specify the order in which they should be displayed. The verb with the lowest number becomes the default action for the file type.
Command:
This is the text to display on the context menu. This can include a shortcut character, for example, we could use “&Edit” to display Edit with the E underlined. If this column is null, then the value from the Verb column is used.
Argument:
Command-line arguments that should be passed to the server when this verb is invoked.
TypeLib Table:
What is a TypeLib table?
The TypeLib table is used to register type library information. This table contains the following columns:

LibID:
This is the GUID identifying the type library.
Language:
This column specifies the language ID of the type library. This must be a non-negative number.
Component_:
It identifies the component whose key file is the type library being registered.
Version:
This integer encodes the version of the type library. The major version is in the upper eight bits, and the minor version in the lower eight bits.
Description:
This is a description of the type library.
Directory_:
It specifies the path to the help files for the type library. If the column is null, the help files are assumed to be in the same folder as the type library itself. This column is ignored during advertising.
Feature_:
It specifies a feature that must be installed or advertised for this type library to be registered.
Cost:
This column can be used to specify a cost for registering the type library to be used when the Installer updates the progress bar. And it is measured in bytes.
MIME Table:
What is a MIME table?
The MIME table contains the information needed to register MIME (Multipurpose Internet Mail Extension) file types. This table contains the following columns:

ContentType:
This is the MIME identifier to be registered.
Extension_:
This column is a foreign key into the Extension table. It indicates the file type that will use this MIME identifier.
CLSID:
This column contains the COM server CLSID that is to be associated with the MIME content. The CLSID in this column can be a foreign key into the Class table or it can be a CLSID that already exists on the user’s machine. The Class table contains COM server-related information which is used as a part of advertisement.
CLASS Table:
The Class table contains the information needed to register COM classes supported by servers in the current installation. This table has one of the more complex structures in the Registry group:
ContentType:
This is the MIME identifier to be registered.
Extension_:
This column is a foreign key into the Extension table. It indicates the file type that will use this MIME identifier.
CLSID:
This column contains the COM server CLSID that is to be associated with the MIME content. The CLSID in this column can be a foreign key into the Class table or it can be a CLSID that already exists on the user’s machine. The Class table contains COM server-related information which is used as a part of advertisement.
CLASS Table:
The Class table contains the information needed to register COM classes supported by servers in the current installation. This table has one of the more complex structures in the Registry group:

CLSID:
This is the class identifier to be registered. This isn’t an arbitrary GUID; it’s a part of the COM server’s description in its type library.
Context:
This is the server context to be registered. This must be one of the following: LocalServer, LocalServer32, InprocServer, InprocServer32.
Component_:
This column is a foreign key into the Component table, and it indicates the component that contains the COM server for this class.
ProgId_Default:
This is the default Program ID associated with this Class ID.
Description:
This is the description for this class. This description is localized.
AppId_:
This column is a foreign key into the AppId table, and it contains information for DCOM registration. This column isn’t used by version 1 of the Installer.
FileTypeMask:
This column contains file type information for the class. Most classes won’t use this column.
Icon_:
This column has a foreign key into the Icon table, which specifies the icon to use for this class. If this column is null, the icon from the COM server is used. Note that we must use an icon in the Icon table for advertisement to supply the icon.
IconIndex:
This is the index into the specified icon file or into the server’s list of icons.
DefInprocHandler:
For local servers, this column contains information on which inproc server should be the default.
Argument:
This column shows the Argument used by COM for invoking the server.
Feature_:
This is a foreign key into the Feature table, which specifies the feature that provides the COM server for this class.
Attributes:
This column was added to the Installer database schema in version 1.1, so we won’t find it in older databases. If we set this column to 1, then this class can be provided by a side-by-side DLL listed in the IsolatedComponent table.
ProgId Table:
What is a ProgId table?
The ProgId table includes the information that the Installer uses to advertise COM servers and to register their Program IDs. This table contains the following columns:

ProgId:
This is the program ID or version-independent program ID to register.
ProgId_Parent:
This column is only used for version-independent program IDs. If we are defining a version-independent program ID, this column holds the corresponding program ID for the current version.
Class_:
This is a foreign key into the Class table. This column must be null for version-independent program IDs.
Description:
This is the localizable description for this program ID.
Icon_:
If provided, this is a foreign key into the Icon table, specifying the icon to use for this program.
IconIndex:
This is the index to the icon in the icon file to be used.
AppId Table:
What is an AppId table?
The AppId table is intended to help the Installer advertise distributed server information under COM+. This table contains the following columns:

AppId:
This is the GUID assigned to this AppId entry in the Registry.
RemoteServerName:
This column contains the value that will be written to the RemoteServerName value, under HKCR\AppID\{AppID}\
LocalService:
This column contains the value that will be written to the LocalService value, under HKCR\AppID\{<appid>} “LocalService”=<xxx>.
ServiceParameters:
This column contains the value that will be written to the ServiceParameters value, under HKCR\AppID\{appid>} “ServiceParameters”.
DllSurrogate:
This column contains the value that will be written to the DllSurrogate value under HKCR\AppId\{<appid>} “DllSurrogate”=<xxx>.
ActivateAtStorage:
This column contains the value that will be written to the ActivateAtStorage value, under HKCR\AppID\{<appid>} “ActivateAtStorage”=”Y”.
RunAsInteractiveUser:
This column contains the value that will be written to the RunAsInteractiveUser value, under HKCR\AppID\{appid>} “RunAs”=”Interactive User”.
Application Packaging Demo Video For Your Preview