RegSvr32.exe
COMサーバーを登録し、次の終了コードを取得します。
0
-適切に登録する場合DLL Com Server
3
-偽の登録を試みるときDLL Com Server(.DLLに名前が変更された単純なテキストファイル)
4
-Com Serverではなく、単純なDLLを登録しようとしたとき
質問:可能なすべての終了コードとその意味の公式(または非公式ですが良い)の説明はどこにありますか?
SO見つけました このトピック 終了コードはWindowsシステムエラーコードと同じであると書かれていますが、不正なファイルを登録しようとすると、コード= 3
= ERROR_PATH_NOT_FOUND
、および非COM DLL-4
= ERROR_TOO_MANY_OPEN_FILES
?私にとっては論理的に聞こえません。
終了コードは文書化されていません。ドキュメントは次のとおりです。
ただし、バージョン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.
ソースコードを読むと、どのような状況でも上記以外のコードが返され、成功した場合はゼロが返されることが示唆されます。
戻りコードの違いは、GetProcAddressに達すると、常に5を返すのではなく、呼び出す関数から終了コードを返すことだと思われます。
理想的には、より便利な終了コードを取得するためにGetLastErrorを使用しますが、現在は終了コード2〜4に依存するツール(サードパーティのインストールプログラムなど)が多すぎて、変更するには遅すぎます。
MSDNのRaymond Chenのブログの さまざまなregsvr32終了コードの意味 も参照してください。
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が実際にそれを使用しなかった場合)