量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

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 をインストールする必要はないし、再帰的な依存関係も直ぐに知ることができて便利です。