技术开发 频道

步步学ACTIVEX网页控件开发:为控件创建网页

  构建一个“签名的”ActiveX控件。要想创建一个“签名的”ActiveX控件,你必须从一些认证机构,例如Thawte,Verisign和GeoTrust,获得代码签名证书(Code Signing Certificate)。通过这项服务,他们将对你进行认证同时为你提供用于对ActiveX控件进行签名的证书文件。这些用于应用程序签名的证书文件包括mycert.spc和mykey.pvk.两个文件。

  为了对ActiveX应用程序进行签名,我们需要将这个程序的所有组件打包成CAB文件。这个CAB文件将被从网站上下载到目标机器上,然后ActiveX控件会通过下载的CAB文件被安装到目标机器上。要启用这项功能,我们必须在ActiveX控件的版本信息VERSIONINFO结构体中定义OLESelfRegister变量。在VS 2003及其之前的Visual Studio之中,这一变量是被自动添加的。但是在Visual Studio 2005中,默认情况下VERSIONINFO结构体中并不包含这一变量,我们需要按照下面的示例手动添加OLESelfRegister这一变量:

VS_VERSION_INFO VERSIONINFO
FILEVERSION
1,0,0,1
PRODUCTVERSION
1,0,0,1
FILEFLAGSMASK
0x3fL
#ifdef _DEBUG
FILEFLAGS
0x1L
#else
FILEFLAGS
0x0L
#endif
FILEOS
0x4L
FILETYPE
0x2L
FILESUBTYPE
0x0L
BEGIN
    BLOCK
"StringFileInfo"
    BEGIN
        BLOCK
"040904e4"
        BEGIN
            VALUE
"CompanyName", "TODO: <Company name>"
            VALUE
"FileDescription", "TODO: <File description>"
            VALUE
"FileVersion", "1.0.0.1"
            VALUE
"InternalName", "MyActiveX.ocx"
            VALUE
"LegalCopyright",
                  
"TODO: (c) <Company name>. All rights reserved."
            VALUE
"OLESelfRegister", "\0"
            VALUE
"OriginalFilename", "MyActiveX.ocx"
            VALUE
"ProductName", "TODO: <Product name>"
            VALUE
"ProductVersion", "1.0.0.1"
        END
    END
    BLOCK
"VarFileInfo"
    BEGIN
        VALUE
"Translation", 0x409, 1252
    END
END

  在签名ActiveX控件之前,ActiveX控件应该被打包成CAB文件。这个CAB文件同样还包含一个INF文件,它将用于安装你的ActiveX控件。要创建CAB文件,你需要Microsoft Cabinet Software Development Kit中的cabarc.exe。下面的INF文件演示了如何将我们的MyActiveX控件打包到CAB文件中。对于其中的CLSID,你需要将其修改为跟之前我们使用ActiveX Control Pad创建的HTML页面中OBJECT ID相同的值。

[Add.Code]
myactivex.ocx
=myactivex.ocx
myactivex.inf
=myactivex.inf
[myactivex.ocx]
file
=thiscab
clsid
={36299202-09EF-4ABF-ADB9-47C599DBE778}
RegisterServer
=yes
FileVersion
=1,0,0,0
[myactivex.inf]
file
=thiscab

  我们可以通过下面的DOS命令创建CAB文件。这里需要注意的是:OCX文件和INF文件必须跟你所执行的cabarc.exe在同一个目录,否则CAB文件在被下载后将无法正确的解压缩。这也是一个导致ActiveX控件被显示为红色叉叉的重要原因。
cabarc -s 6144 N myactivex.cab myactivex.ocx myactivex.inf

0
相关文章