オートメーションエラーを解決するためにはどうすればいいのでしょうか?


困った君  2013-02-12 04:17:06  No: 103402

windows7上で、VB6のアプリを起動させていてます。
そのVB6のアプリから様々なURLを起動させています。
タイミングは分からないのですが、
そのVB6のアプリから下記のエラーメッセージが表示されることがあります。

実行時エラー'-2147023706(800704a6)
オートメーションエラーです。
システムのシャットダウンは既にスケジュールされています。

この場合のオートメーションエラーはどのようなものでしょうか?
どうすれば解決できますでしょうか?
調査の方法などでもアドバイス頂けると助かります。
よろしくお願いします。


魔界の仮面弁士  2013-02-12 08:30:49  No: 103403

CreateObject("InternetExplorer.Application") を呼び出していますか?

私は未経験ゆえ詳細は分かりませんが、国内外の他の掲示板等で
見た限りでは、以前の IE (またはそのアドイン)が終了するまでに
時間がかかっていた場合などに発生することが多いようだ……という
推測や、あるいは IE終了後も VB6 からインスタンスを解放せずに
放置していた状態で、Windows がスリープ状態から復帰した場合に
発生してしまうといった報告が寄せられているようです。

ということはもしかしたら、IE がユーザー操作等で終了されたときに
操作中の IE を解放することで、改善できるかも知れません(自信無し)。

なお、IEの終了は OnQuit イベントで取得できます。
http://msdn.microsoft.com/en-us/library/aa768340.aspx
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/events/onquit.asp


困った君  2013-02-13 16:27:58  No: 103404

返信ありがとうございます。
なるほど、IEを開放できていないことは考えられますね。
IEの終了は試してみます。

CreateObject("InternetExplorer.Application") を呼び出しています。
ただその関数で作り出したオブジェクトを開放しているつもりですが、
下記の方法では開放できていないでしょうか?

Object = CreateObject("InternetExplorer.Application")
Object = Nothing

よろしくお願いします。


魔界の仮面弁士  2013-02-14 13:12:55  No: 103405

Set 句が無いとか、変数名が予約語になっているという点はさておき。
Nothing代入のコードは、「どのタイミングで」呼び出していますか?

(1)IEを生成後、IE は起動させたままで Nothing 代入。
(2)IEを生成後、Quit メソッドで VB6 側から終了させた後での Nothing。
(3)ユーザーが IE を閉じたときに、VB6 側の変数に Nothing を代入する。
(4)Webサイト上で window.close() などで閉じられたときに Nothing 代入する。

今回問題としているのは 3 や 4 のパターンを忘れていないか、ということです。
(厳密に言えば、Nothing の代入と解放は必ずしもイコールではないのですが)

IE に限った話では無いですが、対象のアプリが終了しているのに、
そのオブジェクトへの参照を VB6 側で持ち続けていた場合、そのまま
そのオブジェクトのプロパティやメソッドを呼び出すと問題を生じるため、
それを避けるために、IE の終了イベントを利用するというのが先の案です。

特に IE7 以降では、ウィンドウ管理の方法が変わってきたようですしね。

---
>> 操作中の IE を解放することで、改善できるかも知れません(自信無し)。
>  なるほど、IEを開放できていないことは考えられますね。

開放は、自身が管理している資源や制限を開け放ち、自由に出入りさせること。
図書館の一般カイホウ、校庭の一時カイホウ、通信ポートのカイホウなど。Open。

解放は、束縛を解いて自由にすること/管理資源の所有権を破棄し解き放つこと。
人質のカイホウ、ストレスからのカイホウなど。Release。


困った君  2013-03-30 19:06:01  No: 103406

1行目:Set ObjectIe = CreateObject("InternetExplorer.Application")
2行目:ObjectIe = Nothing

では、1行目でオートメーションエラーがでていましたが、
下記のように変更すると、エラーがでなくなりました。

1行目:Set ObjectIe = CreateObject("InternetExplorer.Application")
2行目:Set ObjectIe = Nothing

なぜエラーが解決したのかが分かりませんので、
他に何の影響があるのかが分かりません。
なにかわかる方がいらっしゃいましたら、ご教授いただけないでしょうか?


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加