windows - RegSvr32 退出代码文档?

标签 windows winapi dll com regsvr32

我使用 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/

相关文章:

c++ - 检查是否启用了 DEP

winapi - 在哪里可以找到 RD 网关 API 的示例代码?

sql-server - 使用 SQL Server 镜像时是否镜像了 CLR DLL?

python - 使用 Python 在 Windows 中获取电池容量

c++ - 具有多个网络接口(interface)的计算机上的 gethostname

c++ - clang 编译器卡在 Windows 上

c++ - 如何在 C++ 中按名称获取进程句柄?

windows - 两个DC是否可以共享一个GDI对象(画笔、笔等)?

c# - Azure Function App-使用 dll 通过 functionB 调用 functionA

dll - 2017 年 2 月 15 日之后,Payflow_dotNET.dll 是否不再适用于 Payflow Pilot 测试端点 pilot-payflowpro.paypal.com