实现了ISafeObject接口或是使用分组管理器(Component Categories Manager)标记安全控件后还是无法在某些XP的客户机上显示出我的控件。整理了一下出现问题的机器状况:
前提:
1。在Ax控件中已经实现了ISafeObject接口(或是修改了注册表)
2。客户IE出现控件下载提示,确认下载。
3。查看注册表,发现我的CAB中的控件(ocx)及其依赖的DLL已经成功的注册到机器中。(这点很重要,因为这说明了我的cab没有问题,即使在本机上用regsvr32手动注册这台机器也无法使用控件)
4。控件的签名是使用工具“makecert.exe”和“cert2spc.exe”工具生成的采用的“不安全的根证书”生成的签名证书和密钥,并使用了“signcode.exe”对控件进行了签名。
症状:
无法在某些XP SP2 的IE上显示控件(实际上控件已经注册成功了)
结果:
上网搜索后,有微软关于XP SP2的说明,说是SP2补丁导致很多控件的无法正常的使用,提供了一个办法,将访问服务器的站点添加到“受信任的站点”(IE的“Internet选项”中,注意不要选择“对改区域内的所有站点都要求验证(https://)”),这时某些有问题的SP2机器上显示出来。
疑问猜想:
1。有些机器可以显示,有些不能显示,这可能和系统的某些未知补丁有关系
2。花钱注册了控件签名是否能够解决这一问题
3。在有的(只有一台,正版XP sp2, 经常升级补丁),使用regsvr32 来注册OCX都不可以?
记得WinXPSp2里面ActievX的限制更加严格,没有数字签名的控件会被禁用。对实现了IObjectSafety的控件也会有警告参考http://verisign.com/products-services/security-services/code-signing/digital-ids-code-signing/index.html