COM+ Setup Custom Actions Database Schema

Version 0.2

Copyright Notice

Copyright (c) 2004 Fredrik Gröhn.  All rights reserved.

Table of Contents

1. Tables

1.1 CPPartition

1.2 CPPartitionProperty

1.3 CPUserInPartitionRole

1.4 CPApplication

1.5 CPApplicationProperty

1.6 CPApplicationRole

1.7 CPUserInApplicationRole

1.8 CPAssembly

1.9 CPAssemblyDependency

1.10 CPComponent

1.11 CPComponentProperty

1.12 CPRoleForComponent

1.13 CPInterface

1.14 CPInterfaceProperty

1.15 CPRoleForInterface

1.16 CPMethod

1.17 CPMethodProperty

1.18 CPRoleForMethod

1.19 CPSubscription

1.20 CPSubscriptionProperty

1. Tables

1.1 CPPartition

Partition

String[72]

NOT NULL

PK

Identifies the partition record.

Component_

String[72]

NULL

FK

Foreign key into the Component table. If this value is NULL the record is considered to be referencing an existing partition.

ID

String[72]

NULL

 

The id of the COM+ partition. This value can be NULL, in which case a value must be provided in the Name field.

Name

String[255]

NULL

 

Name of the COM+ partition. This value can be NULL, in which case a value must be provided in the ID field. If record is used to reference an existing partition by setting the Component_ field to NULL, and both the ID and the Name field are not NULL, the ID field takes precedence when searching for an existing partition.

 

Represents a COM+ partition to be installed or modified.

 

If the Component_ field is not NULL this record represents a COM+ partition that will be installed or uninstalled in association with the referenced component. If the Component_ field is NULL the record is used to reference an existing partition.

1.2 CPPartitionProperty

Partition_

String[72]

NOT NULL

PK,FK

Foreign key into the CPPartition table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for a COM+ partition.

 

If a property is missing a corresponding record in this table, it will be assigned a default value by the COM+ Admin Catalog.

 

  The following property names can be specified:

1.3 CPUserInPartitionRole

Partition_

String[72]

NOT NULL

PK,FK

Foreign key into the CPPartition table.

RoleName

String[255]

NOT NULL

 

Name of the partition role.

UserName

String[255]

NOT NULL

 

Name of the user. If this field expands to a zero length string the record is ignored.

 

Represents a user to be added to a partition role.

 

If the UserName field contains the sequence tilde [~], the record is treated as a list of users/security groups. For example, to specify both the Administrator user and the Administrators group in the same record use “Administrator[~]Administrators”.

 

Partition roles can not be created. It is only possible to assign users to existing partition roles.

1.4 CPApplication

Application

String[72]

NOT NULL

PK

Identifies the application record.

Component_

String[72]

NULL

FK

Foreign key into the Component table. If this value is NULL the record is considered to be referencing an existing application.

Partition_

String[72]

NULL

FK

Foreign key into the CPPartiton table. If this value is not NULL the application will reside in the referenced partition.

ID

String[72]

NULL

 

The id of the COM+ application. This value can be NULL, in which case a value must be provided in the Name field.

Name

String[255]

NULL

 

Name of the COM+ application. This value can be NULL, in which case a value must be provided in the ID field. If record is used to reference an existing application by setting the Component_ field to NULL, and both the ID and the Name field are not NULL, the ID field takes precedence when searching for an existing application.

 

Represents a COM+ application to be installed or modified.

 

If the Component_ field is not NULL this record represents a COM+ application that will be installed or uninstalled in association with the referenced component. If the Component_ field is NULL the record is used to reference an existing application.

1.5 CPApplicationProperty

Application_

String[72]

NOT NULL

PK,FK

Foreign key into the CPApplication table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for a COM+ partition.

 

If a property is missing a corresponding record in this table, it will be assigned a default value by the COM+ Admin Catalog.

 

When installing on a system that supports only COM+ 1.0, all COM+ 1.5 properties are ignored.

 

The following property names can be specified:

1.6 CPApplicationRole

Application_

String[72]

NOT NULL

PK,FK

Foreign key into the CPApplication table.

Component_

String[72]

NULL

FK

Foreign key into the Component table.

Name

String[255]

NOT NULL

PK

Name of the role.

Description

String[255]

NULL

 

Description for the role.

 

Represents a role associated with a COM+ application.

 

If the Component_ field is not null, this role is installed in conjunction with the referenced component. Other ways, it will be installed in conjunction with the application referenced by the Application_ field.

 

A role can be added to an existing application by referencing a record in the CPApplication table with its Component_ field set to null, in this case the Component_ field of this record must not be null.

1.7 CPUserInApplicationRole

Application_

String[72]

NOT NULL

PK,FK

Foreign key into the CPApplication table.

RoleName

String[255]

NOT NULL

 

Name of the application role.

UserName

String[255]

NOT NULL

 

Name of the user. If this field expands to a zero length string the record is ignored.

 

Represents a user to be added to an application role.

 

If the UserName field contains the sequence tilde [~], the record is treated as a list of users/security groups. For example, to specify both the Administrator user and the Administrators group in the same record use “Administrator[~]Administrators”.

1.8 CPAssembly

Assembly

String[72]

NOT NULL

PK

Identifies the assembly record.

Component_

String[72]

NOT NULL

FK

Foreign key into the Component table. The assembly will be installed in association with this component.

Application_

String[72]

NOT NULL

FK

Foreign key into the CPApplication table. If The application referenced by this field is installed as part of this application, it must always be installed when the assembly is installed. If the assembly references a component that is installed and the application references a component that is not installed, the assembly will fail to install.

TlbPath

String[255]

NULL

 

Path to an external type library file.

PSDllPath

String[255]

NULL

 

Path to a proxy-stub DLL file.

Attributes

Short

NOT NULL

 

If bit 0 is set the assembly is installed as an event class assembly, otherwise it is installed as a normal assembly. If bit 1 is set this is a .NET assembly, if cleared it’s a Win32 assembly/DLL.

 

Represents a DLL containing components to be installed in a referenced COM+ application.

 

The KeyPath of the component referenced by the Component_ field must be the DLL file to install.

 

TODO: Is it possible to determine which components to remove during uninstall using the DLL property of the Components Collection in the COM+ Admin Catalog?

1.9 CPAssemblyDependency

Assembly_

String[72]

NOT NULL

PK,FK

Source assembly for the dependency.

RequiredAssembly_

String[72]

NOT NULL

PK,FK

Target assembly for the dependency.

 

Represents a dependency between two libraries where the field RequiredAssembly_ references the assembly depended on by the assembly references by the field Assembly_.

 

For example, if assembly A contains an interface used by assembly B, assembly A must be installed before assembly B. This restriction is imposed by the COM+ Admin Catalog.

 

It is only necessary to explicitly specify dependencies between assemblies contained in the same package. Assemblies merged in to a package from a merge module will always be installed before any assemblies specified in the base package. Assemblies merged in from different merge modules are sequenced using the ModuleDependency MSI table. It is not possible to have cross dependencies between merge modules or have an assembly in a merge module depend on an assembly in the base package.

1.10 CPComponent

CPComponent

String[72]

NOT NULL

PK

Identifies the component record.

Assembly_

String[72]

NOT NULL

FK

Foreign key into the CP Assembly table. The assembly referenced should contain a component with the CLSID equal to the CLSID field of this record.

CLSID

String[38]

NOT NULL

 

CLSID of the component.

 

Represents a COM+ component to be configured during installation.

 

To modify properties for a component during a maintenance installation, the MSI component associated with the assembly referenced by the Assembly _ field should be reinstalled.

1.11 CPComponentProperty

CPComponent_

String[72]

NOT NULL

PK,FK

Foreign key into the CPComponent table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for a COM+ component.

 

If a property is missing a corresponding record in this table, it will be assigned a default value by the COM+ Admin Catalog.

 

When installing on a system that supports only COM+ 1.0, all COM+ 1.5 properties are ignored.

 

The following property names can be specified:

1.12 CPRoleForComponent

CPComponent_

String[72]

NOT NULL

PK,FK

Foreign key into the CPComponent table.

Name

String[255]

NOT NULL

PK

Name of the role. If this formatted field expands to a blank string, the record is ignored.

 

Represents a role for a component.

1.13 CPInterface

Interface

String[72]

NOT NULL

PK

Identifies the interface record.

CPComponent_

String[72]

NOT NULL

FK

Foreign key into the CPComponent table.

IID

String[38]

NOT NULL

 

IID of the interface.

 

Represents an interface implemented by a component.

 

It's not necessary to add a record to this table unless you need to modify properties or add roles to the interface or its methods.

1.14 CPInterfaceProperty

Interface_

String[72]

NOT NULL

PK,FK

Foreign key into the CPInterface table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for an interface.

 

The following property names can be specified:

1.15 CPRoleForInterface

Interface_

String[72]

NOT NULL

PK,FK

Foreign key into the CPInterface table.

Name

String[255]

NOT NULL

PK

Name of the role.

 

Represents a role for an interface.

1.16 CPMethod

Method

String[72]

NOT NULL

PK

Identifies the method record.

Interface_

String[72]

NOT NULL

FK

Foreign key into the CPInterface table.

Index

Long

NULL

 

Dispatch identifier of the method, used to identify the method during installation. This value can be NULL, in which case a value must be provided in the Name field.

Name

String[255]

NULL

 

Name of the method, used to identify the method during installation. This value can be NULL, in which case a value must be provided in the Index field.

 

Represents a method of an interface.

 

A value in either the Index field or the Name field is needed to identify the method during installation. If a value is provided for both the Index and the Name field, the Index field will be used.

1.17 CPMethodProperty

Method_

String[72]

NOT NULL

PK,FK

Foreign key into the CPMethod table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for a method.

 

The following property names can be specified:

1.18 CPRoleForMethod

Method_

String[72]

NOT NULL

PK,FK

Foreign key into the CPMethod table.

Name

String[255]

NOT NULL

PK

Name of the role.

 

Represents a role for a method.

1.19 CPSubscription

CPComponent_

String[72]

NOT NULL

PK,FK

Foreign key into the CPComponent table. This component is the event subscriber.

EventCLSID

String[38]

NULL

 

CLSID of the event class.

PublisherID

String[38]

NULL

 

ID of the event publisher.

 

Represents an event subscription for a COM+ component.

 

A value is needed in either the EventCLSID field or the PublisherID field. It is an error to specify both.

 

TODO: Should it be possible to add a subscription to a component not installed by the same installation?

1.20 CPSubscriptionProperty

Subscription_

String[72]

NOT NULL

PK,FK

Foreign key into the CPSubscription table.

Name

String[72]

NOT NULL

PK

Name of the property.

Value

String[0]

NOT NULL

 

Value for the property. If this field expands to a zero length string the record is ignored.

 

Represents a property for a subscription.

 

The following property names can be specified: