双击一个老软件,弹窗说无法启动此程序,因为计算机中丢失 ole32.dll,让重新安装。

ole32.dll 是 Windows 的 COM/OLE 核心组件,负责对象链接与嵌入、剪贴板、拖放、OLE 自动化。它属于系统文件,正常情况下 System32 和 SysWOW64 各有一份,不该缺。

真的缺失很少见

多数报错不是文件没了,而是下面几种情况:

  • 32 位程序在 64 位系统上找错目录,调用了不匹配的版本。
  • 有人从下载站下了个 ole32.dll 塞进程序目录,版本和系统对不上。
  • 注册表里 COM 的 InprocServer32 被改坏,指向了不存在的路径。

尤其是自己下 dll 这种做法。网上流传的「dll 大全」里混着旧版本甚至被改过的文件,覆盖系统文件会让更多程序起不来,最后只能重装系统。别这么干。

先修复,再谈重装

按顺序试,前一步不行再下一步:

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

sfc 校验系统文件并从缓存还原,DISM 修缓存本身。两条都要管理员权限,跑完重启。多数「丢失 dll」的报错在这一步就好了。

如果只有某一个程序报错、其他都正常,问题基本在那个程序身上。查它是不是 32 位、是不是装在了带空格或中文的路径里、是不是需要旧的 VC 运行库,比折腾系统文件有效。

32 位和 64 位的重定向

64 位系统上,32 位程序访问 System32 会被重定向到 SysWOW64,拿到的其实是 32 位版本。如果两个目录里的文件版本不一致,就会出现只有某个程序报错。对比两边文件版本号,能确认是不是这个原因。

别急着信报错里的文件名

Windows 加载失败时给出的 dll 名,有时只是依赖链上第一个没加载成功的模块,真正缺的可能是 msvcp140.dll 或者某个 vcruntime。用 dumpbin /dependents 看一眼依赖树,能省不少时间。

顺序记一下:先修复、再查依赖、最后才考虑重装,别倒过来。真要重装,先把系统和常用程序清单备份下来,比装完再一点点找环境省事。