Windows Server 2008 R2にDLLファイルを登録します
-
13-10-2019 - |
質問
Windows Server 2008 R2にCOM DLLファイルを登録しようとしています。これが私がとった手順です:
- 走る
cmd
管理者として c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll
そのコマンドを実行すると、このエラーが表示されます。
モジュール
temp12.dll
読み込みに失敗しました。バイナリが指定されたパスに保存されていることを確認するか、バイナリまたは依存関係の問題を確認するためにデビューしてください.DLL
ファイル。指定されたモジュールが見つかりませんでした。
Windows 2000で同じDLLファイルを登録することができました。
私も試しました
c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"
そして、私はこのエラーを受けました:
モジュール
c:\tempdl\temp12.dll
ロードされましたが、電話がかかりましたDllRegisterServer
エラーコードで失敗しました0x80040154
. 。この問題の詳細については、検索用語としてエラーコードを使用してオンラインで検索してください
解決
これは、DLL自体が別のCOMサーバーを最初に登録するか、利用できない別のDLLに依存する必要がある場合に得られるエラーです。 regsvr32.exeツールはほとんど機能しません。LoadLibrary()を呼び出して、コマンドライン引数に渡されたDLLをロードします。次に、getProcAddress()でdllのdllregisterServer()dllのエントリポイントを見つけます。そして、それをCOMサーバーに任せるように呼び出して、それ自体を登録します。
何 それ Code Dosはかなり充実していません。しかし、あなたが得た診断は、エラーコードからかなり自明です。何らかの理由で、このCOMサーバーは最初に登録するために別のサーバーを必要とします。エラーメッセージは安っぽいです、それはあなたに伝えません 何 必要な他のサーバー。 COMエラー処理が機能する方法の悲しい副作用。
これをトラブルシューティングするには、SysinternalsのProcmonツールを使用します。レジストリキーregsvr32.exe(実際に:comサーバー)がサーバーを見つけるために開いていることを示します。 CLSIDキーへのアクセスを探します。それはあなたにそれが探しているものをあなたにヒントを与えます。それはまだサーバーDLLを完全に伝えていません。トレースを、動作するマシンから取得したものと比較する必要があります。 InProcServer32キーにはDLLパスがあります。
他のヒント
32ビットバージョンを使用してこのDLLを登録する必要がある場合があります regsvr32.exe
:
c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll
エラー0x80040154は、comのregdb_e_classnotregです。これは、「登録されていない」を意味します。基本的に、comクラスはインストールレジストリで宣言されていません。
DLLを登録しようとしたときにこのエラーが発生した場合、このDLLの登録コードがインスタンス化しようとしている可能性があります 別 このインストールで登録されているか登録されていないcomサーバー(dllまたはexe)。
元のDLLソースにアクセスできない場合は、sysinternal'sを使用することをお勧めします プロセスモニター COMレジストリルックアップを追跡するツール(よりシンプルなRegmonツールがありますが、機能しなくなる可能性があります)。
作業プロセス(こちら:regsvr32.exe)にフィルターを配置して、興味深いもののみをキャプチャする必要があります。次に、hkey_classes_root [aでクエリを探す必要があります。 progid, 、文字列]失敗する(たとえば、name_not_foundエラーで)、またはhkey_classes_root clsid [guid]のクエリが失敗します。
PS:残念ながら、完全に機能するWindowsシステムで失敗しているように見える多くのことがあるかもしれないので、すべてのエラーを注意深く調査する必要があります。幸運を :-)
Windows Server 2008 R2にActiveX(OCX)を登録しているときに同様の問題を発見しました。これを解決するために使用しました http://www.chestysoft.com/dllregsvr/default.asp ツール。私のOCXに依存関係の問題があるので、「モジュールTEMP12.DLLがロードできない」を取得しています。バイナリが指定されたパスに保存されていることを確認するか、バイナリまたは依存した.DLLファイルの問題を確認するためにデビューします。指定されたモジュールは「エラーメッセージ」を見つけることができませんでした。このツールでOCXを登録しようとすると、OCXが依存関係を持っているか、成功メッセージが表示される場合、メッセージをプロンプトします。MFC70.DLLとMSVCR70.DLL依存関係のメッセージを受け取りました。 : windowsとそのdone.ocxを登録した後、私はWindows Server 2008 R2 64ビットマシンで32ビットバージョンのChestySoftツール(DLLEGSVR.EXE)を使用しました。
- たぶん、Microsoft VisualC ++再配布可能なパッケージはターゲットマシンにインストールされていません(または間違ったバージョンがあります)Microsoft Visual C ++再配布可能なパッケージをダウンロードします
- 多分あなたはリリース構成で.dllを構築していません(ただし、代わりにデバッグで)http://www.davidlenihan.com/2008/01/choosoing_the_correct_cc_runtim.html
このKBの記事で説明されているように、COMオブジェクトがATLを使用している場合は、ATLをインストールする必要がある場合があります。
http://support.microsoft.com/kb/201191
これらのライブラリは、おそらく正しいバージョンを確保するために開発者から提供する必要があります。
これが起こらなければならないことです。
登録するDLLをコピーする必要があります:c: windows syswow64
次に、[実行]ダイアログで、これを入力してください。C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll
そして、あなたはメッセージを受け取ります:
C: Windows System32 yourdll.dllのdllregisterServerが成功しました。
regsvr32へのフルパスが必要なので、%windir $ system32 regsvr32 <*。dll>