When using your component on a Web
page, there are additional considerations. The .ocx
file and all supporting files must be on the target
machine or downloaded across the Internet. This makes
code size and download time an important consideration.
Downloads can be packaged in a signed .cab file.
Packaging Code for Downloading
The CODEBASE Tag
ActiveX components are embedded
in Web pages using the <OBJECT> tag. The CODEBASE
parameter of the <OBJECT> tag specifies the
location from which to download the component. CODEBASE
can point at a number of different file types successfully.
Using the CODEBASE Tag with an OCX
File
CODEBASE="http://www.mysite.com/mycontrol.ocx#version=3,6,0,0"
This solution downloads only the component's .ocx
file and requires any supporting DLLs to already be
installed on the client machine.
Using the CODEBASE Tag with an INF
File
CODEBASE="http://www.mysite.com/trustme.inf"
An .inf file will control the installation
of an .ocx file and its supporting files. This method
is not recommended because it is not possible to sign
an .inf file (see Signing Code for pointers on code
signing).
Using the CODEBASE Tag with a CAB
File
CODEBASE="http://www.somesite.com/acontrol.cab#version=1,2,0,0"
Cabinet files are the recommended way
to package ActiveX components in a cabinet file allows
an .inf file to be included to component installation
of the ActiveX component and any dependent DLLs. Using
a CAB file automatically compresses the code for quicker
download. If you are using a .cab file for component
download, it is faster to sign the entire .cab file
than each individual component.
Creating CAB Files
The CABinet Development Kit can
be obtained from the Microsoft developers' Web site,
http://www.microsoft.com/workshop/.
In this kit, you will find the necessary tools to
construct cabinet files.
The cabinet file pointed to by CODEBASE
should contain the .ocx file for your ActiveX component
and an .inf file to control its installation. You
create the cabinet file by specifying the name of
your control file and an .inf file. Do not include
dependent DLLs that may already exist on the system
in this cabinet file.
The INF File
The following example, trend.inf,
lists the supporting files and the version information
needed for the VB TREND component. Notice the location
for the VB DLLs is a Microsoft Web site. The *.cab
is provided and signed by Microsoft.
Contents of trend.inf:
[TREND.OCX]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=
FileVersion=3,5,0,0
[ASYCFILT.DLL]
hook=AsycFilt.cab_Installer
FileVersion=2,20,4118,1
[AsycFilt.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb5/AsycFilt.cab
InfFile=AsycFilt.inf
[MSVBVM50.DLL]
hook=MSVBVM50.cab_Installer
FileVersion=5,2,82,44
[MSVBVM50.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb5/MSVBVM50.cab
InfFile=MSVBVM50.inf
[Setup Hooks]
AddToRegHook=AddToRegHook
[AddToRegHook]
InfSection=DefaultInstall
[DefaultInstall]
AddReg=AddToRegistry
[AddToRegistry]
\\ Mark safe for the trend control \\
HKLM,"SOFTWARE\Classes\CLSID\{9687C44A-906A-11D4-987D-DA7EAAB63647}\Implemented
Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}"
HKLM,"SOFTWARE\Classes\CLSID\{9687C44A-906A-11D4-987D-DA7EAAB63647}\Implemented
Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}"
The <OBJECT> Tag
The following example illustrates using the <OBJECT>
tag to package the VB TREND component.
<OBJECT ID="Trend" WIDTH="320"
HEIGHT="86"
CLASSID="CLSID:9687C44A-906A-11D4-987D-DA7EAAB63647"
CODEBASE="Trend.CAB#version=3,5,0,0">
<param name="_ExtentX" value="2646">
<param name="_ExtentY" value="1323">
<param name="GridMode" value="1">
<param name="GridStyle" value="1">
</OBJECT>
In this case, trend.cab will contain two files, TREND.ocx
and trend.inf. The following command will build the
cabinet file:
C:\CabDevKit\cabarc.exe -s 6144 N trend.cab trend.ocx
trend.inf
The -s 6144 parameter reserves space in the cabinet
for code signing.
The Version Tag
Note here that the #Version information
specified with a CAB file applies to the component
specified by the CLASSID parameter of the <OBJECT>
tag.
Depending on the version specified,
you can force download of your component. For complete
specifications of the OBJECT tag including the CODEBASE
parameter, see the W3C reference.
Licensing Issues
If you want to use a licensed component
on a Web page, you must verify that the license agreement
allows its use on the Internet and create a license
package file (LPK) for it.
A licensed ActiveX component will
not load properly in an HTML page if the computer
running Internet Explorer is not licensed to use the
component. For example, if a licensed component was
built using Visual Basic, the HTML page using the
component will load properly on the computer where
the component was built, but it will not load on a
different computer unless licensing information is
included.
To use a licensed ActiveX component
in Internet Explorer, you must check the vendor's
license agreement to verify that the license for the
component permits:
● Redistribution
● Use of
the component on the Internet
● Use of
the Codebase parameter
To use a licensed component in an
HTML page on a non-licensed machine, you must generate
a license package file (LPK). The LPK file contains
run-time licenses for licensed components in the HTML
page. This file is generated via LPKtool.zip
which comes with the ActiveX Software Development
Kit (SDK). You can download the ActiveX SDK through
the Microsoft Web site http://www.microsoft.com/activex.
To create an LPK file
● Run lpktool.exe
on a computer that is licensed to use the component.
● In the License
Package Authoring Tool dialog box, in the Available
Controls list box, select each licensed ActiveX component
that will be used on the HTML page and click Add.
● Click Save
& Exit and type a name for the LPK file. This will
create the LPK file and close the application.
To embed a licensed component on
an HTML page
● Edit
your HTML page. In the HTML page, insert an <OBJECT>
tag for the License Manager object before any other
<OBJECT> tags. The License Manager is an ActiveX
component that is installed with Internet Explorer.
Its class ID is shown below. Set the LPKPath property
of the License Manager object to the path and name of
the LPK file. You can have only one LPK file per HTML
page.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath"
VALUE="relative URL to .LPK file">
<OBJECT>
● Insert the
<OBJECT> tag for your licensed component after
the License Manager tag. For example, an HTML page that
displays the Microsoft Masked Edit component is shown
below. The first class ID is for the License Manager
component, the second class ID is for the Masked Edit
component. Change the tags to point to the relative
path of the .lpk file you created earlier, and add an
object tag including the class ID for your component.
● Insert the
<EMBED> attribute for your LPK file, if using
the NCompass ActiveX plug-in. If your component may
be viewed on other ActiveX enabled browsers - for example
Netscape using the NCompass ActiveX plug-in - you must
add the <EMBED> syntax as shown below.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="maskedit.lpk">
<EMBED
SRC ="maskedit.LPK">
</OBJECT>
</OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC"
WIDTH=100 HEIGHT=25> </OBJECT>
Signing Code
Code signing is designed to identify
the source of code and to guarantee that the code
has not changed since it was signed. Depending on
browser safety settings, users may be warned before
the code is downloaded. Users may choose to trust
certain certificate owners or companies, in which
case, code signed by those trusted will be downloaded
without warning. Code is digitally signed to avoid
tampering.
Make sure your final code is signed so that your component
can be automatically downloaded without displaying
trust warning messages. For details on how to sign
code, check the documentation on Authenticode?in the
ActiveX SDK. For more information on the Microsoft
code-signing initiative, check .
Depending on trust and browser safety
level settings, a certificate may be displayed to
identify the signing person or company. If the safety
level is none, or if the signed component's certificate
owner is trusted, a certificate will not be displayed.
See Safety Levels and Control Behavior for details
on how the browser safety setting will determine whether
your component is downloaded and a certificate displayed.
Digital signing guarantees code
has not changed since it's been signed. A hash of
the code is taken and embedded in the certificate.
This hash is later compared with a hash of the code
taken after the code is downloaded but before it runs.
Companies such as Verisign can supply private and
public keys needed to sign code. The ActiveX SDK ships
with MakeCert, a utility for creating test certificates,
and two registry files, wvtston.reg and wvtstoff.reg,
for specifying whether or not the browser should recognize
test certificates as valid.
Internet Explorer Browser Safety
Levels and Control Behavior
A browser has options for safety
level, configurable by the user. Because Web pages
can contain active content that might potentially
harm a user's computer, browsers allow the user to
select options for safety level. Depending on the
way a browser implements safety levels, a component
may not be downloaded at all, or will display a certificate
or a warning message to allow the user to choose at
run time whether or not to download the component.
The behavior of ActiveX components under high, medium,
and low safety levels on Internet Explorer is listed
below.
High Safety Mode
● Unsigned
components will not be downloaded.
● Signed
components will display a certificate if untrusted
(a user can choose an option to always trust code
from this certificate owner from now on).
● Only components
marked as safe will have persistent data and/or be
scriptable.
Medium Safety Mode
● Unsigned
components will display a warning before downloading.
● Signed
components will display a certificate if untrusted.
● Components
not marked as safe will display a warning.
Low Safety Mode
● Components
are downloaded without warning.
● Scripting
and persistence occur without warning.