White Paper on Tables



WHITE PAPER ON TABLES

Introduction to Tables:

Table basically represents a portion of the MSI file. MSI file is a well organized database. And this database is organized in to components and Features. The package installation logic is stored in the database along with the tables. Tables in an MSI file store data about how the software application is structured. To represent any given entity (say all the information to install a file) there may be several linked tables involved.

Windows Installer describes software applications using set of database tables. Installations are built by filling in rows in many different tables within a database. These tables are included in a .WSI file and when we compile this .WSI file, these tables are included in the resulting .MSI file.

Tables can be broadly classified as follows:

• Core Tables

• File Tables

• Advertising Tables

• Registry Tables

• ODBC Tables

• Service Tables

• Locator Tables

• Program Information Tables

• Installation Procedure Tables

• User Interface Tables

• System Tables

Core Tables:

What are core tables?

A) These are the tables most directly related to the Installer’s job of placing features and components on the user’s computer.

Feature Table:

What is a Feature table?

Feature table explains the logical tree structure of features. There should be atleast one feature in every MSI file. And a feature can have a parent and child features also. Feature table contains the list of features that are present in a specific MSI file. The following are the columns of Feature table:

For example suppose there are two features Feature 1 and Feature 2 in a specific msi file. Suppose ‘Feature 1’ feature is child feature of ‘Feature 2’ feature.

[pic]

Let us discuss about the feature ‘Feature 1’.

Feature Column:

It is a Primary key used to identify a particular feature record. Feature column shows Feature 1 as primary key for feature Feature1.

Feature_Parent:

Feature 2 will be its parent feature, since Feature 1 feature is a child feature of Feature 2.

Title:

Title will be the Short string of text identifying the feature. So in this case it will be Feature 1.

Description:

Longer string of text describing the feature. It can be NULL

Display:

|Value |Appearance in UserInterface |

|NULL |Feature not displayed |

|ODD NUMBER |Displayed as expanded |

|EVEN NUMBER |Displayed as collapsed |

Level:

The initial installation level of this feature. An install level of zero disables the item and prevents it from being displayed.

Directory:

Directory_ column specifies the name of a directory that can be configured. In this particular example the Directory is INSTALLDIR.

|Directory |Full path |

|1) INSTALLDIR |C:\ProgramFiles\{Application Name}. |

| |Ex: “C:\Program Files\Adobe”. Where Adobe is application name. |

|2) TargetDir |Ex: “C:\” |

Attributes:

This field specifies the remote execution option for features that have not yet been installed and for which no feature state request has been made using any of the properties. If this field is blank, the value defaults to 0.

Component Table:

What is a Component table?

Component table lists all the components that are present in a particular MSI. In component table each and every component has specific number of files under it, and the installation and uninstallation of all the files under a specific component are managed by the component. There should be at least one component in each MSI file. There can’t be component under another component. Each component should have key path. This table contains the following columns:

[pic]

Component:

Primary table key which identifies the component record.

ComponentId:

It a unique 128 bit hexadecimal number and this GUID (Globally Unique Identifier) is unique for every component.

Directory:

This column specifies to which directory a particular Component belongs to.

Attributes:

This column contains a bit flag that specifies options for remote execution. This is a bit field containing a combination of the flags as listed in below table.

|Flag |Value |Explanation |

|msidbComponentAttributesLocalOnly |0 |Component cannot be run from source. |

|msidbComponentAttributesSourceOnly |1 |Component can only be run from source. |

|msidbComponentAttributesOptional |2 |Component can run locally or from source. |

|msidbComponentAttributesRegistryKeyPath |4 |The value in the KeyPath column is a foreign key into the |

| | |Registry table. |

|msidbComponentAttributesSharedDllRefCount |8 |The Installer will increment the shared DLL RefCount value in the|

| | |Registry for this component. |

|msidbComponentAttributesPermanent |16 |The Installer will not remove this component if the product is |

| | |uninstalled. |

|msidbComponentAttributesODBCDataSource |32 |The value in the KeyPath column is a foreign key into the |

| | |ODBCDataSource table. |

|msidbComponentAttributesTransitive |64 |The component is a transitive component. See Chapter 3 for an |

| | |explanation of transitive components. |

|msidbComponentAttributesNeverOverwrite |128 |Prevents the Installer from overwriting the key path file or |

| | |Registry entry if it already exists. |

| | | |

Condition:

This column contains a conditional statement that can control whether a component is installed.

| Value |UI |

|Null (OR) TRUE |Component is Enabled |

|False |Component is disabled and is not installed. |

KeyPath:

This column contains the key path of each component.

FeatureComponents Table:

What is a FeatureComponent table?

FeatureComponents table defines the relationship between all the features and components of an msi file. If we have to change the feature of any component it can also be done through this table. For each feature, this table lists all the components that make up that feature. The following are the columns of FeatureComponents table:

[pic]

Feature_:

An external key into the first column of the Feature table.

Component_:

An external key into the first column of the Component table

PublishComponent Table:

What is a PublishComponent table?

The PublishComponent table associates components listed in the Component table with a qualifier text-string and a category ID GUID. Components with parallel functionality that have been grouped together in this way are referred to as qualified components. The PublishComponent table has the following columns:

[pic]

ComponentId:

A string GUID that represents the category of components being grouped together. It refers to a server that provides the functionality of a component to external clients rather than the component itself.

Qualifier:

A qualifier is used to distinguish multiple forms of the same component, such as a component that is implemented in multiple languages.

Component:

This identifier refers to the qualified component's record in the Component table.

AppData:

An optional localizable text describing the qualified component of this record.

Feature:

This is the feature which is using the qualified component.

Condition:

What is a condition table?

The Condition table can be used to modify the selection state of any entry in the Feature table based on a conditional expression. The Condition table has the following columns:

[pic]

Feature:

This is a foreign key to the Feature table.

Level:

This is the install level to be set for the specified feature.

Condition:

This is a conditional expression to be evaluated.

Directory:

What is a Directory table?

Directory table contains all the directories in an msi file. A directory can have a parent and child directories. If the parent or child directory of any directory is to be modified it can be done through this table. This table also lists all the parent directories of each directory. The Directory table has the following columns:

[pic]

Directory:

Directory column contains a unique identifier for a directory.

Directory_Parent:

Directory_Parent column is a reference to the directory's parent directory. Directory that has a Directory_Parent column equal to null or equal to the Directory column represents a root directory.

DefaultDir:

This column references to the name of both the target and source directories.

Complus:

What is a Complus table?

The Complus table contains information needed to install COM+ applications. The Complus table has the following columns:

[pic]

Component:

The value present in this column references to the component that contains the COM+ application.

ExpType:

This column references Export flags used during the generation of the .msi file.

IsolatedComponent:

What is an IsolatedComponent table?

The IsolatedComponent table enables the installation of “side-by-side” DLLs. A side-by-side DLL is one that is contained in the same folder as the application that uses the library. Windows has the ability to load multiple versions of side-by-side DLLs for different applications, even if they have the same name. Thus, side-by-side DLLs can provide a solution to DLL conflict problems. This table contains these columns:

[pic]

Component_Shared:

Foreign key back to the Component table. This column identifies the component that contains the library to be loaded as a side-by-side DLL.

Component_Application:

Foreign key back to the Component table. This column identifies the component that will load the side-by-side DLL.

Shortcut Table:

What is a Shortcut table?

Shortcut table holds the information the application needs, to create shortcuts on the user's computer. Shortcut table has the following columns:

[pic][pic]

Shortcut:

This column contains the name of the shortcut.

Directory:

This column specifies the directory in which the Shortcut file is created.

Name:

The localizable name of the shortcut to be created

Component:

This column references to the name of the component that contains the shortcut.

Target:

The value in this column varies for advertised and non-advertised shortcuts. For advertised shortcuts the value in this column references to the Feature which contains the component that owns the shortcut. And in the case of non-advertised shortcuts the value in this column will be formatted string, and this particular formatted string will a folder or file containing the shortcut. To convert the non-advertised shortcuts into advertised shortcut resolve the formatted string to its full path.

Arguments:

This particular column references to the command-line arguments for the shortcut.

Description:

This column refers to the description of the shortcut.

Hotkey:

Authors of installation packages are generally recommended not to set this option, because the setting of this option can add duplicate hotkeys to a user's desktop.

Icon:

This is a foreign key to the Icon table. If this is null, the icon in the target file is used.

IconIndex:

This must be a non negative integer.

ShowCmd:

The Show command for the application window.

|Value |Style |

|1 |SW_SHOWNORMAL |

|3 |SW_SHOWMAXIMIZED |

|7 |SW_SHOWMINNOACTIVE |

WKDir: This column contains the working directory of the shortcut.

File Tables:

File Tables group include tables that specify the files to be used in the installation. This includes files to be installed, moved, or duplicated, as well as to be self-registered. File Tables group includes the following tables:

File:

What is a File table?

This particular table lists entire files of an msi file. File table has the following columns

[pic]

File:

This column contains the unique name or sign for identifying a particular file.

Component:

This column references to a component containing the file.

FileName:

This column references the file name, used for installation. FileName should match the case of the source files exactly.

FileSize:

This particular column references to the size of the file in bytes which is a non-negative value.

Version:

This is the version string for the file. It can also be left null in the case of unversioned files.

Language:

A list of decimal language IDs separated by commas.

Attributes:

The integer that contains bit flags that represent file attributes.

The following table shows the definition of the bit field.

|Constant |Decimal |Description |

|msidbFileAttributesReadOnly |1 |Install the file as read-only. |

|msidbFileAttributesHidden |2 |Install the file hidden. |

|msidbFileAttributesSystem |4 |Install the file as a system file. |

|msidbFileAttributesVital |512 |This file is vital for the component to operate properly. |

|msidbFileAttributesChecksum |1024 |The file contains a valid checksum. Executable files |

| | |generally contain a checksum. |

|msidbFileAttributesPatchAdded |4096 |This indicates that this particular file is installed by a |

| | |patch rather than by a full Installer database. |

|msidbFileAttributesNoncompressed |8192 |The file is uncompressed on the source. |

|msidbFileAttributesCompressed |16384 |The file is compressed on the source. |

Sequence:

This number is used to identify which of several source disks a file might be on, by consulting the Media table.

RemoveFile:

What is a RemoveFile table?

RemoveFile table lists files that the Installer should remove. If some files remain installed even after the uninstallation of the MSI file the entry of those files should be made in these tables, for clean uninstallation of the MSI file. RemoveFile table has the following Columns:

[pic]

FileKey:

This is an arbitrary key to identify this particular entry in the table. It can be the same as the filename.

Component:

The file removal action is controlled by this component.

FileName:

This column holds the name of the file to be removed. If the FileName is null, the entire folder is removed instead, but only if it is empty.

DirProperty:

This column holds the name of a property that resolves to a full path and directory.

InstallMode:

This value controls what the Installer will actually do and must be one of the following values.

|Decimal Value |Description |

|1 |Remove only when the associated component is being installed. |

|2 |Remove only when the associated component is being removed |

|3 |Remove in either of the above cases |

MoveFile:

What is a MoveFile table?

MoveFile table lists files that the Installer should move or copy during the installation. This table contains following columns:

[pic]

FileKey:

This is an arbitrary key to identify this row of the table.

Component:

This is a foreign key into the Component table that identifies the component that this move or copy action is related to.

SourceName:

This column holds the name of the file to act on.

DestName:

This column contains the name to be given to the file after it’s moved or copied. If it’s blank, the source name is used.

SourceFolder:

This column contains a property that resolves to full path and filename.

DestFolder:

The name of a property whose value resolves to the full path to the destination folder.

Options:

|Value |Action |

|0 |To copy the file |

|1 |To move the file |

Duplicate File:

What is a DuplicateFile table?

This table contains a list of files that need to be duplicated to multiple locations when the product is installed. This table contains following columns:

[pic]

FileKey:

This is a unique identifier for the row in the table. We can use the filename as FileKey.

Component_:

The value in this column is a foreign key to the Component table. If the component this key points to isn’t installed, then this duplicate file action isn’t carried out.

File_:

This is a foreign key into the file table. This key identifies the file that is to be duplicated.

DestName:

This is the name to be given to the duplicate file. If this column contains a null, then the duplicate copy will have the same name as the original.

DestFolder:

This is a property that resolves to the full path where the duplicate should be located.

IniFile:

What is an IniFile table?

This table is one of the most important file tables that are used often. The IniFile table contains information that needs to be written to .ini files during an installation. If an .ini file is present as a normal file table entry, if possible delete the file from normal file table and add the same .ini file as ini file table entry. This table contains following columns:

[pic]

IniFile:

This is a unique identifier for this table. This can be the name of the .ini file.

FileName:

This is the actual name of the .ini file to be modified.

DirProperty:

This is a property that resolves to the name of the directory that contains the desired .ini file. If this column contains a null, then the .ini file is created in the folder having the full path specified by the Windows Folder property.

Section:

This is the .ini file section to modify.

Key:

This is the key in the specified section to modify.

Value:

This is the value to use for this key i.e., localizable value to be written.

Action:

Type of modification to be made.

|Value |Action |

|0 |To create or update an entry |

|1 |To create an entry only if the specified |

| |key doesn’t already exist |

|3 |To create a new entry or append a new comma-separated value to an|

| |existing entry. |

Component_:

A foreign key into the Component table that identifies the component that this action is related to.

RemoveIniFile:

What is a RemoveIniFile table?

RemoveIniFile table contains information that the Installer should delete from an existing .ini files (but does not remove .ini files themselves). This table contains the following columns:

[pic]

RemoveIniFile:

This is a key for this table.

FileName:

This is the actual name of the .ini file to be modified.

DirProperty:

This is a property that resolves to the name of the directory that contains the desired .ini file.

Section:

This column refers the .ini file section to modify.

Key:

This is the key in the specified section to modify.

Value:

This is the value to be deleted from this key. A value is required when the Action column is 4, optional otherwise.

Action:

This is a code indicating the action (modification) to be taken.

|Value |Action |

|2 |Delete the entire key, |

|4 |Delete a specified value from a list of values in the key. |

Component_:

This is a foreign key into the Component table that identifies the component that this action (deletion of .ini file) is related to.

Font Table:

What is a Font table?

The Font table is used to list fonts that the Installer should register on the user’s system. Font Table contains the following columns:

[pic]

File:

It identifies the file that contains the font to be registered.

FontTitle:

It is recommended to leave this column null for TrueType Fonts and TrueType Collections because the installer can register the font after reading the correct font title from the font file. If the font name is entered, it must be identical to font title from the font file. For example: We have to specify a title for fonts that do not have embedded names, such as .fon files

SelfReg Table:

What is a SelfReg table?

The SelfReg table contains information about modules that need to be self registered. The installer calls the DLLRegisterServer custom action during installation of the module; it calls DLLUnregisterServer custom action during uninstallation of the module. The installer does not self register EXE files. If we want to register any file we have to navigate to that specific file in the msi and right click that particular msi and select the option ‘register ‘ . SelfReg table contains the following columns:

[pic]

File_:

It identifies the file that should be self-registered and it functions as a foreign key to the File table.

Cost:

The cost of registering the module in bytes. This must be a non-negative number.

Example for application of selfReg table:

A) Suppose there is an entry of a file in selfReg table, so to remove the entry from selfReg table follow the instruction: Navigate through the ‘Installation Expert ‘ and right click on the file which has an entry in the selfReg table and select the option ‘Do not register ‘ as shown below.

[pic]

Media:

What is a Media table?

Media table describes the set of disks that make up the source media for the installation. This table contains the following columns:

[pic]

DiskId:

This column determines the order that the media are processed in.

LastSequence:

This is the file sequence number (corresponding to the Sequence column of the File table) for the last file on this particular piece of media. A disk contains all files between the LastSequence number for the previous disk and the LastSequence number for itself.

DiskPrompt:

This is the name that the Installer will use to prompt the user for this particular disk.

Cabinet:

This is the name of the cabinet file on the disk, if any of the files on the disk are compressed into a cabinet file. If there is no cabinet file on the disk, this column should be null.

VolumeLabel:

This is the physical volume name of the disk. The Installer uses this to verify that the correct disk is in the drive.

Source:

This column is only used by patch files, and only if a cabinet file with the patch files is located somewhere other than the original media. For normal installations this column should be left null. If the source files are contained within the Installer package itself, in a cabinet file stored in a stream, and it is still needed to make an entry in the Media table. In this case, though, we must prepend a pound sign (#) to the cabinet filename.

BindImage Table:

What is a BIndImage table?

BindImage table contains information about each executable or DLL that needs to be bound to the DLLs imported by it. This table contains the following two columns:

[pic]

File_:

It identifies the file that should be self-registered and it must be an executable file.

Path:

A list of paths, separated by semicolons, which represent the paths to be searched to find the imported DLLs. The list is usually a list of properties.

Environment Table:

What is an Environment table?

Environment table contains information on environment variables that the Installer should set or remove. Environment table is basically used to resolve the hard coded paths in the MSI file or application. For example we can set “C:\WINDOWS” to SystemRoot. Some of the important environmental variables are shown in the below table. To see all the environment variables type ‘set’ on the command line as shown below. This table contains the following columns:

|Environment Variable |Value |

|SystemDrive |C: |

|SystemRoot |C:\WINDOWS |

[pic]

[pic]

Environment:

This is the primary key of the table.

Name:

The Name column contains a prefix and the name of the environment variable. The prefix indicates what action the Installer should take.

|PREFIX |ACTION |

|= |Set the environment variable during installation. |

|+ |Create the variable if it doesn’t exist, and set it during |

| |installation. |

|- |Remove the environment variable when the component is being |

| |installed. |

|* |Under Windows NT or Windows 2000, this puts the environment |

| |variable in the system environment; otherwise, it is placed in |

| |the user environment. |

|=- |Set the variable on install and remove it on uninstall. |

|!- |Remove the environment variable whether the |

| |component is being installed or uninstalled. |

Value:

This is the value that is to be set for the variable.

Conditions:

|Field Value |Corresponding Action. |

|Empty |variable is removed |

|Field is blank and the string in the Name field is prefixed by |The variable is removed only when the component is removed. |

|the - symbol | |

|Prefixing the string by the Null character [~] and the separator |To append a value to the end of an existing variable |

|character. Eg: [~];Value | |

|Append the string in this field by the separator character and |To prefix a value to the front of an existing variable |

|the Null character [~].Eg: Value;[~] | |

|If no [~] is present in the field |The string represents the entire value to be set or deleted. |

Component:

Indicates the component that’s associated with the setting.

Icon Table:

What is an Icon table?

The Icon table contains information necessary to create desktop icons. This table contains the following columns:

[pic]

Name:

This is the name to use for the icon file.

Data:

This is the actual icon data, in PE (.exe, .dll) or icon (.ico) format. Generally, we should make entries in this table for each shortcut, file extension, and CLSID registered with the Installer. When we want the products to be advertised, where the icon needs to be present on the user’s desktop without the product being installed, and this table provides alternative files that have the icons for advertised products.

CreateFolder Table:

What is a CreateFolder table?

The CreateFolder table contains information about folders that the Installer should create explicitly. This table contains the following columns:

[pic]

Directory_:

This is a foreign key into the Directory table, which identifies the folder to be created.

Component:

This is a foreign key into the Component table, which identifies the component that requires this folder. This table is intended primarily for the creation of empty folders.

Example for the application of CreateFolder table:

A) To resolve ICE 64 errors we have to make an entry of the folder in the CreateFolder table.

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:

[pic]

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:

[pic]

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:

[pic]

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:

[pic]

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:

[pic]

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:

[pic]

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:

[pic]

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\{} "LocalService"=.

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\{} "DllSurrogate"=.

ActivateAtStorage:

This column contains the value that will be written to the ActivateAtStorage value, under HKCR\AppID\{} "ActivateAtStorage"="Y".

RunAsInteractiveUser:

This column contains the value that will be written to the RunAsInteractiveUser value, under HKCR\AppID\{appid>} "RunAs"="Interactive User".

Registry Tables:

The Registry table:

What is a Registry table?

This table holds all the miscellaneous (that is, not directly related to COM or COM+) information that the Installer needs to write to the Registry to install the application. The Registry table is used by the WriteRegistryValues action. This table contains the following columns:

[pic]

Registry:

This column is an arbitrary key for the table which is used to identify a registry record.

Root:

This column indicates the Registry hive to be written to. It must have one of the values shown in below table.

|Constant |Value |Explanation |

|None (Empty) |-1 |i) For a per-user installation, writes to |

| | |HKEY_CURRENT_USER. |

| | |ii) For a per-machine installation, Writes |

| | |to HKEY_LOCAL_MACHINE. |

|msidbRegistryRootClassesRoot |0 |HKEY_CLASSES_ROOT |

|msidbRegistryRootCurrentUser |1 |HKEY_CURRENT_USER |

|msidbRegistryRootLocalMachine |2 |HKEY_LOCAL_MACHINE |

|msidbRegistryRootUsers |3 |HKEY_USERS |

Key:

The Registry key to be written.

Name:

This column contains the name of the Registry value being written. If the column is null, then the value is written to the default for the Registry key. If the Value column is null, then this column should contain one of the special characters

|Special Character |Corresponding Action |

|+ |To create the key when the component is |

| |Installed. |

|- |To delete the key when the component is uninstalled |

|* |To create the key on installation and delete it on uninstallation|

Value:

This is the actual data to write to the Registry value.

|Special Character. |Meaning |

|If the value starts with #x |Stored as a hexadecimal value. |

|If the value starts with #% |Stored as an expandable string. |

|If the value starts with # |Stored as an integer. |

|The special string [~] is stored as a null. |If this string occurs, the value is stored as a list of strings. |

|If the string starts with [~] |The value is appended to any existing value. |

|If the string ends with [~] |The value is prepended to any existing value. |

|If the value starts with ## |Stored as a string starting with a single # sign. |

Component:

This is a foreign key to the Component table that identifies the component controlling this Registry operation.

The RemoveRegistry Table:

What is a RemoveRegistry table?

The RemoveRegistry table lists information that the Installer should delete from existing Registry keys when a product is installed. This table is used by the RemoveRegistryValues action. It has following columns:

[pic]

RemoveRegistry:

This is an arbitrary key for the row of the table.

Root:

This column identifies the Registry hive that is to be edited. The RemoveRegistry table uses the same constants here that the Registry table uses.

Key:

This is the Registry key to be edited.

Name:

This is the Registry value to be deleted. We can use the special value “–” (without the quotes) to delete the entire key including any subkeys.

Component_:

This is a foreign key to the Component table, indicating the component whose installation triggers the removal of the keys.

ODBC Tables:

The Open Database Connectivity (ODBC) tables group consists of five tables that allow the Installer to install ODBC drivers and data sources.

The ODBCDataSource Table:

What is a ODBCDataSource table?

The ODBCDataSource table lists the ODBC data sources in the installation. This table has following columns:

[pic]

DataSource:

This is an arbitrary string identifying the data source to the Installer.

Component_:

The data source is installed as part of the referenced component.

Description:

This is the description that should be shown to the user when they browse to the data source on their machine. Its length cannot exceed cannot SQL_MAX_DSN_LENGTH.

DriverDescription:

This is the driver name to be used for this data source. This might be a driver in the ODBCDriver table, or it might be a driver that’s already on the user’s computer.

Registration:

This column can contain either 0, to register the data source per-machine, or 1, to register the data source per-user.

The ODBCDriver Table:

What is an ODBCDriver table?

The ODBCDriver table contains the information needed to install ODBC drivers. This table includes the following columns:

[pic]

Driver:

This is an arbitrary key for this table.

Component_:

It indicates the component that includes this driver.

Description:

This is the non-localizable ODBC key for the driver.

File:

It must point to the DLL that contains the ODBC driver.

File_Setup:

It can be used to indicate a DLL that is called to do the setup of the listed ODBCdriver. If this column is null, then the file listed in the File_ column is assumed to handle its own setup duties.

The ODBCTranslator Table:

What is an ODBCTranslator table?

ODBCTranslator table is used to install ODBC translation DLLs. This table includes the following columns:

[pic]

Translator:

A primary key for the table.

Component_:

This column indicates the component that includes this translator.

Description:

This is the non-localizable description of this translator.

File_:

It must point to the DLL that contains the ODBC translator.

File_Setup:

It can be used to indicate a DLL that is called to do the setup of the listed ODBC translator. If this column is null, then the file listed in the File_ column is assumed to handle its own setup duties.

The ODBCAttribute Table:

What is an ODBCAttribute table?

This table contains attributes for ODBC drivers that need to be registered when the drivers are installed. This table includes following columns:

[pic]

Driver_:

It indicates the driver that requires this attribute.

Attribute:

This column indicates the name of the attribute.

Value:

This column contains the value to be registered for the attribute.

The ODBCSourceAttribute Table:

What is an ODBCSourceAttribute table?

The ODBCSourceAttribute table contains attributes for ODBC data sources that need to be registered when the data sources are installed. This table includes following columns:

[pic]

DataSource:

It indicates the data source that requires this attribute.

Attribute:

This column holds the name of the attribute.

Value:

This column contains the value to be registered for the attribute.

Service Tables:

ServiceInstall Table:

What is a ServiceInstall table?

The ServiceInstall table lets the Installer add a new service to the user’s computer and has the following columns

[pic]

ServiceInstall:

This is an arbitrary key for this table.

Name:

Column contains the name of the service—that is, the name we would see in the Services applet under Windows NT. string has a maximum length of 256 characters.

DisplayName:

String has a maximum length of 256 characters which is an alternative, user-friendly name for the service that can be retrieved from the user interface.

ServiceType:

This column is a set of bit flags that specify the type of service. And this column specifies one of the following service types:

|Type Of Service |Details |

|SERVICE_WIN32_OWN_PROCESS |A Microsoft Win32 service that runs its own process. |

|SERVICE_WIN32_SHARE_PROCESS |A Win32 service that shares a process. |

|SERVICE_INTERACTIVE_PROCESS |A Win32 service that interacts with the desktop. This value |

| |cannot be used alone and must be added to one of the two above |

| |types. |

The Windows Installer doesn’t support installing kernel drivers or file system drivers.

StartType:

This column is a set of bit flags that specify when to start the service. One of the following types of service start must be specified in this column.

|Type Of Service Start |Details |

|SERVICE_AUTO_START |Service that automatically starts when the |

| |system is started |

|SERVICE_DEMAND_START |Service that is started manually |

|SERVICE_DISABLED |Specifies a service that can no longer be started. |

|SERVICE_BOOT_START |For a boot driver |

|SERVICE_SYSTEM_START |For a driver that’s started during system startup. |

The Windows Installer cannot use the SERVICE_BOOT_START and SERVICE_SYSTEM_START options.

ErrorControl:

This column specifies the behavior if the service fails to start. It can be set to

|SERVICE_ERROR_IGNORE |To just log any error |

|SERVICE_ERROR_NORMAL |To log the error and display a message |

|SERVICE_ERROR_CRITICAL |To restart the system using the Last Known |

| |Good configuration. |

LoadOrderGroup:

This column contains the name of the load ordering group to which this service belongs.

Dependencies:

This column lists any services that must be started before this service, separated by null characters, which we can represent with the [~] shortcut. The list must end with an extra null character. If there are no dependencies, we must explicitly put a null character into this column.

StartName:

This column specifies the account name, if any, that the service should log on as. Leave this column blank to use the default LocalSystem account.

Password:

This column specifies the password to use if an account name is supplied in the StartName column.

Arguments:

This column contains any command-line arguments or properties used to start the service.

Component_:

This column is a foreign key to the Component table; it specifies the component to which the service belongs.

Description:

This column contains the localizable description of the service.

The ServiceControl Table

What is a ServiceControl Table?

As the name itself specifies that this particular table is used to control the services. This table allows the Installer to start and stop services. These can be services that were already present on the user’s computer, or services listed in the ServiceInstall table. This table has these columns:

[pic]

ServiceControl:

This is the primary key of this table

Name:

This column is the string naming the service. This column can be used to control a service that is not installed.

Event:

This column contains a combination of the flags shown in table below to control the effects of this entry.

|Constant |Value |Description |

|msidbServiceControlEventStart |1 |Starts the service during the StartServices action |

|msidbServiceControlEventStop |2 |Stops the service during the StopServices action |

|msidbServiceControlEventDelete |8 |Deletes the service during the DeleteServices action |

|msidbServiceControlEventUninstallStart |16 |Starts the service during the StartServices action when an uninstall is |

| | |being performed |

|msidbServiceControlEventUninstallStop |32 |Stops the service during the StopServices action when an uninstall is being |

| | |performed |

|msidbServiceControlEventUninstallDelete |128 |Deletes the service during the DeleteServices action when an uninstall is |

| | |being performed |

Arguments:

This is a null-separated list of arguments to use when starting the service.

Wait:

This column can be set to 0, to wait until the service is in a pending state, or to 1, to wait until the service is completely started.

Component_:

External key to column one of the Component Table.

Locator Table:

The primary uses for this set of tables are to find old versions of components being upgraded or to check to make sure the user has installed software prerequisites. The Locator Tables group contains a set of tables that can be used to search for applications and files on the user’s computer before the new software is installed.

The Signature Table:

What is a Signature table?

The Signature table holds the information that uniquely identifies a file signature. This table contains the following columns:

[pic]

Signature:

The Signature column is a unique file signature

FileName:

This is the name of the file being checked.

MinVersion:

If the value in this column is notnull, the Installer checks the version of the file and only accepts the file as identical if the file version is greater than or equal to this version.

MaxVersion:

If this column is non-null, the Installer checks the version of the file and only accepts the file as identical if the file version is less than or equal to this version.

MinSize:

If this column is non-null, the Installer checks the size of the file and only accepts the file as identical if the file size is greater than or equal to this size.

MaxSize:

If this column is non-null, the Installer checks the size of the file and only accepts the file as identical if the file size is at most equal to this maxsize.

MinDate:

If this column is non-null, the Installer checks the creation date of the file and only accepts the file as identical if the file creation date is greater than or equal to this date.

MaxDate:

If this field is specified, then the file under inspection must have a creation date that is at most equal to MaxDate.

Languages:

If this column is non-null, the Installer checks the languages supported by the file and only accepts the file as identical if all of the languages on this list are supported by the file.

The RegLocator Table:

What is a RegLocator table?

The RegLocator table holds the information needed to search for a file or directory using the registry, or to search for a particular registry entry itself. This table has the following columns:

[pic]

Signature_

The value in the Signature_ field represents a unique signature that is an external key into column one of the Signature table. If this signature is present in the Signature table, the search is for a file. If this signature is absent from the Signature table, and the value of the Type column is msidbLocatorTypeRawValue, the search is for the registry key name pointed to by the RegLocator table. Otherwise the search is for a directory pointed to by the RegLocator table

Root:

This is a constant that indicates which Registry hives to search.

|Decimal |Root Key |

|0 |HKEY_CLASSES_ROOT |

|1 |HKEY_CURRENT_USER |

|2 |HKEY_LOCAL_MACHINE |

|3 |HKEY_USERS |

Key:

This is the key for the Registry value to evaluate.

Name:

This is the name of the Registry value to evaluate.

Type:

|Decimal value of type |Description |

|0 |Key path is a directory. |

|1 or missing |Key path is a file. |

|2 |Key path is Registry value. |

The IniLocator Table:

What is an IniLocator table?

The IniLocator table is used to locate files and directories referred to in .ini files. It has these following columns:

[pic]

Signature_

An external key into the first column of the Signature table. The Signature_ column represents a unique signature and is also the external key into column one of the Signature table. If this signature is present in the Signature table, then the search is for a file. If this key is absent from the Signature table, and the value of the Type column is msidbLocatorTypeRawValue, the search is for the .ini entry specified by the IniLocator table. Otherwise the search is for a directory specified by the IniLocator table.

Filename:

This is the .ini filename.

Section:

This is the section within the .ini file.

Key:

This is the key within the section.

Field:

The field in the .ini line to read, starting with 1 as the first field. If zero or null, the entire line is read.

Type:

A value that determines whether the .ini value is a file location, a directory location, or raw .ini value.

|Decimal |Description |

|0 |A directory location |

|1 |A file location |

|2 |A raw .ini value |

The CompLocator Table:

The CompLocator table takes advantage of the Installer’s own configuration information to find files. This table contains following three columns:

[pic]

Signature_:

This column represents a unique file signature and is also the external key into the Signature Table. If the key is absent from the Signature Table, the search is assumed to be for the presence of a directory pointed to by the CompLocator Table.

ComponentID:

This is the Installer component ID of the component whose keyfile we are searching for. This need not be a component installed by the current Installer package.

Type:

If zero, the key path is a directory. If 1 or missing, it’s a file.

|Value |Description |

|0 |Key path is a directory |

|1 or Null |Key path is a file. |

The DrLocator Table:

What is a DrLocator table?

The DrLocator table contains information used to locate files by searching on the user’s hard drive or directory tree. The DrLocator table has the following columns:

[pic]

Signature_:

This column can be either a foreign key into the Signature table, or a unique identifier that occurs only in this table. In the latter case, we are assumed to be searching for a directory rather than a file.

Parent:

This column holds the signature of the parent directory of the file in the Signature_ column. If this field is null, and the Path column doesn’t evaluate to a full path, then all the fixed drives in the user’s system are searched.

Path:

The Path column contains the path on the user's system. This is a either a full path or a relative subpath below the directory specified in the Parent column.

Depth:

This is the number of levels of subdirectories to recursively search. If zero or null, then no subdirectories are searched.

The AppSearch Table

What is an AppSearch table?

The AppSearch table contains properties needed to search for a file having a particular file signature. The AppSearch table can also be used to set a property to the existing value of a registry or .ini file entry. It contains two columns:

[pic]

Property:

This is the name of a property. It should be a public property (all capital letters).

Signature_:

This column is a foreign key into the Signature, RegLocator, IniLocator, CompLocator or DrLocator tables. When the AppSearch action is executed, it looks for the files referred to by the Signature_ column, and if they’re found, it sets their names into the corresponding properties in the Property column.

The CCPSearch Table:

What is a CCPSearch table?

The CCPSearch table contains a list of signatures that should be used with the Compliance Checking Program (CCP). It has a following single column:

[pic]

Signature_:

This column is a foreign key into the Signature, RegLocator, IniLocator, CompLocator or DrLocator tables. This table is used by the CCPSearch and RMCCPSearch actions.

Program Information Tables:

The Program Information tables group contains tables with information that’s used for the Installer’s internal operations. This group includes these tables:

Property Table:

What is a Property table?

The Property table contains all of the properties and corresponding values that are present in an installation. This table has following columns:

[pic]

Property:

This is the name of the property. Public properties are identified by being in entirely uppercase letters. And private properties are present in lower case.

Value:

This is the value of the property. And the value of the property can never be NULL or an empty string.

Example for application of property table:

I) let us consider an application ABC.msi in which during the process of normal installation it needs the manual entry of a License code, so during the silent installation of the ABC.msi it prompts an error. So we will now see how property table plays an important role in such cases.

A)

[pic]

Suppose during the process of installation of an application there is a situation as shown above to select one check box ,during normal installation we can check the particular check according to our requirement. But during the silent installation it will be a problem to check a particular check box automatically, so in such cases we have to go to a particular dialog box by opening the msi file and check the check box of our requirement by setting the corresponding value of that property as shown below:

[pic]

So go to ‘Setup Editor’ option by opening the MSI file and click the dialogs option, and then navigate through the particular dialog of requirement. And then double click the option to be selected during the silent installation and set the value of that property in this case “OPCHECk” as one in property table.

The Binary Table:

What is a Binary Table?

The Binary table holds binary data (such as images, animations, bitmaps and icons) used by other parts of the Installer, chiefly on the user interface. The binary table is also used to store data for custom actions. This table has following two columns:

[pic]

Name:

This column uniquely identifies this row of the table.

Data:

This is unformatted binary data.

The Error Table:

What is an Error table?

The Error table is used by the Installer to convert error numbers and associated data into meaningful messages. This table has the following columns:

[pic]

Error:

This is the error number.

Message:

This is the template used to display this message. Error numbers from 25000 to 30000 are reserved for custom actions.

The Shortcut Table:

What is a Shortcut table?

The Shortcut table contains information used to create shortcuts on the user’s computer. This table contains the following columns:

[pic]

Shortcut:

This is the name of the shortcut which is a key value for this table.

Directory_:

This is an external key into the Directory table, which specifies the directory where this shortcut will be created.

Name:

The name of the shortcut to be created.

Component_:

This column is a foreign key to the Component table; it specifies the component that owns this shortcut.

Target:

If the shortcut is advertised, the column is a foreign key to the Feature table. If the shortcut is non-advertised, this is a property whose value supplies the target for the shortcut.

Arguments:

This column shows any command-line arguments to be used with this shortcut.

Description:

The localizable description of the shortcut

Hotkey:

This is the hotkey for this shortcut, if there are any. Normally this column is null.

Icon_:

This is a foreign key to the Icon table.

IconIndex:

This is the index of the icon to use from the icon file.

ShowCmd:

This is the style that the shortcut should use to launch the application. Valid values are given in the following table.

|Value |Meaning |

|0 |Normal |

|3 |Maximized |

|7 |Minimized and inactive. |

WkDir:

The name of the property that has the path of the working directory for the shortcut. Advertising a feature will only create an advertised shortcut on Windows 2000 and Windows 98, or older systems running Internet Explorer 4.01 or higher. This table is used by the CreateShortcuts and RemoveShortcuts actions.

The ReserveCost Table

What is a ReserveCost table?

The ReserveCost table is used to set aside free space on the user’s hard drive as part of the minimum requirements for an installation. This table includes following columns:

[pic]

ReserveKey:

This is an arbitrary primary key for the table that uniquely identifies a ReserveCost table entry.

Component_:

This column is a foreign key into the Component table. It identifies the component that needs to reserve the space.

ReserveFolder:

This is a property that evaluates to the name of a directory where the space should be reserved.

ReserveLocal:

The number of bytes of disk space to reserve if the linked component is installed to run locally.

ReserveSource:

This is the number of bytes to reserve if the indicated component is installed to run from source.

Installation Procedure Tables:

The Installation Procedures Tables group includes tables that control the sequence of actions during an installation. This group includes following tables:

The InstallUISequence Table:

What is an InstallUISequence table?

The InstallUISequence table lists actions that are executed when the top-level INSTALL action is executed and the internal user interface level is set to full UI or reduced UI. The installer skips the actions in this table if the user interface level is set to basic UI or no UI. This table has following columns:

[pic]

Action:

This is the name of the action to execute. It can be a built-in action, a custom action, or the name of a dialog box from the Dialog table.

Condition:

If present, this condition is evaluated before the action is executed. If it evaluates to False, the action is skipped.

Sequence:

The actions are run in increasing sequence order. There are exceptions to this rule. Below table lists the special numbers we can use in this column.

|Value |Meaning |

|Positive number |Run the action in this sequence. |

|0 OR NULL |Don’t run this action. |

| |Run this action when an installation is successfully completed. |

|-2 |Run this action when the user cancels during an installation. |

|-3 |Run this action in case of a fatal error. |

|-4 |Run this action when the installation is suspended. |

|Other Negative Values |Don’t run this action. |

The InstallExecuteSequence Table

What is an InstallExecuteSequence table?

The InstallExecuteSequence table has the same structure as the InstallUISequence table. The actions in this table are executed when the top-level INSTALL action is executed and the Installer is done processing the actions in the InstallUISequence table. If the user interface level is set to basic UI or no UI, then this table is the only one that is executed.

[pic]

The AdminUISequence Table

What is an AdminUISequence table?

The AdminUISequence table has the same structure as the InstallUISequence table. The actions in this table are executed when the top-level ADMIN action is executed and the user interface level is set to the full UI or reduced UI. If the user interface level is set to basic UI or no UI, the actions in this table are skipped.

[pic]

The AdminExecuteSequence Table

What is an AdminExecuteSequence Table?

The AdminExecuteSequence table has the same structure as the InstallUISequence table. The actions in this table are executed when the top-level ADMIN action is executed and the Installer is done processing the actions in the AdminUISequence table. If the user interface level is set to basic UI or no UI, then this table is the only one that is executed.

[pic]

The AdvtUISequence Table

What is an AdvtUISequence Table?

The AdvtUISequence table has the same structure as the InstallUISequence table. The actions in this table are executed when the top-level ADVERTISE action is executed and the user interface level is set to the full UI or reduced UI. If the user interface level is set to basic UI or no UI, the actions in this table are skipped.

The AdvtExeuteSequence Table

What is an AdvtExeuteSequence Table?

The AdvtExecuteSequence table has the same structure as the InstallUISequence table. The actions in this table are executed when the top-level ADVERTISE action is executed and the Installer is done processing the actions in the AdvtUISequence table. If the user interface level is set to basic UI or no UI, then this table is the only one that is executed.

[pic]

The CustomAction Table

What is a CustomAction Table?

The CustomAction table includes the basic information necessary to enable the Installer to run custom actions. The CustomAction table provides the means of integrating custom code and data into the installation. The source of the code that is executed can be a stream contained within the database, a recently installed file, or an existing executable file. Custom actions are bits of code that are called from external DLLs and other locations that are not part of the Installer proper. This table has following columns:

[pic]

Action:

This is the name that the custom action is known as in the sequence tables.

Type:

This column indicates the custom action type and additional details about how it should be run.

Source:

The meaning of this column depends on the type of the custom action. This table contains a property name or external key into another table. For example, the Source column may contain an external key into the first column of one of the following tables containing the source of the custom action code. Tables might be Directory table, Binary Table, File Table or Property Table.

Target:

An execution parameter that depends on the basic type of custom action. For example, this field may contain the following depending on the custom action.

|TARGET |CUSTOM ACTION |

|Entry Point |Calling a DLL. |

|Executable name with arguments |Calling an existing executable. |

|Command line arguments (optional) |Calling an executable just installed. |

|Target file name (required) |Creating a file from custom data. |

|Null |Executing script code. |

The LaunchCondition Table:

What LaunchCondition Table?

It contains a list of conditions that all must be satisfied for the installation to begin. This table contains following two columns:

[pic]

Condition:

This column holds a condition to evaluate before the installation begins.

Description:

This is an error message to be displayed to the user if the Condition evaluates to false.

The LockPermissions Table:

What is a LockPermissions Table?

The LockPermissions table can be used to secure installed objects under Windows NT or Windows 2000. It can be used with the installation of files, registry keys, and created folders. It includes following columns:

[pic]

LockObject:

This column specifies the object (file, directory, or registry key) to be secured. It is a foreign key into another table. The other table is determined by the value of the Table column.

Table:

This column and the LockObject column specify the file, directory, or registry key that is to be secured. In the Table column, enter File, Registry, or CreateFolder to specify a LockObject listed in the File Table, Registry Table, or CreateFolder Table.

Domain:

This is the name of the domain which contains the user whose permissions are to be adjusted.

User:

This is the name of the user whose permissions are to be adjusted.

Permission:

This is the Windows NT permission to be applied. This column identifies the integer description of system privileges.

|Privilege |Description |

|GENERIC_ALL :268435456 |Read, write, and execute access |

|GENERIC_EXECUTE :536870912 |Execute access |

|GENERIC_WRITE :1073741824 |Write access |

We cannot specify GENERIC_READ in the Permission column

The Upgrade Table:

What is an Upgrade table?

The Upgrade table contains information that’s used when an Installer database is used to make a major upgrade to an existing product. This table contains following columns:

[pic]

UpgradeCode:

The UpgradeCode property in this column specifies the upgrade code of all products that are to be detected by the FindRelatedProducts action. Unlike the ProductCode, different products may share the same UpgradeCode.

VersionMin:

This column specifies the minimum version to be upgraded. Lower boundary of the range of product versions detected by FindRelatedProducts. A null value means there is no lower bound on the version to be upgraded.

VersionMax:

This column specifies the maximum version to be upgraded. Upper boundary of the range of product versions detected by the FindRelatedProducts action. A null value means there is no upper bound on the version to be upgraded.

Language:

This column contains the set of languages detected by FindRelatedProducts that are to be upgraded and are separated by semicolons. A null value means that any language can be upgraded.

Attributes:

This column can contain any combination of the bit flags as shown in below tables:

|Bit flag ( decimal) |Attribute |

|1 |To enable the MigrateFeatureStates action |

|2 |To detect but not change previous versions |

|4 |To install the new version even if the old version can’t be |

| |removed |

|256 |To include VersionMin in the versions upgraded |

|512 |To include VersionMax in the version to be upgraded |

|1024 |To upgrade all languages except those listed in the Language |

| |column |

Remove:

This column contains a comma-delimited set of names of existing features to be removed.

ActionProperty:

When the FindRelatedProducts action detects a related product installed on the system, it appends the product code to the property specified in this field. The property specified in this column must be a public property and the package author must add the property to the SecureCustomProperties property. Each row in the Upgrade table must have a unique ActionProperty value. After FindRelatedProducts, the value of this property is a list product codes, separated by semicolons (;), detected on the system.

User Interface Tables:

Like everything else about the Installer, the user interface is contained in a set of tables. Perhaps the easiest way to think about it is that the Installer stores all the properties needed to create dialogs and controls without providing any visual designer for those objects.

Dialog Table:

What is a Dialog table?

The Dialog Table contains all the dialogs that appear in the user interface (UI) in both the full and reduced modes. Dialog Table has the following columns:

[pic]

Dialog:

The primary key and name of the dialog box.

HCentering:

This is the column that specifies the position of the left side of the dialog box, on a scale of 0, at the left edge of the screen, to 100, at the right edge of the screen

VCentering:

The vertical position of the dialog box. The range is 0 to 100, with 0 at the top edge of the screen and 100 at the bottom edge.

Width:

This column specifies the width of the dialog box, including the borders.

Height:

The height of the rectangular boundary of the dialog box.

Attributes:

This is a set of attributes for the dialog box. Some of the values for this column are listed in below Table.

|Name |Value |Meaning |

|Visible |1 |Dialog box is visible. |

|Modal |2 |Dialog box is modal. |

|Minimize |4 |Dialog box can be minimized. |

|SysModal |8 |Dialog box is system modal. |

Title:

This is the caption to use for the dialog box.

Control_First:

This is a foreign key into the Control table, which identifies the control that receives the focus when the dialog box is first displayed.

Control_Default:

This is a foreign key into the Control table, which identifies the default control for the dialog box.

Control_Cancel:

This is a foreign key into the Control table, which identifies the cancel control for the dialog box.

The Control Table:

What is a Control table?

The Control table includes detailed information on each control on every dialog box displayed by the Installer. This table contains following columns:

[pic]

Dialog_:

This column is a foreign key to the Dialog table; it indicates the dialog box where this control appears.

Control:

This column contains name of the control. This name must be unique within a dialog box but can be repeated on different dialog boxes. The Control column combined with the Dialog_ column form the primary key to this table.

Type:

This is the type of the control. This must be one of these values: Billboard, Bitmap, Checkbox, ComboBox, DirectoryCombo, DirectoryList, etc,

X:

This is the horizontal coordinate of the left edge of the control measured in Installer units.

Y:

This is the vertical coordinate of the upper edge of the control measured in Installer units.

Width:

This is the width of the control measured in Installer units.

Height:

This is the height of the control measured in Installer units.

Attributes:

This is a set of attributes for the control. Some of the values for this column are listed in below Table.

|Name |Control Type |Value |Meaning |

|Visible |ALL |1 |Control is visible. |

|Enabled |All |2 |Control is enabled. |

|Sunken |All |4 |Control is displayed with a sunken visual effect. |

|Indirect |All |8 |If set, the control’s property specifies the |

| | | |identifier for the actual property to change. |

|IntegerControl |All |16 |Any associated property is an integer. Otherwise it is|

| | | |a string. |

Property:

This is the name of a property whose value is tied to this control. Radio button, list box, and combo box values are tied into a group by being linked to the same property.

Text:

This is the initial text of the control. For example that might be the caption of a Text control or the initial text displayed in an Edit control.

Control_Next:

This is the name of the next control in the tab order of this dialog box.

Help:

This is an optional string for use as help. It consists of two parts separated by a ‘|’ character. The first part is used as a tooltip for the control; the second part is used for context-sensitive help. Note that context-sensitive help is not yet supported by the Windows Installer Service as of version 1.1.

The ControlCondition Table

What is a ControlCondition Table?

The ControlCondition table allows us to make some changes to controls based on conditional logic. For example, using this table the author could choose to hide a control based on the VersionNT property. It contains following columns:

[pic]

Dialog_:

This is a foreign key to the Dialog table, which indicates the dialog box that contains the control that we wish to modify.

Control_:

This is a foreign key to the Control table, which indicates the control that we wish to modify.

Action:

This column holds one of the following values:

|Action |Meaning |

|Default |Set the control as the default for the dialog |

|Disable |Disable the control |

|Enable |Enable the control |

|Hide |Make the control invisible |

|Show |Make the control visible |

Condition:

This column houses the condition to be evaluated. If the condition is true, the action specified in the Action column is carried out.

The ControlEvent Table:

What is a ControlEvent Table?

This table specifies the events that happen when the user interacts with controls. The ControlEvent table allows the author to specify the Control Events started when a user interacts with a PushButton Control, CheckBox Control, or SelectionTree Control. This table has following columns:

[pic]

Dialog_:

This is a foreign key to the Dialog table, which indicates the dialog box that contains the control that we wish to register an event for.

Control_:

This is a foreign key to the Control table, which indicates the control for which we wish to register an event.

Event:

An identifier that specifies the type of event that should take place when the user interacts with the control specified by Dialog_ and Control_.

Argument:

This column shows additional information required by the particular event. A value used as a modifier when triggering a particular event.

Condition:

A conditional statement that determines whether the installer activates the event in the Event column. The Installer evaluates this statement and only triggers the event if the statement evaluates to True. If we wish an event to take place unconditionally, enter a 1 in this column.

Ordering:

If we have several events tied to the same control, we can enter positive integers in this column to control the order of execution of the events.

The EventMapping Table:

What is an EventMapping table?

The EventMapping Table lists the controls that subscribe to some control events, and lists the attribute to be changed when the event is published by another control or the Windows Installer. For example, there’s a TimeRemaining event that the Installer uses to tell the user interface how long is left in a particular installation. We should use the EventMapping table to set the controls that respond to a particular Installer event. This table contains following columns:

[pic]

Dialog_:

This is a foreign key to the Dialog table, which indicates the dialog box that contains the control that we wish to subscribe to an event.

Control_:

This is a foreign key to the Control table, which indicates the control that we wish to subscribe to an event.

Event:

This is the event that we want to subscribe to.

Attribute:

This is the name of the control attribute that should be set by the event.

The TextStyle Table:

What is a TextStyle table?

The TextStyle table lists the fonts that can be used on controls. This table has following columns:

[pic]

TextStyle:

This is a name for the text style.

FaceName:

This is the font name to use for this text style.

Size:

This is the size of the font to use for this text style, specified in Installer units.

Color:

This column is only used if the text style is used in a text control. All other controls use the system default text color. This value is computed by combining the red, green, and blue values with the formula (65536* blue) + (256 * green) +red.

StyleBits:

A combination of bits indicating the formatting for the text. The individual style bits have the following values.

|Decimal |Style |

|1 |Bold |

|2 |Italic |

|4 |Underline |

|8 |Strikethrough |

The UIText Table:

What is a UIText table?

The UIText table contains the localized versions of some of the strings used in the user interface. These strings are not part of any other table. The UIText table is for strings that have no logical place in any other table. This table has following two columns:

[pic]

Key:

This is an identifier for the string.

Text:

This is the text for the string.

The ActionText Table:

What is an ActionText Table?

The ActionText table contains the information that is displayed in the Installer progress dialog box and written to the log. It has following columns:

[pic]

Action:

Name of the action

Description:

This is the description to be displayed or written to the log.

Template:

A localized format template that is used to format action data records to display during action execution.

The Billboard Table:

What is a Billboard Table?

Billboards are dialogs that progress dynamically while an action is taking place. Typically they’re used to entertain the user or provide information while files are being installed. The Billboard table lists all of the billboards in the installation using following columns:

[pic]

Billboard:

This is an identifier for the billboard.

Feature_:

An external key to the first column of the Feature table. The billboard is displayed only if this feature is being installed.

Action:

The name of an action. The billboard is displayed during the progress messages received from this action.

Ordering:

If there are multiple billboards for a single action, we can use positive integers in this column to specify the display order.

The BBControl Table:

What is a BBControl Table?

The BBControl table lists the controls to be displayed on billboards. This table has following columns:

[pic]

Billboard_:

This column is a foreign key to the Billboard table, which indicates the billboard where this control appears.

BBControl:

Name of the control. This name must be unique within a billboard but can be repeated on different billboards. This column combined with the Billboard_ column forms the primary key to the table.

Type:

This is the type of the control. Only static controls (Text, Bitmap, Icon or static custom controls) can be placed on billboards.

X:

This is the horizontal coordinate of the left edge of the control measured in Installer units.

Y:

This is the vertical coordinate of the upper edge of the control measured in Installer units.

Width:

Width of the rectangular boundary of the control.

Height:

This is the height of the control measured in Installer units.

Attributes:

This is a set of attributes for the control.

Text:

This column contains a localizable string used to set the initial text in the control if the control displays text.

The Checkbox Table:

What is a Checkbox Table?

The Checkbox table lists the values for the check boxes.

[pic]

Property:

This is the name of a property set from a checkbox.

Value:

This is the value that the property is set to when the associated checkbox is checked.

The ComboBox Table:

What is a ComboBox Table?

The ComboBox table lists the text and values for the lists displayed by combo boxes. This table contains these columns:

[pic]

Property:

This is the name of a property set from a combo box.

Order:

A positive integer used to determine the ordering of the items that appear in a single combo box list.

Value:

This is the value that the property is set to when this item is selected from the combo box.

Text:

This is the text to display in the combo box. If this column contains a null, then the Value is used as the display text.

The ListBox Table

What is a ListBox Table?

The lines of a list box are not treated as individual controls, but they are part of a list box that functions as a control. The ListBox table defines the values for all list boxes. This table includes the following columns:

[pic]

Property:

This is the name of a property set from a list box.

Order:

The items in a list box are ordered according to the values in this column. All items with the same value in the Property column are shown in the same list box.

Value:

The value string associated with this item. This is the value that the property is set to when this item

is selected from the list box.

Text:

This is the text to display in the list box.

The ListView Table:

What is a ListView Table?

The ListView table lists the text and values for the lists displayed by listview controls. This table contains these columns:

[pic]

Property:

This is the name of a property set from a listview.

Order:

The items in a listview are ordered according to the values in this column. All items with the same value in the Property column are shown in the same listview.

Value:

The value string associated with this item. Selecting the line sets the associated property to this value.

Text:

This is the text to display in the listview. If this column contains a null, then the Value is used as the display text.

Binary_:

This column contains a foreign key to the Binary table. It’s used to specify an icon to display with the item in the listview.

The RadioButton Table:

What is a RadioButton Table?

The RadioButton table contains information for radio buttons displayed in option groups. This table contains these columns:

[pic]

Property:

This column contains the name of a property set from a RadioButton group box.

Order:

This column displays an ordering for the buttons within a group box. All of the buttons with the same Property value are displayed in the same RadioButton group box.

Value:

The value string associated with this button.

X

The horizontal coordinate within the group of the upper-left corner of the bounding rectangle of the radio button.

Y

The vertical coordinate within the group of the upper-left corner of the bounding rectangle of the radio button.

Width

This column signifies the width of the button. This must be a non-negative number.

Height:

This column signifies the height of the button.

Text:

This is the text to display with the Radio button. If the button displays a picture, this column is a foreign key to the Binary table.

Help:

This is an optional string for use as help. It consists of two parts separated by a | character. The first part is used as a tooltip for the control; the second part is used for context-sensitive help. Note that the Installer Service does not yet support context-sensitive help.

System Tables:

The System tables contain the metadata for the Installer database—that is, they are the tables that describe the tables in the database. There are five system tables as described below:

The _Tables Table:

What is a _Tables Table?

The _Tables table lists all of the tables in the Installer database. It has following column:

Name:

This column displays the name of the table.

The _Columns Table

What is a _Columns Table?

The _Columns table describes all of the columns in all of the tables in the Installer database. This table has these columns:

Table:

This column is a foreign key to the _Tables table, and it names the table that contains the column that this row of the Columns table describes.

Number:

This is the order in which the column appears within the table.

Name:

This is the name of the column.

The _Streams Table

What is a _Streams Table?

The _Streams table lists embedded OLE data streams in the Installer database. This table contains these columns:

Name:

This column contains the name of the stream.

Data:

This is the raw binary data for the stream.

The _Storages Table

What is a _Storages Table?

The _Storages table lists embedded OLE data storages in the Installer database. This table contains these columns:

Name:

This column displays the name of the storage.

Data:

This is the raw binary data for the storage.

The _Validation Table

What is a _Validation Table?

The _Validation table contains information on the acceptable range for columns in the Installer database. This table has these columns:

[pic]

Table:

This column contains a foreign key into the _Table table; it identifies the table being validated.

Column:

This is a foreign key into the _Column table; this column identifies the column being validated.

Nullable:

This column identifies whether the target column is nullable. The value may be Y if the column allows nulls, N if it does not allow nulls, or @ if it’s part of a multicolumn key but still allows nulls.

MinValue:

This column shows the minimum permissible value for a date, numeric, or version column.

MaxValue:

This column shows the maximum permissible value for a date, numeric, or version column.

KeyTable:

If this column is non-null, the target column is a foreign key into the table identified here.

KeyColumn:

If this column is non-null, the target column is a foreign key to the column number in the KeyTable identified here.

Category:

This column specifies the data type of the target column.

Set:

If present, this is a semicolon-delimited list of acceptable values for the column.

Description:

This is a description of the data stored in the target column.

Definitions of Primary and Foreign key:

|Key |Meaning |

|Primary_Key |The primary key of a table uniquely identifies each record in the|

| |table. It can either be a normal attribute that is guaranteed to |

| |be unique (such as Social Security Number in a table with no more|

| |than one record per person) |

|Foreign_Key (or) External_ Key |A foreign key is a field in a table that matches the primary key |

| |column of another table. The foreign key can be used to |

| |cross-reference tables. |

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download