升级现有的 ActiveX 控件

现有的 Activex 控件 (原来为 OLE 控件) 在 Internet 无需修改,即可。但是,您可能需要修改控件以改善其性能。在使用您在网页上控件,还有其他注意事项。必须在目标计算机或通过 Internet 下载 .ocx 文件以及任何支持的文件。这使得代码大小并下载时的一个重要注意事项。downloads 在已签名的 .cab 文件可以打包。您还可以将您的控件相同的安全性脚本,并将初始化的安全性。

本文讨论以下主题:

  • 下载的封装代码

  • 标记脚本和初始化的控件安全

  • 许可证释放

  • 签名代码

  • 管理调色板

  • Internet Explorer web 浏览器安全级别和控件行为

还可以添加优化,如 Activex 控件:优化所述。标记可用于下载属性和用 blob 异步,如 在 Internet 上 Activex 控件所述。

下载的封装代码

有关该主题的更多信息,请参见知识库文章“打包的 MFC 控件用于对 Internet”(Q167158)。知识库文章位于 MSDN Library CD-ROM 中或 https://support.microsoft.com/default.aspx?ln=zh-cn 上。

941zhks9.collapse_all(zh-cn,VS.110).gifCODEBASE 标记

使用 <OBJECT> 标记,Activex 控件在网页中。<OBJECT> 标记的 CODEBASE 参数指定下载控件的位置。CODEBASE 能成功将在许多不同的文件类型。

941zhks9.collapse_all(zh-cn,VS.110).gif使用 OCX 文件的 CODEBASE 标记

CODEBASE="http://example.microsoft.com/mycontrol.ocx#version=4,70,0,1086"

此解决方案在客户端下载仅控件的 .ocx 文件,并要求所有支持的 DLL 已安装。因为 Internet Explorer Visual C++ 附带的控件,支持的 DLL 对于使用 Visual C++ 生成的 Internet Explorer 和 MFC Activex 控件仍有效。如果是控件能够的 ActiveX 的另一 internet 浏览器用于查看此控件,此解决方案不起作用。

941zhks9.collapse_all(zh-cn,VS.110).gif使用 INF 文件的 CODEBASE 标记

CODEBASE="http://example.microsoft.com/trustme.inf"

.inf 文件将控制 .ocx 及其支持文件的安装。不建议使用此方法,因为无法的签名 .inf 文件 (用于在代码签名的指针参见 签名代码 )。

941zhks9.collapse_all(zh-cn,VS.110).gif使用 CAB 文件的 CODEBASE 标记

CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"

内阁文件是推荐的使用方式对程序包使用 MFC 的 Activex 控件。封装在压缩文件的 MFC Activex 控件允许 .inf 文件包括控件 Activex 控件和所有依赖 DLL 的安装路径 (例如 MFC DLL)。使用 CAB 文件自动压缩更好的代码下载。如果为元素使用 .cab 文件与每个单独组件的下载,它是快速对整个 .cab 文件。

941zhks9.collapse_all(zh-cn,VS.110).gif创建 CAB 文件

您可以从知识库文章的 310618:Microsoft 内阁软件开发工具包内阁开发工具包。此工具中您会发现需要构造的工具压缩文件。

压缩文件指向由 CODEBASE 应包含您的 Activex 控件的 .ocx 文件和 .inf 文件控制其安装。通过的管理文件和 .inf 文件的名称创建压缩文件。不要包括在压缩文件的系统可能已经存在的依赖 DLL。例如,MFC DLL 在单独的压缩文件打包并由控件 .inf 文件引用。

有关如何的详细信息创建 CAB 文件,请参见 创建 CAB 文件

941zhks9.collapse_all(zh-cn,VS.110).gifINF 文件

下面的示例,spindial.inf,列出为 MFC Spindial 控件和版本信息需要支持的文件。通知 MFC 的 DLL 位置是 Microsoft 网站。Microsoft 提供该 mfc42.cab 并签名。

Contents of spindial.inf:
[mfc42installer] 
file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab 
[Olepro32.dll] - FileVersion=5,0,4261,0
[Mfc42.dll] - FileVersion=6,0,8168,0
[Msvcrt.dll] - FileVersion=6,0,8168,0

941zhks9.collapse_all(zh-cn,VS.110).gif<OBJECT> 标记

下面的示例阐释 <OBJECT> 标记为程序包 MFC Spindial 示例控件。

<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
  CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
  CODEBASE="http://example.microsoft.com/spindial.cab#Version=1,0,0,001">
    <PARAM NAME="_Version" VALUE="65536">
    <PARAM NAME="_ExtentX" VALUE="2646">
    <PARAM NAME="_ExtentY" VALUE="1323">
    <PARAM NAME="_StockProps" VALUE="0">
    <PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>

在这种情况下,spindial.cab 将包含两个文件,spindial.ocx 和 spindial.inf。以下命令将生成压缩文件:

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf 

在压缩的 –s 6144 参数保留空间代码签名的。

941zhks9.collapse_all(zh-cn,VS.110).gif修订标记

请注意此处 #Version信息指定与 CAB 文件应用于 <OBJECT> 标记的 CLASSID 参数指定的控件。

基于指定版本,可以强制要下载的控件。有关 OBJECT 标记的完整规范包括 CODEBASE 参数,请参见 W3C 引用。

标记脚本和初始化的控件安全

如果它们实际上是安全的,应标记用于网页的 Activex 控件作为脚本的初始化的安全可靠。一个安全控件不会直接执行磁盘 IO 或访问计算机的内存或注册。

控件可以被标记为脚本的初始化的安全可靠。通过该注册表。修改 DllRegisterServer 添加项类似于下面的标记该控件作为脚本和持久性的安全在注册表。一个替代方法是实现 IObjectSafety

您将定义 GUID (全局唯一标识符) 控件的能将其安全性。脚本和持续时间。可以安全地脚本的控件将包含注册表项类似于以下内容:

HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}

可以从持久数据安全初始化的控件是持久性的标记确保与注册表项类似于:

HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

添加项类似于以下内容 (替换控件的选件类 ID。{06889605-B8D0-101A-91F1-00608CEAD5B3}位置) 关联的键与下面选件类 ID:

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4} 
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4} 

许可证释放

如果要在网页中使用一个授权控件,必须验证许可协议允许其在 Internet 上使用并创建一个许可证程序包文件 (LPK) 它。

运行时,如果 Internet Explorer 的计算机上未授权使用控件,授权的 Activex 控件在 HTML 页不会正确加载。例如,因此,如果使用 Visual C++,授权控件已生成,使用控件的 HTML 页在控件中创建的计算机上正确加载,但是,它在不同的计算机不会加载,除非许可证信息包括在内。

若要使用授权的 Activex 控件在 Internet Explorer 中,则必须检查供应商的许可协议验证控件的许可证授予权限:

  • 再发行

  • 对在 Internet 上控件的使用

  • 对基本代码参数的使用

若要使用一个授权控件在一个 nonlicensed 设备的 HTML 页,必须生成许可证程序包文件 (LPK)。LPK 文件在 HTML 页包含授权控件的运行时许可证。此文件。附带了 ActiveX SDK 的 LPK_TOOL.EXE 生成。有关更多信息,请参见 MSDN 网站 https://msdn.microsoft.com

创建 LPK 文件

  1. 运行中允许使用控件的计算机上 LPK_TOOL.EXE。

  2. License Package Authoring Tool 对话框中,在 可用控件 列表框中,选择在 HTML 页并单击 添加要使用的每个授权的 Activex 控件。

  3. 单击 Save & Exit 并键入一个名称。LPK 文件。这将创建 LPK 文件并关闭应用程序。

嵌入 HTML 页的一个授权控件

  1. 编辑您的 HTML 页。在 HTML 页中,插入许可证管理器对象的一 <OBJECT> 标记在任何其他 <OBJECT> 标记之前。许可证管理器是安装了 Internet Explorer 的 Activex 控件。其选件类 ID 如下所示。设置许可证管理器对象的 LPKPath 属性设置为 LPK 文件的路径和名称。您只能有每个 HTML 页的一 LPK 文件。

    <OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
        <PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
    </OBJECT>
    
  2. 插入到的授权控件的 <OBJECT> 标记在许可证管理器标记之后。

    例如,显示掩码 Microsoft 的 HTML 页以进行编辑控件如下所示。类 ID 用于许可证管理器控件,ID 用于掩码编辑控件的第二个类。更改标记指向先前创建 .lpk 文件的相对路径,并添加对象标记包含控件的选件类 ID。

  3. 插入到的 LPK 文件的 <EMBED> 属性,因此,如果使用 NCompass ActiveX 插件。

    如果控件在其他活动启用的浏览器能查看—例如,使用 NCompass ActiveX 插件的 Netscape —必须添加 <EMBED> 语法如下所示。

    <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>
    

有关授权控件的更多信息,请参见 Activex 控件:允许 Activex 控件

签名代码

代码签名旨在标识代码的源并确保代码自身没有变化,则它有符号。基于浏览器安全设置,在代码中,下载之前,用户可以发出警告。用户可以选择某些信任证书所有者或公司,这些签名的信任代码将下载情况下,不警告。代码进行数字签名避免篡改。

确定您的最终代码签名,以便您的控件可以自动下载,而不显示信任警告消息。有关如何的详细信息对代码,请检查 Authenticode 的文档在 ActiveX SDK 并查看 签名的 CAB 文件

根据信任和浏览器安全级别设置,证书能显示标识给签名人员或公司。如果安全级别为 none,或者,如果符号控件的证书所有者信任证书,不会显示。请参见 Internet Explorer web 浏览器安全级别和控件行为 有关如何的详细信息浏览器安全设置确定您的控件是否下载,并且证书显示。

因为它有符号,若要确保代码的未发生更改。代码的哈希。证书后采用并中。此哈希处理后比较执行的代码进行哈希处理,在代码下载后,但,在运行之前。公司例如 Verisign 可以提供必要的私有和公钥对代码。ActiveX SDK 附带 MakeCert,创建一个实用工具测试证书。

管理调色板

容器确定调色板并使其可用作一个环境属性,DISPID_AMBIENT_PALETTE。容器 (例如,Internet Explorer) 选择与页上的所有 Activex 控件用于确定其添加到该调色板。这样可防止闪烁的显示并提供一致的外观。

控件可以重写 OnAmbientPropertyChange 更改的处理通知到调色板的。

控件可以重写 OnGetColorSet 返回设置的颜色绘制调色板。容器使用的返回值确定控件是否调色板识别的。

在 OCX 下 96 条准则,控件必须总是意识到其在后台的调色板。

不使用环境调色板属性的旧容器将发送 WM_QUERYNEWPALETTEWM_PALETTECHANGED 信息。控件可以重写 OnQueryNewPaletteOnPaletteChanged 处理这些消息。

Internet Explorer web 浏览器安全级别和控件行为

浏览器具有安全级别的选项,可配置用户。由于网页可以包含可能会危害用户计算机的操作内容,浏览器允许用户为安全级别选择选项。基于这种浏览器实现安全级别,控制是否不能下载,也无法显示证书或警告消息允许用户选择运行时下载控件。Activex 控件行为在高,中等和低安全级别下的在 Internet Explorer 下面列出。

941zhks9.collapse_all(zh-cn,VS.110).gif高安全模式

  • 未签名的控件不会下载。

  • 符号控件将显示证书,如果不受信任 (用户可以选择从现在开始始终信任来自此证书所有者的代码)。

  • 为安全标记的控件将具有不可变数据和/或 scriptable。

941zhks9.collapse_all(zh-cn,VS.110).gif中等安全模式

  • 无符号控件在下载之前将显示警告。

  • 符号控件将显示证书,如果不受信任的。

  • 为安全未标记的控件将显示警告。

941zhks9.collapse_all(zh-cn,VS.110).gif低安全模式

  • 控件下载,而无需警告。

  • 脚本和持久性发生,而无需警告。

请参见

参考

MFC ActiveX 控件:允许 ActiveX 控件

概念

MFC Internet的编程任务。

MFC Internet编程的基本知识