正常系ならだいたい動くのだけど、世の中に出すためには異常系のフローも想定しておかないといけない。
その一つがiTunesがインストールされていないときどうするか。
C#でiTunesLibというライブラリをインポートするとiTunesCOMが簡単に使える。簡単に使えるのだが・・・COMをそのまま使うのとちょっとやり方が違ってこの異常系をあと回しにしていた。
C++でCOMを使うなら話は簡単で、CoCreateInstaceが失敗すればiTunesCOMがない。つまりiTunesがインストールされていないと判断してよい。あるいは特定の機能が使えるかどうかの判定にQueryInterfaceが成功するか否かで判別することもよくあるだろう。
C#その変どうするのかがよくわかっていなかった。ぐぐるよりもまずは動きを見てみようと、OLE ViewerでiTunesLibのTypeLibraryをみてpathがiTunes.exeになっていることを確認し、iTunes.exeをリネームして実行してみた。
すると、iTunesAppClassクラスをnewするところでSystem.IO.FIleNotFoundExecptionが発生した。メッセージは「CLSID {DC0C2640-1415-4644-875C-6F4D769839BA} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80070002」だった。
とりあえず、iTunesAppClassのnewのところで捕まえれば良さそうだ。QueryInstafaceの件は単純にcastした結果で見れば良いのだろうか。ない場合はnullなのか例外が発生するのかは今は確かめることができないのでわからない。