我使用 RegSvr32.exe
注册了一个 COM 服务器并获得了下一个退出代码:
0
- 正确注册正常 DLL Com 服务器时
3
- 当尝试注册伪造的 DLL Com 服务器时(简单的文本文件重命名为 .DLL
4
- 当尝试注册简单的 DLL,而不是 Com Server 时
问题:我在哪里可以找到所有可能的退出代码及其含义的官方(或非官方但很好的)描述?
在互联网上搜索没有给我结果,所以我找到了this topic哪里写的退出代码与 Windows 系统错误代码相同,但我不明白为什么在尝试注册错误文件时我获得代码 = 3
= ERROR_PATH_NOT_FOUND
,以及在注册非 COM DLL 时 - 4
= ERROR_TOO_MANY_OPEN_FILES
?
对我来说,这听起来不合逻辑。
最佳答案
没有记录退出代码。文档在这里:
但是,REGSVR32.EXE 版本的源代码随 Visual Studio 2008 一起提供。这给出了它的版本 4.0.0,因此与报告版本 6 的 Windows 一起提供的版本不同。
快速浏览显示这些:
#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,现在为时已晚改变它。
另见 What do the various regsvr32 exit codes mean?在 Raymond Chen 的 MSDN 博客上。
关于windows - RegSvr32 退出代码文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094309/