我使用RegSvr32.exe注册了一个COM服务器,得到了下一个退出代码:
0 -当正确注册普通DLL Com服务器时
3 -当尝试注册伪DLL服务器时(简单文本文件重命名为.DLL
4 -当尝试注册简单DLL时,而不是Com服务器
问:我在哪里可以找到所有可能的退出代码及其含义的官方(或非官方,但很好的)描述?
在互联网上搜索没有给我的结果,所以我找到了this topic,其中写的退出代码与windows系统错误代码相同,但我不明白为什么当尝试注册坏文件时,我得到的代码= 3 = ERROR_PATH_NOT_FOUND,而当注册非COM DLL - 4 = ERROR_TOO_MANY_OPEN_FILES?对我来说,这听起来并不符合逻辑。
发布于 2014-02-28 20:39:19
未记录退出代码。文档在这里:
但是,版本REGSVR32.EXE的源代码随Visual Studio 2008一起提供。这使其版本为4.0.0,因此与windows随附的版本6不同。
快速浏览一下会显示以下内容:
#define FAIL_ARGS 1 // Invalid Argument
#define FAIL_OLE 2 // OleInitialize Failed
#define FAIL_LOAD 3 // LoadLibrary Failed
#define FAIL_ENTRY 4 // GetProcAddress failed
#define FAIL_REG 5 // DllRegisterServer or DllUnregisterServer failed.阅读源代码表明,在任何情况下,它都不会返回上述代码之外的任何代码,如果成功,则返回0,这证明它与Windows不同。
我怀疑返回代码的不同之处在于,如果它一直到GetProcAddress,那么它就会从所调用的函数返回退出代码,而不是总是返回5。
理想情况下,他们应该使用GetLastError来获取更有用的退出代码,但我怀疑现在有太多的工具(例如第三方安装程序)依赖于退出代码2-4,现在更改它已经太晚了。
也可以在Raymond Chen的MSDN博客上查看What do the various regsvr32 exit codes mean?。
发布于 2014-02-28 20:16:43
Visual Studio曾经附带了一个MFC示例,它实际上是RegSvr32实用程序的源代码,我记得通过它来获取退出代码:
FAIL_ARGS 1
FAIL_OLE 2
FAIL_LOAD 3
FAIL_ENTRY 4 // Not ERROR_TOO_MANY_OPEN_FILES but as expected "could not resolve
// DLLRegisterServer" as your using an invalid DLL
FAIL_REG 5我找不到样本,但如果我在谷歌上搜索我提取的内容,就会发现:http://web.archive.org/web/20140803013714/http://support.microsoft.com:80/kb/207132有匹配的代码,所以看起来KB演示代码也是从RegSvr中提取的。找出每个失败代码背后的原因是微不足道的。
发布于 2017-04-05 22:57:14
Ben的答案是正确的,但是,请注意,如果出现以下情况,也会给出错误代码3
#define FAIL_LOAD 3 // LoadLibrary Failed
感觉有点模糊,但LoadLibrary是指在特定的DLL中引用的DLL。使用诸如Depends之类的应用程序,您可以找到所有引用,包括缺少的引用。请注意,缺少引用并不总是导致错误代码3(在DLL实际上没有使用它的情况下)
https://stackoverflow.com/questions/22094309
复制相似问题