Active控件开发及部署遇到的问题

     最近帮同事写一个安装程序用于部署activex控件,之前没写过,遇到了一些问题,特记录下来,与大家分享,若有不对,请不吝赐教!

     安装程序会安装一个windows服务,也是一个Com Server,而activex控件会创建Com对象。安装完毕后,activeX控件创建com对象失败,错误代码E_ACCESSDENIED。经调查,以http方式访问web时iexplore进程的完整性级别处于low mandatory level,即所谓的保护模式,在访问资源时受到较大的限制,例如此处的创建com对象失败。Note:在开发ActiveX控件过程中,我们可能直接打开一个加载activex控件的本地的html文件,这是iexplore处于medium mandatory level,不会出现以上的错误。

    为了能访问高完整性级别的对象,需要启动另外一个进程(broker)。这个进程处于medium integrity level,如果没有任何配置的的话,IE会提示是否允许启动此进程,如果在注册表中配置了此进程,IE会静默启动此进程,详细请看Understanding and Working in Protected Mode Internet Explorer。于是我们在ActiveX控件中创建了一个命名对象,Broker进程连接此命名对象,而后Broker创建Com对象,这样ActiveX就可以利用Broker进程与Com 服务通信了。

   我对比了下IE8与IE10对是否静默启动进程列表的加载方式,IE8启动后,不会加载此列表,当需要启动进程时,会加载此列表,之后不会再加载(重启之前)。而IE11启动后会加载此列表,之后不会再加载(重启之前)。这造成了一个有趣的现象,在首次加载Active控件时,我们会将自己的broker进程写入列表,而后activeX控件加载,启动broker进程,问题来了,若我们的broker进程是IE此次启动后第一个启动的外部进程,则不会弹出提示对话框,否则会弹出提示对话框。而在IE10上,若IE不重启,在无论如何都会弹出提示对话框。我个人觉得安装完后要求重启IE是个选择项。

  为了防止ActiveX控件升级过程中某些文件被占用,我对这些文件创建采用了重构文件名的方式,及FileName00X.ext方式,若升级不成功,序号递增。其实若文件被占用,要求用户关掉IE继续重试也是一个方案。

  我的升级文件没有采用将相关文件打包成cab文件的方式,因为我的安装比较服务,用cab不会,自己搞不定,我呢写了个setup.exe,相关文件资源形式内嵌。在http文件中object属性codebase简单的设置为"setup.exe#version=1,0,0,1"即可。

  另外无意读了另一篇blog,知道了ie10及以后还有增强保护模式,没太研究,君请看 http://blog.csdn.net/yangjian8915/article/details/11812303,其中请睁大眼睛看清楚这一句“默认情况下,C:\Program Files 及 (x86) 在Win8/Win8.1下就已经有了,叫做:ALL_APPLICATION_PACKAGES这个group”,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值