为什么release版本的activex 注册失败?而debug版本的却能注册成功?
2016-09-22 15:02
357 查看
一. 问题:
最近项目中需要做一个activex控件嵌入到浏览器中使用。
1、很快用 VS2013+Qt5.6.1 新建了一个 ActiveQt Server 工程,并简单写了一个弹框的测试功能,编译,注册,测试,一切OK。
2、将项目移植到 ActiveQt Server 工程中后,编译,注册,调试,也一切OK。
3、可待打包到别的机器发布安装的时候,报注册失败,经过一番简单的排查后,确定是release版本的就是注册不了(之前测试的时候用的事debug版本的)。
注册命令如下:
为什么 release 版本的 activex 注册失败呢?而debug版本的却能注册成功?
二. 问题排查:
接下来进入了一轮长达几天的问题排查过程。
1、期间搜索帖子无数,问过N个群友,也问过同行和之前的同事。
有的说是代码问题,有的说是工程配置问题,有的说是动态库不兼容,有的说。。。。。
2、因为对VS不熟,也将工程移植到QtCreator,可表现还是一样: release 版本的 activex 注册失败,而debug版本的却能注册成功。
感觉排除了工程配置的原因。
3、又把之前那个简单的例子拿出来看了看,表现依然一样:release 版本的 activex 注册失败,而debug版本的却能注册成功。
感觉排除了动态库不兼容的原因。
4、于是进入了又一轮无目的的思考过程。
三. 问题解决:
最后在两个同事的启发下找到了问题:
1、怀疑会不会是权限问题? release 版本需要更高的权限?
于是我以管理员方式打开cmd,执行注册命令,还是失败。
2、突然抱找无所谓的态度,把注册动态库的命令后面动态库文件使用了全绝对路径,居然成功了!
3、再一次把批处理里的动态库文件也改成带着全绝对路径,也成功了!
四. 结论:
原来问题的原因是:
release 版本的 activex 注册时,控件动态库文件需要带着全绝对路径;而debug版本的却只要在当前目录就行,当然带上全觉得路径也是可以的。
注册命令如下:
添加双引号的原因是保证路径含有空格时能那个正常注册成功。
当然,activex控件注册失败的原因很多,你遇到的问题可能不是上面的原因,但如果也遇到 “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版本的却能注册成功。”,不妨也试一试这个方法。
相关文章推荐
- VS2013 Debug版本编译成功,Release失败
- release版本成功,debug版本失败,或者debug 版本成功,release版本失败
- MFC中Debug模式能够运行成功,但Release版本不能运行成功。
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行
- VS2010使用 ITK的release版本链接失败 “_ITERATOR_DEBUG_LEVEL”
- C++中,debug编译成功,为什么release模式编译报错
- 为什么我的程序debug版本运行没有问题,而release版本总是报错?
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行(转)
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
- 关于vs2010编译的问题#debug编译成功release编译失败#
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行
- vc中的release和debug版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- 为什么你还不成功?31条失败的原因
- 程序Debuge版本编译通过,Release版本出现链接错误,解决办法
- 程序Debuge版本编译通过,Release版本出现链接错误,解决办法
- DEBUG和RELEASE 版本差异及调试相关问题
- VS.Net中程序集的Debug版本和Release版本的区别