情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(3) このエントリーを含むはてなブックマーク

前回は、DLLが参照しているDLLの一覧をdumpbin.exeを利用して取得しました。

そのDLLは、

  • KERNEL32.dll
  • GDI32.dll
  • ADVAPI32.dll
  • ole32.dll
  • OLEAUT32.dll
  • SHLWAPI32.dll
  • MSVCR70.dll
  • RPCRT4.dll
であり、この中に問題があるDLLが含まれていることになります(前々回参照)。

では、ささっと調べてみましょう。基本的な調べ型は、まずWeb検索ですが、今回は、問題があるDLLをまず1つ見つければいいので、あらっぽく調べます。

system32フォルダ

system32フォルダ内にDLLがあれば、とりあえず利用可能になっていると考えられます。 実際、

  • MSVCR70.dll
以外はすべてsystem32フォルダ内部にありました。

MSVCR70.dll

msvcr70.dllは、Visual C++ version 7.0 用のdllです。ちょっと古いです。

msvcr70.dllは、BANG.ROや、DLL-files.comNODEVICE.jpなど、多くのサイトからダウンロードできます。信頼できるサイトからダウンロードしましょう。また、普通はソフトウェアに付属しています。

たねあかし

実は、RealThumb.dllのreadme.txtには、

---------------
Troubleshooting
---------------
When installing the program, you may get the message "LoadLibrary("RealThumb.dll") failed - The specified module could not be found." This message means that the computer is missing a DLL, most likely MSVCR70.DLL (Microsoft Visual C++ 7.0 Runtime Library). This file should be in C:\WINDOWS\SYSTEM32. If you do not already have it, you can download a copy from . Copy it to the directory, then try installing again as above.
と書かれており、msvcr70.dllをsystem32フォルダにコピーして利用するように書かれています。今回の記事では、あえてこのような表記がなかったもしくは見つけられなかった場合などを含めて、前々回紹介したようなエラーに出くわしたときにどうするべきかを記述しました。

MSVCR70.dllをSystem32フォルダへ

いよいよ終盤。MSVCR70.dllをDownloadしたら、System32フォルダへコピーします。

そして、もう一度

C:\Wiondows\system32>regsvr32 RealThumb.dll
を実行すると、
RealThumb.dll の DllRegisterServer は成功しました。
と表示されて、無事成功しました。めでたしめでたし。

実は

実は、regsvr32的には成功したのですが、サムネイル表示がされませんでした。残念。

おわりに

今回は記事3回に渡って、RealThumb.dllを題材に、dllが利用するdllを調べる方法について説明しました。dllだけではなく、exeが利用するdllも同様に調べられるので、なにか問題が発生したときには、ぜひ試してみてください。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Windowsデバッグの極意 ツールを使いこなして、バグハント!
Debug Hacks -デバッグを極めるテクニック&ツール

スポンサーサイト



Windows | コメント:0 | トラックバック:0 | 編集

regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(2) このエントリーを含むはてなブックマーク

今回は、「regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(1)」の続きで、DLLが利用しているDLLを調べる方法についてとりあげます。

詳細は前回の記事参照と言うことで、今回はとにかくRealThumb.dllが参照しているdllを特定することにします。

dumpbin.exe

今回は、dumpbin.exeを利用します。Visual Studioに付属するツールで、Visual Studio の無償版に付属するかは不明です。

dumpbin.exeは、

"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe"
(Windows Vista SP2, Visual Studio 2008)
にあります。

dumpbin.exeをコマンドプロンプトから実行してみる

では、実行してみましょう。コマンドプロンプトから、とりあえず

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe /?
と実行して、dumpbin.exeのオプション一覧の参照しようとすると、

link.exe - コンポーネントが見つかりません

mspdb80.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。

というエラーが発生した後、Microsoft Incremental Linkerは動作を停止しましたと表示されてしまい、結果としてdumpbin.exeが実行できません

dumpbin.exeの正しい利用方法

このように、dumpbin.exeは、コマンドプロンプトから実行しようとすると、失敗します。

そのため、コマンドプロンプトからではなく、Visual Studio に付属するVisual Studio 用のコマンドプロンプトを利用してください。すべてのプログラム>Microsoft Visual Studio 2008>Tools>Visual Studio 2008 コマンドプロンプトから起動できます。

ここから余談。下の「DLLが参照しているDLLを調べる」へどうぞ。

たとえば、Visual Studio 2008だと、「Visual Studio 2008 コマンド プロンプト」は、

C:\Windows\System32\cmd.exe
にあります。

お気づきの通り、実態は普通のコマンドプロンプトです。実は、スタートメニューのすべてのプログラムからMicrosoft Visual Studio 2008のフォルダのToolsフォルダにある「Visual Studio 2008 コマンドプロンプト」から起動できるのですが、実際は、

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
というコマンドでコマンドプロンプトを起動しているに過ぎません%comspec%は実行ファイルである「C:\Windows\system32\cmd.exe」に展開されます。

ここで、cmd.exeの/kオプションは、続くダブルクオテーションで与えられた引数をコマンドとして実行するオプションです。

つまりこのコマンドでは、vcvarsall.batがx86という引数で実行されます。

vcvarsall.batの内部では今回の引数x86だけではなく、amd64、x64、ia64、x86_amd64、x86_ia64を引数として受け付け、引数に応じたbatファイルを呼び出します。

x86の場合は、vcvars32.batC:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.batを呼び出し、さらにvcvars32.batがvsvars32.batC:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.batを呼び出します。

このvsvars32.batの内部で必要な変数を登録しています。変数が登録されたおかげでdumpbin.exeが正しく動くcmd.exeが起動されているわけですね。

ちょっと余談でしたが、とにかくdumpbin.exeを利用するときは、Visual Studio コマンドプロンプトから実行してください。

DLLが参照しているDLLを調べる

ついに、本題です。前述の通り、Visual Studio 2008 コマンドプロンプトを起動して、

C:\(略)\VC>bin\dumpbin.exe /dependents C:\Windows\system32\RealThumb.dll
と実行します。すると、
Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\system32\RealThumb.dll

File Type: DLL

  Image has the following dependencies:

    KERNEL32.dll
    USER32.dll
    GDI32.dll
    ADVAPI32.dll
    ole32.dll
    OLEAUT32.dll
    SHLWAPI.dll
    MSVCR70.dll
    RPCRT4.dll

  Summary

        1000 .data
        1000 .orpc
        3000 .rdata
        1000 .reloc
        4000 .rsrc
        8000 .text
と表示されて、
  • KERNEL32.dll
  • GDI32.dll
  • ADVAPI32.dll
  • ole32.dll
  • OLEAUT32.dll
  • SHLWAPI32.dll
  • MSVCR70.dll
  • RPCRT4.dll
が、RealThumb.dllが参照しているDLLということが分かりました。

次回は、このDLLたちの正体を探ります。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Windowsデバッグの極意 ツールを使いこなして、バグハント!
Debug Hacks -デバッグを極めるテクニック&ツール

Visual Studio | コメント:0 | トラックバック:0 | 編集

regsvr32の「依存.DLLファイルに問題がないかを調べてください」について(1) このエントリーを含むはてなブックマーク

Real Playerのサムネイルを表示させるために、RealThumb.dllを利用することに。この方法がいいかは別として、とりあえず、以下報告。最重要トピックは、DLLが利用・参照しているDLLを特定する方法です.rmファイルのサムネイル表示自体には失敗してます

インストールはregsvr32コマンド

このRealThumb.dllは、まず「C:\Windows\system32」フォルダにRealThumb.dllをコピーしてから、「管理者として実行」で起動したコマンドプロンプト上で、

"C:\Windows\system32>regsvr32 RealThumb.dll"
を実行することで利用可能になります。

モジュール "RealThumb.dll" の読み込みに失敗しました。エラー

しかし、そのように実行したところ、

RegSvr32

モジュール "RealThumb.dll" の読み込みに失敗しました。

バイナリが指定されたパスに格納されていることを確認するか、バイナリまたは依存 .DLL ファイルに問題がないかを調べてください。

指定されたモジュールが見つかりません。

というエラーが表示されて失敗してしまいます。

指定されたモジュールが何だかわからない

このエラーの本文を読むと、「指定されたモジュールが見つかりません。」だそうです。しかし、たしかにRealThumb.dllはsystem32フォルダに配置されているので問題ないはずです。

もう一度エラーを読むと、「バイナリまたは依存.DLLファイルに問題がないかを調べてください。」とも書かれています。つまり、RealThumb.dllが利用しているdllに問題があるということです。

利用しているDLLを調べる

ここが本題です。

利用しているdllに問題があると指摘されても、実際に何という名前のdllに問題があるのかがさっぱり分からなくては、どうすることもできません。

そこで、RealThumb.dllが利用しているdllを調べることにします

次回へ続く

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Windowsデバッグの極意 ツールを使いこなして、バグハント!
Debug Hacks -デバッグを極めるテクニック&ツール

Windows | コメント:0 | トラックバック:0 | 編集
 | HOME |