构建一个“签名的”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这一变量:
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相同的值。
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