FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
IEを操作するアプリケーションを作成する時は、MSHTMLを参照設定してプログラムします。
そして作成した実行ファイルを配布しますが、PC環境によっては以下の例外が発生して、動作しない場合があります。

System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

参照設定しているMSHTMLの実態は「Microsoft.mshtml.dll」なのですが、どうやらOSに標準では入っていない可能性があります。
(新規にWindows7 32bit IE9の環境を構築しましたが、ありませんでした)
PCに.NETの開発環境(VisualStudio、.NET SDK)やOfficeがインストールされていると、入っているようです。

ユーザにSDKやOfficeをインストールしてもらうのは敷居が高いので、それ以外では次の方法で回避できるようです。
・「Microsoft.mshtml.dll」を実行ファイルと同一の場所に格納する。(exeと一緒に配布)
 →今のところこれで問題なく動作しています。
・Type.InvokeMemberメソッドを利用して動作するようにプログラムを書き換える事で、DLLは使わない
 →私は未確認ですが、実施されている方がいらっしゃいます。

参考
http://blog.rocaz.net/2004/07/76.html
http://d.hatena.ne.jp/wave1008/20080813
http://d.hatena.ne.jp/mikihiro/20110717/p1
http://bbs.wankuma.com/index.cgi?mode=al2&namber=21847&KLOG=42

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
スポンサーサイト



前回に引き続き、IE8からIE9に変更した際の、おかしな点とその対策です。

・複数のタブを開いてIE制御している場合に、「objIE.Document.XXX」のようにプロパティやメソッドにアクセスすると、おかしな動作をする。(例外(0x800A01B6)が発生したり、IDがあるのにgetElementByIDで見つからなかったり)
 →「DirectCast(objIE.Document, mshtml.HTMLDocument).XXX」とすれば正常に動作。
  ただし.NETFramework4だと、mshtml.HTMLDocumentを使うとNo-Piaのコンパイルエラーが発生する。
  このエラーの取り方は不明。.NETFramework3.5にすればエラーは発生しない。

IE9を操作する場合は、Documentへのアクセスは基本的にはキャストして使うほうが良さそうです。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
VB.NETでIEを操作するプログラムを組んでいますが、
IE8だと正常に操作できるものが、IE9だと操作に失敗する事があります。

ちゃんとした検証は行なっていませんが、今のところ以下のものがありました。

・radioボタンのチェック処理
 IE8だと「XXX.checked = True」で上手くいっていたものが、
 IE9だと「XXX.click()」にしないと動かない。

・Documentからエレメント一覧を参照すると、も抽出される
 「For Each tmp As mshtml.IHTMLElement In objIe.Document.all」
 でエレメントを1つずつ参照すると、もエレメントとして抽出されるので、
 対応が必要な場合がある。

・複数のタブでURLを表示した場合に、最初のタブへのアクセスには成功するが、
 2つ目以降のタブにアクセスすると、一部Documentのプロパティ参照で
 「NotSupportedException: HRESULT からの例外: 0x800A01B6」の例外が発生する。
 今のところ対処方法は不明。

他にもあると思うので、IE9でのプログラムは要注意ですね。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング