技术开发 频道

步步学ACTIVEX网页控件开发

  为ActiveX控件创建网页

  光完成了ActiveX控件还不行,因为ActiveX控件无法单独运行,所以我们还需要为ActiveX控件创建相应的测试页面。如果想为我们的ActiveX控件创建一个默认的测试页面,非常好的的工具就是Microsoft ActiveX Control Pad。这是一个免费的工具,我们可以从微软的网站上下载得到。

  我们需要下载ActiveX Control Pad并将它安装在我们的开发机器上。同时为了简化测试工作,我们还需要在同一台机器上安装微软的IIS服务器作为Web服务器。

  当我们第一次运行ActiveX Control Pad的时候,它将创建一个默认的HTML页面。接下来,我们需要将ActiveX控件插入到这个页面中。在<BODY>标签内的某个位置右键单击,选择“Insert ActiveX Control”,在弹出的“Insert ActiveX Control”对话框中,选中我们刚刚创建的ActiveX控件MyActiveX,然后点击“OK”关闭对话框,将ActiveX控件插入到页面中。

 


图5 插入ActiveX控件

  ActiveX Control Pad提供了两个对话框,供我们对ActiveX控件的各个属性进行修改编辑。属性对话框用于修改ActiveX控件的各项属性。而“编辑ActiveX控件(Edit ActiveX Control)”对话框用于手动地对ActiveX控件进行修改。当然,我们也可以不使用对话框,直接编辑HTML代码达到相同的效果。在代码中找到OBJECT ID标签,如下图6所示,修改它的尺寸参数为“WIDTH=350”和“HEIGHT=50”。完成代码的修改后,将这个文件保存为myactivex.htm,放置到IIS服务器的网站根目录wwwroot下。

 


图6 在ActiveX Control Pad中编辑页面

  现在,我们就可以使用IE打开http://localhost/myactivex.htm对ActiveX控件进行测试了。在ActiveX控件加载的过程中,如果你得到一些警告消息,点击“OK”略过就可以了。正常情况下,你将看到页面中显示的一个进度条GIF动画。如果你没有看到动画,或者是仅仅在ActiveX控件的位置显示一个红色的叉叉,这可能是你的浏览器的安全设置,阻止了ActiveX控件的加载和运行。要解决这个问题,请修改你的浏览器的安全设置,使其所有关于ActiveX的选项都在“允许(enabled)”状态。


图7 浏览器中的MyActiveX控件

  接下来,我们将让我们的控件成为一个“签名的”或者是“安全的”控件,以此来解决在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

  要对我们刚刚创建的CAB文件进行签名,我们需要Microsoft MSDN为我们提供的工具signcode.exe 。(请查阅本文末尾与“Signing and Checking with Authenticode”相关的参考资料) 。通过这个工具,我们就可以用我们从认证机构获得的代码签名证书对CAB文件进行签名了。下面是一个使用signcode对myactivex.cab进行签名的例子:

signcode -n "myactivex" -i
http://www.myactivex.com -spc mycert.spc -v mykey.pvk -t http://timestamp.verisign.com/scripts/timstamp.dll myactivex.cab

  在上面的例子中,http://www.myactivex.com应该被替换成你的ActiveX控件的说明页面,通过这个页面,你可以为用户提供更多的关于这个控件的信息。

  要使用签名过后的CAB文件,首先我们需要将myactivex.cab复制到web服务器的一个合适的目录下,然后我们修改Web页面中的OBJECT ID标签,添加一个参数CODEBASE指向CAB文件。具体代码如下图8所示。这样,当你再使用IE打开这个页面时,CAB文件会被下载,然后ActiveX控件会被正确的安装到你的机器上。在安装的过程中,再也不会弹出提示未签名ActiveX控件的警告信息了。


图8 添加CODEBASE参数
0
相关文章