将.NET应用迁移至64位Windows 10时出现COM类工厂检索失败错误的解决求助
解决CLSID {DB797690-40E0-11D2-9BD5-0060082AE372}的COM注册错误
我来帮你拆解这个问题——这个CLSID对应的是Data Shape Object(由MSDATASRC.DLL提供),是个老的32位COM组件,在64位Windows 10上默认不会被正确注册,这正是你报错的核心原因。下面是一步步的解决办法:
1. 确认组件对应的DLL
这个CLSID绑定的是MSDATASRC.DLL,属于旧版MDAC(Microsoft Data Access Components)的一部分,Win10默认没预装。你可以从同版本的32位Windows系统拷贝这个DLL,或者从微软的兼容组件包获取(注意要拿32位版本,这个组件没有64位版本)。
2. 用32位版regsvr32注册DLL
64位系统里有两个regsvr32:默认的C:\Windows\System32\regsvr32.exe是64位的,没法注册32位DLL;你得用32位的版本,路径是C:\Windows\SysWOW64\regsvr32.exe。操作步骤:
- 右键开始菜单,选择「Windows终端(管理员)」或「命令提示符(管理员)」
- 执行命令(替换成你DLL的实际路径):
如果注册成功,会弹出确认对话框;如果失败,看下面的处理。C:\Windows\SysWOW64\regsvr32.exe "C:\YourPath\MSDATASRC.DLL"
3. 处理注册时弹出的错误对话框
你提到注册DLL时弹出错误,大概率是缺少依赖或者DLL版本不对:
- 确保你用的是32位版的MSDATASRC.DLL,别拿64位的(这个组件根本没64位版本)
- 安装MDAC 2.8 SP1兼容包,Win10虽然自带新版MDAC,但旧组件可能需要这个兼容包才能正常注册
- 给你的.NET应用设置32位运行模式:如果是编译好的程序,右键程序→属性→兼容性→勾选「以兼容模式运行这个程序」(选Windows 7试试),同时在「详细信息」里设置首选32位;如果是源码项目,在VS的项目属性里把目标平台改成
x86,不要用Any CPU或x64。
4. 手动添加注册表项(如果注册失败后仍缺失)
如果注册后注册表还是找不到这个CLSID,你可以手动补全32位注册表分支的项:
- 按Win+R输入
regedit打开注册表编辑器 - 导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID - 右键CLSID项→新建→项,命名为
{DB797690-40E0-11D2-9BD5-0060082AE372} - 选中这个新项,右侧默认值设为
Data Shape Object - 右键这个新项→新建→项,命名为
InprocServer32,默认值设为DLL的完整路径(比如C:\Windows\SysWOW64\MSDATASRC.DLL),然后新建字符串值ThreadingModel,值设为Both - 再新建子项
ProgID,默认值设为MSDataShape.DataShape.1 - 最后新建子项
VersionIndependentProgID,默认值设为MSDataShape.DataShape
5. 验证修复效果
做完以上操作后,重启你的应用(或者干脆重启系统),再运行看看错误是否消失。如果还是不行,再检查一遍应用是否真的在32位模式下运行——毕竟这个COM组件只能在32位上下文里工作。
内容的提问来源于stack exchange,提问作者Priyadarshini Sivakumar
相关产品推荐
相关产品推荐

