あるグラフィックスを使うWindowsのアプリケーションをテストしていると、あるパソコンでは動くけれど、別のパソコンでは動かなかったりしました。
このアプリケーションですが、起動しないパソコンの上で起動しようとすると、エラーが出る訳でもなく、しばらくマウスカーソルがグルグルしてそっと終わるような感じで、どこでエラーが出ているのか分かりません。
難易度が高そうな問題ですが、原因を調べてみました。
DxDiagを使って調査
今回、起動しないアプリは、グラフィックスを使うアプリケーションだったので、原因は多分、DirectX関連だと思いました。
そこで、まず、DxDiagを使って調べてみます。
DxDiagとは以下のようなDirectX診断ツールです。
DxDiagによって出力されるログを眺めてみました。
すると、以下の事が分かりました。
このグラフィックスアプリが動かないパソコンでは
D3D9 Overlay: Not Supported
このグラフィックスアプリが動くパソコンでは
D3D9 Overlay: Supported
となっているようです。
D3D9とは、マイクロソフトから提供されるDirectX 9のDirect3Dに関するDLLなんでしょうかね。
オーバーレイがサポートされていないってグラフィックスドライバとかの問題だろうか。。。?
Dependency WalkerでDLLの依存関係を調べてみる
今度は、このアプリが使っているDLLの依存関係をDependency Walkerを使って調べてみます。
Dependency Walkerはライブラリの依存関係を調べてくれる便利なツールです。
すると、どうやら、d3dx9_43.dll が不足しているパソコンでは、問題のアプリケーションが動かないことが分かりました。
そこで、このアプリが動かないパソコンで、d3dx9_43.dll が含まれるDirectXを以下のURLからダウンロードして、インストールしてみます。
DirectX エンド ユーザー ランタイム Web インストーラ
インストール後に、C:\Windows\System32 を調べてみると以下の通りになりました。
2006/03/31 13:41 5,516,496 d3dx9d_30.dll
2005/02/05 19:45 3,544,272 d3dx9_24.dll
2005/03/18 17:19 3,823,312 d3dx9_25.dll
2005/05/26 15:34 3,767,504 d3dx9_26.dll
2005/07/22 19:59 3,807,440 d3dx9_27.dll
2005/12/05 18:09 3,815,120 d3dx9_28.dll
2006/02/03 08:43 3,830,992 d3dx9_29.dll
2006/03/31 12:41 3,927,248 d3dx9_30.dll
2006/11/29 13:06 4,398,360 d3dx9_32.dll
2010/05/26 11:41 2,401,112 D3DX9_43.dll
d3dx9_xx.dll っていうファイルが山ほど出来るけど、少しずつバージョンアップしてるってことだろうか。
D3DX9_43.dll がインストールされると、無事にこのグラフィックスアプリケーションが起動するようになりました。
オーバーレイのサポートは関係なかったのかな?
コメント