問題
アプリケーションが現在の環境(Windows10)で起動しませんでした。エラーメッセージも表示されず終了しており、ソースコードも持っていなかったため何が悪いか分かりませんでした。そこで、ダンプファイルを利用した解析を行いました。
環境
Windows10
ダンプファイルの出力設定
Applicationがclashした際に、ダンプファイルを出力する設定を行いました。
以下のAdobeのサイトを参考にしました。丁寧に書かれているので分かりやすいです。
WIndows MachineでClash dampを作成する方法
ダンプファイルの解析
出力されたファイルをWindbg
を使用して解析します。WindbgはWindowsのデバッガーです。ダンプファイルの解析やアプリにアタッチしてリアルタイム解析することができます。また、Kernel modeとしてwindowsの深い部分も調べることができます。x64とx86がありますが、今回は32bitアプリケーションであったためx86の方を使用しました。
WindbgでDumpファイルを開き、!Analyze -v
コマンドで解析を行うと以下の結果が表示されました。
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
DEBUG_FLR_EXCEPTION_CODE(80040154) and the ".exr -1" ExceptionCode(e0434352) don't match
KEY_VALUES_STRING: 1
.
.
.
Key : Analysis.Memory.CommitPeak.Mb
Value: 296
Key : CLR.BuiltBy
Value: NET48REL1
Key : CLR.Engine
Value: CLR
Key : CLR.Exception.System.Runtime.InteropServices.COMException._message
Value: CLSID {AE784C6C-0155-11D3-B24B-0000F879F93B} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154 クラスが登録されていません (HRESULT からの例外:0x80040154 (REGDB_E_CLASSNOTREG))。
.
.
.
以上の結果から特定のCOMコンポーネントが足りず、起動できないことが分かりました。
COM(Component Object Model)はソフトの機能を外部からアクセスして使用する仕組みのことです。
ネットで調べた結果、特定のソフトが必要なことがわかりました。このソフトをインストールするとアプリケーションは正常に起動しました。
開発環境にはインストールされているが、ユーザー環境にはされていないソフトウェアに依存してしまうことはままありますね。
まとめ
アプリケーションが起動しない場合、Dumpファイルを解析することで解決できる場合があります。