MsiEmbeddedChainer Table

Use this table to author a multiple-package installation. Each row in the MsiEmbeddedChainer table references a different user-defined function that can be used to install multiple Windows Installer packages from a single package. The executable files for the user-defined functions are stored inside the Windows Installer package.

Windows Installer 4.0 or earlier: Not supported. This table is available beginning with Windows Installer 4.5.

Windows Server 2008 R2 with the Remote Desktop Services role enabled: Not supported. A multiple package installation using the MsiEmbeddedChainer table fails if the Remote Desktop Services role is enabled.

To install multiple packages from a single package, one of the user-defined functions listed in the MsiEmbeddedChainer table must have a conditional statment in the Condition field that evaluates to run the action. If more than one function has a condition that evaluates to run, only one function can run. This case is an error, and it cannot be guaranteed which function will run. If other custom actions are needed by the installation, these should be authored into the CustomAction table and sequence tables.

The functions must join the current installation by calling the MsiJoinTransaction function and must call the MsiEndTransaction function to commit the installation of multiple packages. If the functions return before calling MsiEndTransaction, the installer rolls back all installations.

The MsiEmbeddedChainer table has the following columns.

Column Type Key Nullable
MsiEmbeddedChainer Identifier Y N
Condition Condition N Y
CommandLine Formatted N Y
Source CustomSource N N
Type Integer N N




The primary key for the table. This value is a unique identifier for the user-defined function described by this row.


A conditional statement for running the user-defined function. You can enable or disable the functions listed in the MsiEmbeddedChainer table using a transform that modifies property values evaluated by this field. For more information, see Using Properties in Conditional Statements.


The value in this field is a part of the command line string passed to the executable file identified in the Source column. The installer appends the value in this field to the transaction handle to generate the command line. If the value in this column is null, the command line consists of only the transaction handle.


The location of the executable file for the user-defined function. If the value in the Type column is 2, this column can contain an external key into the Binary table. If the value in the Type column is 18, this column can contain an external key into the File table. If the value in the Type column is 50, this column can contain an external key into the Property table.


The functions listed in the MsiEmbeddedChainer table are described using the following custom action numeric types. This column can contain the values for the following three numeric types only; any other combination of custom action flags is ignored.

Custom action type Custom action flags Hexadecimal Decimal
Custom Action Type 2 msidbCustomActionTypeExe + msidbCustomActionTypeBinaryData 0x002 2
Custom Action Type 18 msidbCustomActionTypeExe + msidbCustomActionTypeSourceFile 0x012 18
Custom Action Type 50 msidbCustomActionTypeExe + msidbCustomActionTypeProperty 0x032 50



The Windows Installer does not prevent the user-defined functions in this table from running during the advertisement of the application. You can use a conditional statement in the Condition column to prevent a function from being run during advertisement.

The Windows Installer also provides a non-embedded external UI handler to build a rich user interface on top of the Windows Installer package. For more information about using an external UI handler with the Windows Installer, see Monitoring an Installation Using MsiSetExternalUI.

The MsiPackageCertificate Table lists digital signature certificates used to verify the identity of the installation packages that make a multiple-package installation. You can use this table to reduce the number of times your multiple-package installation displays a User Account Control (UAC) prompt that requires a response by an administrator.