为什么release版本的activex 注册失败?而debug版本的却能注册成功?

一. 问题:
最近项目中需要做一个activex控件嵌入到浏览器中使用。
1、很快用 VS2013+Qt5.6.1 新建了一个 ActiveQt Server 工程,并简单写了一个弹框的测试功能,编译,注册,测试,一切OK。
2、将项目移植到 ActiveQt Server 工程中后,编译,注册,调试,也一切OK。
3、可待打包到别的机器发布安装的时候,报注册失败,经过一番简单的排查后,确定是release版本的就是注册不了(之前测试的时候用的事debug版本的)。
注册命令如下:

regsvr32.exe *.dll

为什么 release 版本的 activex 注册失败呢?而debug版本的却能注册成功?

二. 问题排查:
接下来进入了一轮长达几天的问题排查过程。
1、期间搜索帖子无数,问过N个群友,也问过同行和之前的同事。
有的说是代码问题,有的说是工程配置问题,有的说是动态库不兼容,有的说。。。。。
2、因为对VS不熟,也将工程移植到QtCreator,可表现还是一样: release 版本的 activex 注册失败,而debug版本的却能注册成功。
感觉排除了工程配置的原因。
3、又把之前那个简单的例子拿出来看了看,表现依然一样:release 版本的 activex 注册失败,而debug版本的却能注册成功。
感觉排除了动态库不兼容的原因。
4、于是进入了又一轮无目的的思考过程。

三. 问题解决:
最后在两个同事的启发下找到了问题:
1、怀疑会不会是权限问题? release 版本需要更高的权限?
于是我以管理员方式打开cmd,执行注册命令,还是失败。
2、突然抱找无所谓的态度,把注册动态库的命令后面动态库文件使用了全绝对路径,居然成功了!
3、再一次把批处理里的动态库文件也改成带着全绝对路径,也成功了!

四. 结论:
原来问题的原因是:
release 版本的 activex 注册时,控件动态库文件需要带着全绝对路径;而debug版本的却只要在当前目录就行,当然带上全觉得路径也是可以的。
注册命令如下:

regsvr32.exe "%~dp0*.dll"

添加双引号的原因是保证路径含有空格时能那个正常注册成功。

当然,activex控件注册失败的原因很多,你遇到的问题可能不是上面的原因,但如果也遇到 “release 版本的 activex 注册失败,而debug版本的却能注册成功。”,不妨也试一试这个方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值