【发布时间】:2010-11-15 00:49:14
【问题描述】:
当我使用“regsvr32 foo.dll”时,我得到一个“指定的模块不能 发现”错误。
这个错误是因为 regsvr32 找不到 文件,即使它是当前文件夹。
我已经指定了完整路径,但它仍然不起作用。有什么想法吗????
【问题讨论】:
当我使用“regsvr32 foo.dll”时,我得到一个“指定的模块不能 发现”错误。
这个错误是因为 regsvr32 找不到 文件,即使它是当前文件夹。
我已经指定了完整路径,但它仍然不起作用。有什么想法吗????
【问题讨论】:
如果foo.dll 依赖于bar.dll 并且实际上找不到bar.dll,则会发生这种情况。
尝试使用 MSVC 中的 depends.exe 来检查 foo.dll 的依赖关系,看看是否缺少。
另一种选择是下载并运行FileMon。然后再次运行regsvr32 并查看它找不到哪个文件/模块。这绝对应该追查到它。
【讨论】:
在 64 位操作系统上,Dependency Walker 对我来说没有任何信息;并且FileMon 已被进程监视器取代(请参阅https://docs.microsoft.com/en-us/sysinternals/downloads/procmon 以下载该实用程序)。以下是我如何使用 Process Monitor 找到丢失的引用:
从工具栏或菜单中打开过滤器对话框。
将regsvr32.exe 中的Process Name 添加到过滤器列表并删除所有PID 过滤器。
清空列表,...
...打开捕获(如果尚未打开)。
从控制台窗口运行regsvr32.exe 命令。完成后,您可能需要关闭捕获。
regsvr32 加载您的 DLL 后查找缺少的引用。
【讨论】:
在我的情况下,当 DLL(实际上是旧版 VB OCX)在 SYSTEM32 中时,REGSVR32 声称“未找到文件...”。将它们移动到另一个目录后,REGSVR32 成功。
【讨论】:
在某些版本的 Windows10 中,由 SYSWOW64\REGSVR32 注册的文件必须驻留在 SYSWOW64
【讨论】: