.NETからIE(SHDoc.InternetExplorer)を操作するアプリを保守してのだが、時々下記のようなエラーが出ることがある。

起動されたオブジェクトはクライアントから切断されました。 (HRESULT からの例外: 0x80010108 (RPC_E_DISCONNECTED))

毎回出るわけじゃないし、開発環境だと再現しないから困ってたのだが、何となく原因ぽいものを発見したのでメモ。

原因(かも)

原因はIE表示後に実行されているjavaScriptかも。

推測ばかりだけど、たぶんjavaScript実行中はIEに対してのアクセスが禁止されていて、切り離されたような状態になってるのかな。

ネットワークが混み合ってるとjavaScriptのレスポンスが悪くなってロック時間が長くなり、問題のエラーが出やすくなる。

解決策

IE側をどうにかできればいいのかもしれないけど、立場上そっちはいじれないのでアプリ側で対応。

やったことはInternetExplorerクラスを継承して、使ってるメソッドやプロパティをオーバーライド。継承した処理内ではtry〜catchを定義して複数回値の取得に挑戦する。

というかなり暴力的なコーディング(笑)

しばらく動かして様子を見ることにします。