用 Inno Setup制作了一个安装exe文件,测试安装时报告错误:
无法注册DLL/OCX:RegSvr32 failed with exit code 0x3
一开始以为是权限不足引起的,用管理员权限重新运行安装exe文件,还是报告同样的错误。由于提示中给出了无法注册的 DLL 文件名,到命令提示符界面下,执行 regsvr32 命令注册 DLL,报告错误:
LoadLibrary( ) 失败,找不到指定的模块
由于是加载动态库失败,就想到可以用 Dependency Walker 工具 (官网是 http://dependencywalker.com/) 查看一下无法注册的 DLL 文件依赖哪些其他 DLL 文件,查看时报错:
Error: At least one required implicit or forwarded dependency was not found.
msvcp100.dll Error opening file. 系统找不到指定的文件。
msvcp100.dll 是一个 C run-time library,包含在 Visual Studio 2010中。如果没有安装 Visual Studio 2010,可以下载安装 Microsoft Visual C++ 2010 SP1 Redistributable Package, 下载网址是:
32位 ---- https://www.microsoft.com/en-us/download/details.aspx?id=8328
64位 ---- https://www.microsoft.com/en-us/download/details.aspx?id=13523
由于只缺少 msvcp 100.dll 这一个文件,最省事的方法是在网上下载或到安装有 VS 2010 的计算机上找到这个文件,把它拷贝到系统对应的目录下。
如果应用程序是 32 位的,则拷贝 32 位的 msvcp100.dll ,通常在 64 位 Windows 的 C:\Windows\SysWOW64 目录下。
如果应用程序是 64位的, 则拷贝 64 位的 msvcp100.dll ,通常在 64 位 Windows 的 C:\Windows\System32 目录下。
拷贝完成后,再次运行安装 exe 程序,能够成功执行。回想一下,情况应该是这样:那个无法注册的 DLL 文件是由他人用 VS 2010 开发的,我在制作安装包时不知道有这种依赖关系,只是把 DLL 文件放入安装要包含的文件,所以就出现了错误。由于 msvcp100.dll 文件是由微软开发的,不适合放入自己制作的 exe 文件,最好的处理方式还是提示用户,让没有安装过 Microsoft Visual C++ 2010 SP1 Redistributable Package 的用户到微软的网站下载安装,之后再安装我们自己开发的程序。
最后总结一下:
如果 RegSvr32 failed with exit code 0x3 错误,就用 Dependency Walker 工具查看无法注册的文件依赖哪些其他文件,把缺少的文件补上就能解决这个问题了。
pendency Walker