Windows のバイナリファイルの依存関係を調べる。
先日の regsvr32.exe の問題で、レジストリの登録に失敗したバイナリファイル(*.dll)が依存しているファイルが何なのか知りたくなりました。
rms-099.hatenablog.jp
少し調べてみた結果、Visual Studio に付属している dumpbin.exe を使えば良いことが分かりました。
現時点の最新版は Visual Studio 2015 みたいですが、無料版の Community でも dumpbin.exe はインストールできます。
ダウンロードした vs_community.exe を実行します。
↑「カスタム」を選択して「次へ」を押します。
↑自分は幾つか選択しましたが、おそらく「Visual C++ 2015 用の共通ツール」に dumpbin.exe が含まれていると思います。「次へ」を押します。
↑「インストール」を押します。回線状況次第ですが、30分ぐらい待つと思います。
↑自分の環境では警告メッセージが表示されてしまいましたが、これでインストールは完了です。
続いて、dumpbin.exe をコマンドプロンプトで使用するための環境設定です。
と言っても、下記の2つのパスを環境変数 PATH に追加するだけです。
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin"
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_arm"
次に、コマンドプロンプトを管理者モードで起動します。
色んな起動方法があると思いますけど、[Windows ロゴ]+[X]キーでコンテキストメニューを表示して、「コマンドプロンプト(管理者)」を選ぶやり方が一番楽なんじゃないかと。
最後に、コマンドプロンプトで下記のようなコマンドを実行すれば、依存関係が分かるはずです。
dumpbin /dependents {調査対象のファイルの名前またはパス}
2015/10/10 追記:
dumpbin.exe を使うと、こんなこともできるようです。
ただし自分の場合、mspdbcore.dll をロードできないというエラーが出て上手く行きませんでした。
mspdbcore.dll ファイルは"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin"にあって、パスも通しているんですけど、mspdbcore.dll ファイル自身を引数に渡しても駄目でした。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin>dumpbin /headers mspdbcore.dll
Microsoft (R) COFF/PE Dumper Version 14.00.23026.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file mspdbcore.dll
PE signature found
File Type: DLL
LINK : fatal error LNK1171: unable to load mspdbcore.dll (error code: 193)
まあ、今直ぐに必要という訳ではないので、それまで放置します。
参考資料:
2016年1月4日追記
他の調べごとをしていてたまたま気付いたんですが、Dependency Walker というツールでも依存関係を把握することができます。これだと、わざわざ Visual Studio をインストールする必要はないし、再帰的な依存関係も直ぐに知ることができて便利です。