初めて質問をさせていただきます。
現在VB.Net(VS2015)でWindowsフォームアプリケーションを作成しています。
フォーム上のボタンをクリックするとIEを起動させ、フォームにユーザ名とパスワードを入力して特定のサイトに自動ログインさせるものです。
当該処理部分のコードは下記の通りとなります。
1: Private Sub cmdOpenBrowser_Click(ByVal sender As Object, ByVal e As EventArgs)
2: Dim ObjIE As SHDocVw.InternetExplorer
3:
4: ObjIE = New SHDocVw.InternetExplorer
5: ObjIE.Visible = True
6: ObjIE.Navigate("http://hogehoge.com/")
7:
8: While ObjIE.ReadyState <> 4 Or ObjIE.Busy = True
9: System.Windows.Forms.Application.DoEvents()
10: System.Threading.Thread.Sleep(1000)
11: End While
12:
13: If ObjIE.Document.getElementsByTagName("input").length > 0 Then
14: For Each ObjTag In ObjIE.Document.getElementsByTagName("input")
15: If ObjTag.Type.ToString() = "text" Or ObjTag.Type.ToString() = "email" Then
16: ObjTag.value = "myID"
17: ElseIf ObjTag.Type.ToString() = "password" Then
18: ObjTag.value = "myPassword"
19: End If
20: Next
21:
22: ObjIE.Document.Forms(0).Submit()
23:
24: System.Runtime.InteropServices.Marshal.ReleaseComObject(ObjIE)
25: ObjIE = Nothing
26:
27: GC.Collect()
28: GC.WaitForPendingFinalizers()
29: GC.Collect()
30: End If
31: End Sub
アプリケーションを起動して上記処理を実行すると1回目は必ず成功します。
しかし同じボタンをクリックして2度目以降に実行すると、必ず13行目で例外が発生します。
その際発生する例外は1種類ではなく、今まで試した限りでは下記4種類です。
System.Runtime.InteropServices.COMException
System.NullReferenceException
System.NotSupportedException
System.MissingMemberException
いくつかのサイトで調べてみて以下の事をしてみたのですが、いずれも効果がありませんでした。
・上記処理をスレッド化する
・IEの保護モードを無効にする
また、上記コードの24行目から29行目も調査の結果追記してみたのですが効果なしです。
COMオブジェクトの解放に問題があるのではないかと推測しているのですが、具体的にどのような実装をすればよいのか分からず困っております。
環境は以下の通りです。
・Windows7 Pro(64bit)
・Visual Studio 2015(Community)
・IE11(64bit)
どなたか知見のある方にご教授いただければと思います。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。