2014-02-28 94 views
24

RegSvr32.exe發揮註冊一個COM服務器,並獲得下一個退出代碼:RegSvr32退出代碼文檔?

0 - 註冊正確正常DLL COM服務器時

3 - 當嘗試註冊假的DLL COM服務器(重命名爲簡單的文本文件。 DLL

4 - 當嘗試註冊簡單的DLL,而不是COM服務器

問:在哪裏可以找到的所有可能的退出代碼和次官(或非官方的,但良好)的說明eir的意思?

在互聯網上搜索沒有給我結果,所以我發現this topic哪裏寫退出代碼是與Windows系統錯誤代碼相同,但我不明白爲什麼然後當嘗試註冊壞文件,我正在獲取代碼= 3 = ERROR_PATH_NOT_FOUND,以及註冊非COM DLL時 - 4 = ERROR_TOO_MANY_OPEN_FILES? 對我來說,這聽起來不合邏輯。

回答

32

退出代碼沒有記錄。該文件是在這裏:

然而,對於一個版本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的工具太多(例如第三方安裝程序),並且現在修改它爲時已晚。

+2

如果未找到要註冊的二進制文件,則進程返回0,使退出代碼不是非常糟糕不幸的是,作爲成功/失敗指標可靠。 –

12

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。找出每個失敗代碼背後的原因是微不足道的。

1

Ben的答案是正確的,不過,你需要注意的是錯誤代碼3也給出結果,如果

  • 的.DLL找不到
  • 的.DLL被另一個鎖定進程無法讀取
  • 該進程沒有足夠的權限來打開該文件。例如,在需要時(具有特定文件或普通文件放在C盤)

> #define FAIL_LOAD 3 // LoadLibrary Failed

感覺有點模糊,但是調用LoadLibrary旨在爲中提到的DLL具有管理員權限不運行特定的DLL。使用諸如Depends這樣的應用程序,您可以找到所有參考,包括缺少的參考。請注意,缺少的引用並不總是導致錯誤代碼3(在DLL實際上未使用它的情況下)