WiX Database XML Schema

Element: Class

Description

COM Class registration for parent Component.

Derived By

Restricting anyType

Attributes

Name  Type  Required?  Default  Description 
Id  Guid  Yes    The Class identifier (CLSID) of a COM server.
Context  anySimpleType (list)  Yes    The server context(s) for this server.
Description  string  No    Localized description associated with the Class ID and Program ID.
AppId  Guid  No    This attribute is only allowed when a Class is advertised.
Icon  string  No    The file providing the icon associated with this CLSID.
IconIndex  integer  No    Icon index into the icon file.
Handler  string  No    The default inproc handler.
Argument  string  No    This column is optional only when the Context column is set to "LocalServer" or "LocalServer32" server context.
RelativePath  YesNoType  No    When the value is "yes", the bare file name can be used for COM servers.
Advertise  YesNoType  No    Set this value to "yes" in order to create a normal Class table row. Set this value to "no" in order to generate Registry rows that perform similar registration (without the often problematic Windows Installer advertising behavior).
ThreadingModel  NMTOKEN (restriction)  No    Threading model for the CLSID.
Version  string  No    Version for the CLSID.
Insertable  YesNoType  No    Specifies the CLISD may be insertable.
Programmable  YesNoType  No    Specifies the CLSID may be programmable.
Server  string  No    May only be specified if the value of the Advertise attribute is "no".
ShortPath  YesNoType  No    Specifies whether or not to use the short path for the COM server.
SafeForScripting  YesNoType  No    May only be specified if the value of the Advertise attribute is "no".
SafeForInitializing  YesNoType  No    May only be specified if the value of the Advertise attribute is "no".
Control  YesNoType  No    Set this attribute's value to 'yes' to identify an object as an ActiveX Control.

Content Model

Contains elements as defined in the following table.

Component  Type  Occurs  Description 
    0..*   
FileTypeMask  anyType (restriction)  1..1  FileType data for class Id registration.
Interface  anyType (restriction)  1..1  COM Interface registration for parent Typelib.
ProgId  anyType (restriction)  1..1  ProgId registration for parent Component.

Referenced By

Definition

<xs:element name="Class">
<xs:annotation>
<xs:documentation>COM Class registration for parent Component.</xs:documentation>
<xs:appinfo>
<xse:seeAlso ref="AppId" xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension" />
<xse:msiRef table="Class" href="http://msdn.microsoft.com/library/aa367861.aspx" xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension" />
<xse:msiRef table="ProgId" href="http://msdn.microsoft.com/library/aa370879.aspx" xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension" />
<xse:msiRef table="Registry" href="http://msdn.microsoft.com/library/aa371168.aspx" xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension" />
<xse:msiRef table="AppId" href="http://msdn.microsoft.com/library/aa367566.aspx" xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension" />
<xse:remarks xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension">
When being used in unadvertised mode, the attributes in the Class element correspond to registry keys
as follows (values that can be specified in authoring are in bold):
<html:dl xmlns:html="http://www.w3.org/1999/xhtml"><html:dt>Id/Context/Server</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}\<html:b>Context1</html:b>]<html:br />
@="[!<html:b>Server</html:b>]"<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\<html:b>Context2</html:b>]<html:br />
@="[!<html:b>Server</html:b>]"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\<html:b>LocalServer</html:b>]<html:br />
@="[!<html:b>comserv.dll</html:b>]"<html:br />
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\<html:b>LocalServer32</html:b>]<html:br />
@="[!<html:b>comserv.dll</html:b>]"
</html:dd></html:dl></html:dd><html:dt>AppId</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}]<html:br />
AppId="{<html:b>AppId</html:b>}"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}]<html:br />
AppId="{<html:b>00000000-89AB-0000-0123-000000000000</html:b>}"
</html:dd></html:dl></html:dd><html:dt>Argument</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}\<html:b>Context</html:b>]<html:br />
@="[!<html:b>Server</html:b>] <html:b>Argument</html:b>"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\<html:b>LocalServer32</html:b>]<html:br />
@="[!<html:b>comserv.dll</html:b>] <html:b>/arg1 /arg2 /arg3</html:b>"<html:br /></html:dd></html:dl></html:dd><html:dt>Control</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "yes" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\Control]
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Control]
</html:dd></html:dl></html:dd><html:dt>Description</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}]<html:br />
@="<html:b>Description</html:b>"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}]<html:br />
@="<html:b>Description of Example COM Component</html:b>"
</html:dd></html:dl></html:dd><html:dt>Handler</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "1" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\InprocHandler]<html:br />
@="ole.dll"<html:br />
Value "2" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\InprocHandler32]<html:br />
@="ole32.dll"<html:br />
Value "3" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\InprocHandler]<html:br />
@="ole.dll"<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\InprocHandler32]<html:br />
@="ole32.dll"<html:br />
Other value specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\InprocHandler32]<html:br />
@="<html:b>Handler</html:b>"
</html:dd><html:dt>Specific Example (for other value)</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\InprocHandler32]<html:br />
@="<html:b>handler.dll</html:b>"
</html:dd></html:dl></html:dd><html:dt>Icon/IconIndex</html:dt><html:dd>This is not currently handled properly.</html:dd><html:dt>Insertable</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "no" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\NotInsertable]<html:br />
Value "yes" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\Insertable]
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Insertable]
</html:dd></html:dl></html:dd><html:dt>Programmable</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "yes" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\Programmable]
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Programmable]
</html:dd></html:dl></html:dd><html:dt>RelativePath</html:dt><html:dd>Unsupported. Please contribute this back to WiX if you know.</html:dd><html:dt>SafeForInitializing</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "yes" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
</html:dd></html:dl></html:dd><html:dt>SafeForScripting</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
Value "yes" specified:<html:br />
[HKCR\CLSID\{<html:b>Id</html:b>}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
</html:dd></html:dl></html:dd><html:dt>ThreadingModel</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}\<html:b>Context</html:b>]<html:br />
ThreadingModel="<html:b>ThreadingModel</html:b>"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\<html:b>LocalServer32</html:b>]<html:br />
ThreadingModel="<html:b>Apartment</html:b>"
</html:dd></html:dl></html:dd><html:dt>TypeLibId (from parent TypeLib/@Id)</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}\TypeLib]<html:br />
@="{<html:b>TypeLibId</html:b>}"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\TypeLib]<html:br />
@="{<html:b>11111111-89AB-1111-0123-111111111111</html:b>}"
</html:dd></html:dl></html:dd><html:dt>Version</html:dt><html:dd><html:dl><html:dt>In General</html:dt><html:dd>
[HKCR\CLSID\{<html:b>Id</html:b>}\Version]<html:br />
@="<html:b>Version</html:b>"
</html:dd><html:dt>Specific Example</html:dt><html:dd>
[HKCR\CLSID\{<html:b>01234567-89AB-CDEF-0123-456789ABCDEF</html:b>}\Version]<html:br />
@="<html:b>1.0.0.0</html:b>"
</html:dd></html:dl></html:dd></html:dl></xse:remarks>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ProgId">
<xs:annotation>
<xs:documentation>A ProgId associated with Class must be a child element of the Class element</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="FileTypeMask" />
<xs:element ref="Interface">
<xs:annotation>
<xs:documentation>These Interfaces will be registered with the parent Class and TypeLib (if present).</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
<xs:attribute name="Id" type="Guid" use="required">
<xs:annotation>
<xs:documentation>The Class identifier (CLSID) of a COM server.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Context" use="required">
<xs:annotation>
<xs:documentation>The server context(s) for this server.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="LocalServer">
<xs:annotation>
<xs:documentation>
A 16-bit local server application.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="LocalServer32">
<xs:annotation>
<xs:documentation>
A 32-bit local server application.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="InprocServer">
<xs:annotation>
<xs:documentation>
A 16-bit in-process server DLL.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="InprocServer32">
<xs:annotation>
<xs:documentation>
A 32-bit in-process server DLL.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Description" type="xs:string">
<xs:annotation>
<xs:documentation>Localized description associated with the Class ID and Program ID.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="AppId" type="Guid">
<xs:annotation>
<xs:documentation>
This attribute is only allowed when a Class is advertised. Using this attribute will reference an Application ID
containing DCOM information for the associated application GUID. The value must correspond to an AppId/@Id of an
AppId element nested under a Fragment, Module, or Product element. To associate an AppId with a non-advertised
class, nest the class within a parent AppId element.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Icon" type="xs:string">
<xs:annotation>
<xs:documentation>
The file providing the icon associated with this CLSID. Reference to an Icon element
(should match the Id attribute of an Icon element). This is currently not supported if the
value of the Advertise attribute is "no".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IconIndex" type="xs:integer">
<xs:annotation>
<xs:documentation>Icon index into the icon file.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Handler" type="xs:string">
<xs:annotation>
<xs:documentation>
The default inproc handler. May be optionally provided only for Context = LocalServer or
LocalServer32. Value of "1" creates a 16-bit InprocHandler (appearing as the InprocHandler
value). Value of "2" creates a 32-bit InprocHandler (appearing as the InprocHandler32 value).
Value of "3" creates 16-bit as well as 32-bit InprocHandlers. A non-numeric value is treated
as a system file that serves as the 32-bit InprocHandler (appearing as the InprocHandler32 value).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Argument" type="xs:string">
<xs:annotation>
<xs:documentation>
This column is optional only when the Context column is set to "LocalServer"
or "LocalServer32" server context. The text is registered as the argument against
the OLE server and is used by OLE for invoking the server. Note that the resolution
of properties in the Argument field is limited. A property formatted as [Property] in
this field can only be resolved if the property already has the intended value when
the component owning the class is installed. For example, for the argument "[#MyDoc.doc]"
to resolve to the correct value, the same process must be installing the file MyDoc.doc and the
component that owns the class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RelativePath" type="YesNoType">
<xs:annotation>
<xs:documentation>
When the value is "yes", the bare file name can be used for COM servers. The installer
registers the file name only instead of the complete path. This enables the server in
the current directory to take precedence and allows multiple copies of the same component.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Advertise" type="YesNoType">
<xs:annotation>
<xs:documentation>
Set this value to "yes" in order to create a normal Class table row. Set this value to
"no" in order to generate Registry rows that perform similar registration (without the
often problematic Windows Installer advertising behavior).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<!-- Following attributes are not advertised, but add the appropriate rows to the Registry table -->
<xs:attribute name="ThreadingModel">
<xs:annotation>
<xs:documentation>
Threading model for the CLSID.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="apartment" />
<xs:enumeration value="free" />
<xs:enumeration value="both" />
<xs:enumeration value="neutral" />
<xs:enumeration value="single" />
<xs:enumeration value="rental" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Version" type="xs:string">
<xs:annotation>
<xs:documentation>
Version for the CLSID.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Insertable" type="YesNoType">
<xs:annotation>
<xs:documentation>
Specifies the CLISD may be insertable.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Programmable" type="YesNoType">
<xs:annotation>
<xs:documentation>
Specifies the CLSID may be programmable.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Server" type="xs:string">
<xs:annotation>
<xs:documentation>
May only be specified if the value of the Advertise attribute is "no". File Id of the
COM server file. If this element is nested under a File element, this value defaults to
the value of the parent File/@Id.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ShortPath" type="YesNoType">
<xs:annotation>
<xs:documentation>
Specifies whether or not to use the short path for the COM server. This can only apply when Adverstise is set to 'no'. The default is 'no' meaning that it will use the long file name for the COM server.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SafeForScripting" type="YesNoType">
<xs:annotation>
<xs:documentation>
May only be specified if the value of the Advertise attribute is "no".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SafeForInitializing" type="YesNoType">
<xs:annotation>
<xs:documentation>
May only be specified if the value of the Advertise attribute is "no".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Control" type="YesNoType">
<xs:annotation>
<xs:documentation>
Set this attribute's value to 'yes' to identify an object as an ActiveX Control. The default value is 'no'.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>