RegSvr32退出代码文档?

我玩RegSvr32.exe注册一个COM服务器,并获得下一个退出代码:

0 – 正确注册正常的DLL Com服务器

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

4 – 当尝试注册简单的DLL,而不是通讯服务器

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

search在互联网上没有给我的结果,所以我发现这个主题写在退出代码是一样的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. 

阅读源代码后发现,在任何情况下,它都不会返回上面提到的其他代码,成功则返回0,这证明它与Windows不一样。

我怀疑返回代码的区别是,如果它达到GetProcAddress,那么它会从它调用的函数返回退出代码,而不是总是返回5。

理想情况下,他们会使用GetLastError来获得更有用的退出代码,但是我怀疑有太多依赖于退出代码2-4的工具(例如第三方安装程序),现在要改变它已经太迟了。

Visual Studio用于附带一个实际上是RegSvr32实用程序的源代码的MFC示例,并且记得通过该示例收集退出代码:

 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 : //support.microsoft.com/kb/207132其中有匹配的代码,所以它看起来像KB演示代码也取自RegSvr 。 找出每个失败代码背后的原因是微不足道的。

本的答案是正确的,但是,请注意,如果错误代码3也给出了结果

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

> #define FAIL_LOAD 3 // LoadLibrary Failed

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