双击一个老软件,弹窗说无法启动此程序,因为计算机中丢失 ole32.dll,让重新安装。
ole32.dll 是 Windows 的 COM/OLE 核心组件,负责对象链接与嵌入、剪贴板、拖放、OLE 自动化。它属于系统文件,正常情况下 System32 和 SysWOW64 各有一份,不该缺。
真的缺失很少见
多数报错不是文件没了,而是下面几种情况:
- 32 位程序在 64 位系统上找错目录,调用了不匹配的版本。
- 有人从下载站下了个 ole32.dll 塞进程序目录,版本和系统对不上。
- 注册表里 COM 的 InprocServer32 被改坏,指向了不存在的路径。
尤其是自己下 dll 这种做法。网上流传的「dll 大全」里混着旧版本甚至被改过的文件,覆盖系统文件会让更多程序起不来,最后只能重装系统。别这么干。
先修复,再谈重装
按顺序试,前一步不行再下一步:
sfc /scannowDISM /Online /Cleanup-Image /RestoreHealthsfc 校验系统文件并从缓存还原,DISM 修缓存本身。两条都要管理员权限,跑完重启。多数「丢失 dll」的报错在这一步就好了。
如果只有某一个程序报错、其他都正常,问题基本在那个程序身上。查它是不是 32 位、是不是装在了带空格或中文的路径里、是不是需要旧的 VC 运行库,比折腾系统文件有效。
32 位和 64 位的重定向
64 位系统上,32 位程序访问 System32 会被重定向到 SysWOW64,拿到的其实是 32 位版本。如果两个目录里的文件版本不一致,就会出现只有某个程序报错。对比两边文件版本号,能确认是不是这个原因。
别急着信报错里的文件名
Windows 加载失败时给出的 dll 名,有时只是依赖链上第一个没加载成功的模块,真正缺的可能是 msvcp140.dll 或者某个 vcruntime。用 dumpbin /dependents 看一眼依赖树,能省不少时间。
顺序记一下:先修复、再查依赖、最后才考虑重装,别倒过来。真要重装,先把系统和常用程序清单备份下来,比装完再一点点找环境省事。