Windows7 SP1导致含有ADO的程序运行失败问题
2012-08-07 10:17
369 查看
前天,更换了一台新电脑,配置还行,就兴冲冲的用上了32位的Windows7 SP1,确实比XP,2003好看,呵呵,其他还没更深的感触。当天晚上一个客户让修改一个程序功能,之前一直是在XP SP3(Windows2003 SP2)+VB6+SQL2000的环境下编译(确实有点古老了,习惯了),于是很兴奋的把源码拷到了新机器上,很简单的修改了一下便编译替换,然后悲剧来了,反映说“运行程序后直接弹出一个提示框,内容是‘类不支持自动化或不支持期望的接口’,程序退出”(有的机器会提示“类型不匹配”,“函数或接口标记为限制的,或函数中使用了VB不支持的自动类型”)。
程序入口是连接数据库,这里我没有做任何的修改,但最终还是判断是由ADO造成的,查看”Microsoft ActiveX Data Objects 2.8 Library”在Win7 SP1下的路径是“C:\ProgramFiles (x86)\Common Files\System\ado\msado28.tlb”,在Win2003 SP2下的路径是” C:\ProgramFiles\Common Files\System\ADO\msado15.dll”,在Win2003下根本没有msado28.tlb这个文件,我便开始了悲催的百度谷歌之旅,最终有帮助的资料如下:
1、http://topic.csdn.net/u/20110305/09/64d1a776-4bb2-44f7-9f83-d5ae4b1af325.html
通过这篇文章知道了ADO有更新,IID码是不相同的。
2、"类型不匹配"错误消息,当您运行Office 2010 应用程序的 32 位版本中的 VBA 宏http://support.microsoft.com/kb/983246
3、MS11-002:2011 年 1 月 11 日版 MicrosoftData Access Components 2.8 Service Pack 1 安全更新说明
http://support.microsoft.com/kb/2419632
3、An ADO applicationdoes not run on down-level operating systems after you recompile it on acomputer that is running Windows 7 SP 1 or Windows Server 2008 R2 SP 1 or thathas KB983246 installed
http://support.microsoft.com/kb/2517589/en-us
这篇文章中的解决方法是注册Msado60_Backcompat_i386.tlb或Msado60_Backcompat_x64.tlb,因为我的机器是32位,就注册了第二个,然后在引用中选择“Microsoft ActiveX Data Objects 6.0 BackCompat Library”,然后我本机就运行不了。所以这个并不能解决问题。但重要的一个信息是文章标题中的“KB983246”。
4、http://social.msdn.microsoft.com/Forums/zh-CN/accessdev/thread/aec25af5-2c32-4f7e-aac4-7900c46a22fe
5、这篇文章指向“KB983246”http://www.open-open.com/news/view/176e681
最终问题解决办法:
根据以上信息汇总,最终开始搜索“KB983246”这个补丁程序,微软官方站好像没有提供直接下载的链接,在CSDN的资源中发现了这个“解决WIN7SP1下编译的VS6.0程序(ADO2.8)在其它客户端下需无法使用的问题”
http://download.csdn.net/download/chinayokel/3096932
经测试(windows2003 SP2和Widows XPSP3),完美解决,历时三个小时呀,郁闷死了。
在部分计算机安装此补丁时,可能会出现安装失败,最暴力的办法就是到别的机器(未安装SP1的Windows 7)将本机的ADO(C:\Program Files\Common Files\System\ado)整个文件夹都替换掉,然后将程序Debug与Release文件夹全部删除干净,重新编译即可运行。
无意中又发现了一篇博文,台湾的,Windows7 SP1 導致含有 ADO 的程式失效問題,地址是http://www.dotblogs.com.tw/topcat/archive/2011/03/28/22122.aspx,这里面的解决办法是使用后期绑定(Late
Binding)使用ADO,我的程序确实都是使用的前期绑定(Early Binding),测试确实可以,且ADO的引用并不用更换。但因为需要改动的地方太多,而且没有了智能感知(Intellisense),很不习惯。所以还是使用KB983246解决问题。
程序入口是连接数据库,这里我没有做任何的修改,但最终还是判断是由ADO造成的,查看”Microsoft ActiveX Data Objects 2.8 Library”在Win7 SP1下的路径是“C:\ProgramFiles (x86)\Common Files\System\ado\msado28.tlb”,在Win2003 SP2下的路径是” C:\ProgramFiles\Common Files\System\ADO\msado15.dll”,在Win2003下根本没有msado28.tlb这个文件,我便开始了悲催的百度谷歌之旅,最终有帮助的资料如下:
1、http://topic.csdn.net/u/20110305/09/64d1a776-4bb2-44f7-9f83-d5ae4b1af325.html
通过这篇文章知道了ADO有更新,IID码是不相同的。
2、"类型不匹配"错误消息,当您运行Office 2010 应用程序的 32 位版本中的 VBA 宏http://support.microsoft.com/kb/983246
3、MS11-002:2011 年 1 月 11 日版 MicrosoftData Access Components 2.8 Service Pack 1 安全更新说明
http://support.microsoft.com/kb/2419632
3、An ADO applicationdoes not run on down-level operating systems after you recompile it on acomputer that is running Windows 7 SP 1 or Windows Server 2008 R2 SP 1 or thathas KB983246 installed
http://support.microsoft.com/kb/2517589/en-us
这篇文章中的解决方法是注册Msado60_Backcompat_i386.tlb或Msado60_Backcompat_x64.tlb,因为我的机器是32位,就注册了第二个,然后在引用中选择“Microsoft ActiveX Data Objects 6.0 BackCompat Library”,然后我本机就运行不了。所以这个并不能解决问题。但重要的一个信息是文章标题中的“KB983246”。
4、http://social.msdn.microsoft.com/Forums/zh-CN/accessdev/thread/aec25af5-2c32-4f7e-aac4-7900c46a22fe
5、这篇文章指向“KB983246”http://www.open-open.com/news/view/176e681
最终问题解决办法:
根据以上信息汇总,最终开始搜索“KB983246”这个补丁程序,微软官方站好像没有提供直接下载的链接,在CSDN的资源中发现了这个“解决WIN7SP1下编译的VS6.0程序(ADO2.8)在其它客户端下需无法使用的问题”
http://download.csdn.net/download/chinayokel/3096932
经测试(windows2003 SP2和Widows XPSP3),完美解决,历时三个小时呀,郁闷死了。
在部分计算机安装此补丁时,可能会出现安装失败,最暴力的办法就是到别的机器(未安装SP1的Windows 7)将本机的ADO(C:\Program Files\Common Files\System\ado)整个文件夹都替换掉,然后将程序Debug与Release文件夹全部删除干净,重新编译即可运行。
无意中又发现了一篇博文,台湾的,Windows7 SP1 導致含有 ADO 的程式失效問題,地址是http://www.dotblogs.com.tw/topcat/archive/2011/03/28/22122.aspx,这里面的解决办法是使用后期绑定(Late
Binding)使用ADO,我的程序确实都是使用的前期绑定(Early Binding),测试确实可以,且ADO的引用并不用更换。但因为需要改动的地方太多,而且没有了智能感知(Intellisense),很不习惯。所以还是使用KB983246解决问题。
相关文章推荐
- Windows7 SP1导致含有ADO的程序运行失败问题
- 解决端口被占用而导致软件运行失败,程序无法启动,无法安装开发工具等问题
- ADO 版本问题导致了程序不能在其他电脑运行
- android NDK开发未包含javah生成的头文件导致程序运行失败问题
- 用非管理员权限启动主程序,并用管理员权限启动子程序,导致WM_COPYDATA消息发送失败的问题
- 【Android开发经验】关于主题引用混乱导致程序运行崩溃的问题
- Windows7中,当迅雷7运行时,如果复制,IE等程序假死的问题的解决办法
- c++工程编译选项符号忘记定义导致程序运行不确定问题
- 我老遇到代码没检验出有错但一运行就会说有个问题导致程序停止工作
- 通过注册表开机运行自定义程序失败,问题检查为添加的路径错误
- 编译器运行程序和直接双击运行程序一个成功一个失败的问题说明
- 微信小程序用户信息解密失败导致的内存泄漏问题。
- 因为计算机中丢失opencv_world310d.dll,导致opencv程序无法运行问题
- server 2003 安装 VS 2003 遇到的问题 :安装frontpage 2000 web 客户端 和 安装程序运行时文件 失败
- Android6.0以后,在BroadcastReceiver中启动AlertDialog导致程序停止运行的问题及解决办法
- java程序由于编码问题在cmd中运行失败
- 平台问题导致的程序不能运行
- 解决使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题
- 解决Android客户端运行Cococs2dx编写的游戏程序遇到的意外游戏中断导致的游戏黑屏问题
- 本机运行正常的ADO程序在别的机器上无法运行的问题