我玩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也给出了结果
> #define FAIL_LOAD 3 // LoadLibrary Failed
感觉有点模糊,但LoadLibrary是指特定DLL中引用的DLL。 使用应用程序(如Depends) ,您可以找到所有的引用,包括缺少的引用。 请注意,缺少的引用并不总是导致错误代码3(在DLL实际上不使用它的情况下)