首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegSvr32退出代码文档?

RegSvr32退出代码文档?
EN

Stack Overflow用户
提问于 2014-02-28 19:46:33
回答 3查看 24.8K关注 0票数 31

我使用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?对我来说,这听起来并不符合逻辑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-28 20:39:19

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

但是,版本REGSVR32.EXE的源代码随Visual Studio 2008一起提供。这使其版本为4.0.0,因此与windows随附的版本6不同。

  • http://msdn.microsoft.com/en-us/library/ms177531(v=vs.90).aspx

快速浏览一下会显示以下内容:

代码语言:javascript
复制
#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?

票数 41
EN

Stack Overflow用户

发布于 2014-02-28 20:16:43

Visual Studio曾经附带了一个MFC示例,它实际上是RegSvr32实用程序的源代码,我记得通过它来获取退出代码:

代码语言:javascript
复制
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中提取的。找出每个失败代码背后的原因是微不足道的。

票数 14
EN

Stack Overflow用户

发布于 2017-04-05 22:57:14

Ben的答案是正确的,但是,请注意,如果出现以下情况,也会给出错误代码3

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

#define FAIL_LOAD 3 // LoadLibrary Failed

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22094309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档