我使用RegSvr32.exe
注册COM服务器并获得下一个退出代码:
0
- 正确注册正常的DLL Com服务器
3
- 尝试注册伪造的DLL Com Server时(简单文本文件重命名为.DLL
4
- 尝试注册简单的DLL时,而不是Com Server
问题:在哪里可以找到所有可能的退出代码及其含义的官方(或非官方但好的)描述?
在互联网上搜索没有给我结果,所以我发现this topic在哪里写的退出代码与windows系统错误代码相同,但我不明白为什么然后尝试注册坏文件我正在获取代码= 3
= ERROR_PATH_NOT_FOUND
,并且在注册非COM DLL时,4
= ERROR_TOO_MANY_OPEN_FILES
?
对我来说,这听起来并不合乎逻辑。
答案 0 :(得分:37)
未记录退出代码。文档在这里:
但是,版本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.
阅读源代码表明,在任何情况下都不会返回除上述代码之外的任何其他代码,并且成功归零,这证明它与Windows代码不同。
我怀疑返回码的不同之处在于,如果它到达GetProcAddress,它会从它调用的函数返回退出代码,而不是总是返回5。
理想情况下,他们会使用GetLastError来获得更有用的退出代码,但我怀疑有太多的工具(例如第三方安装程序)现在依赖于退出代码2-4,现在为时已晚更改。
另请参阅Raymond Chen在MSDN上的博客上的What do the various regsvr32 exit codes mean?。
答案 1 :(得分:13)
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://support.microsoft.com/kb/207132它有匹配的代码,所以看起来KB的演示代码也来自RegSvr。解决每个失败代码背后的原因很简单。
答案 2 :(得分:4)
Ben的答案是正确的,但请注意错误代码3 也会在结果中给出
>
#define FAIL_LOAD 3 // LoadLibrary Failed
感觉有点模糊,但LoadLibrary是指在特定DLL中引用的DLL。使用Depends等应用程序,您可以找到所有引用,包括缺少的引用。请注意,缺少引用并不总是会导致错误代码3(在DLL实际上没有使用它的情况下)