【问题标题】:RegSvr32 exit codes documentation?RegSvr32 退出代码文档?
【发布时间】:2014-04-01 09:43:04
【问题描述】:

我用RegSvr32.exe注册了一个COM服务器并得到了下一个退出代码:

0 - 当注册正常的DLL Com Server时

3 - 尝试注册假 DLL Com 服务器时(将简单文本文件重命名为 .DLL

4 - 尝试注册简单 DLL 时,而不是 Com Server

问题:我在哪里可以找到所有可能的退出代码及其含义的官方(或非官方但好的)描述?

在互联网上搜索没有给我结果,所以我发现this topic 哪里写了退出代码与 Windows 系统错误代码相同,但我不明白为什么当我尝试注册坏文件时获取代码=3=ERROR_PATH_NOT_FOUND,注册非COM DLL时-4=ERROR_TOO_MANY_OPEN_FILES? 对我来说,这听起来不合逻辑。

【问题讨论】:

    标签: windows winapi dll com regsvr32


    【解决方案1】:

    没有记录退出代码。文档在这里:

    但是,版本 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?

    【讨论】:

    • 如果未找到要注册的二进制文件,则该过程返回 0 ,不幸的是,退出代码作为成功/失败指示器并不是非常可靠。
    【解决方案2】:

    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
    

    我找不到示例,但如果我用 Google 搜索我提取的内容,就会发现:http://web.archive.org/web/20140803013714/http://support.microsoft.com:80/kb/207132 有匹配的代码,所以看起来 KB 演示代码也是取自 RegSvr。找出每个失败代码背后的原因很简单。

    【讨论】:

      【解决方案3】:

      Ben 的回答是正确的,不过,请注意 error code 3 如果

      • 找不到 .DLL
      • .DLL 被另一个进程锁定,无法读取
      • 进程没有足够的权限打开文件。例如,在需要时不以管理员权限运行(使用 C 盘上的特定文件或公共文件)

      > #define FAIL_LOAD 3 // LoadLibrary Failed

      感觉有点模糊,但 LoadLibrary 是指在特定 DLL 中引用的 DLL。使用Depends 等应用程序,您可以找到所有参考资料,包括缺失的参考资料。请注意,缺少引用并不总是导致错误代码 3(在 DLL 实际上没有使用它的情况下)

      【讨论】:

        猜你喜欢
        • 2011-10-05
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多