- ベストアンサー
VB6のScreen.MousePointerについての原因と対策
- VB6で作ったexeをバッチから起動して、データ連携を行っているシステムがあります。先日、このバッチが実行中のままとなり、原因を調査しています。
- ログの内容から、どの辺で止まっているか調査したところ、Screen.MousePointer = vbDefaultという記述の箇所が怪しいのではないかと思っています。
- この処理が実行中のままとなるような要因は考えられますでしょうか?5年ほど稼働しているシステムでここ1か月間に2回程度発生しました。再現性が不明で、実行中のままであるバッチを強制終了させて、なにも変えずにリトライすると数分で正常終了します。普段、実行時間は3分程度ですが、実行中のままの場合、3時間待っても終了しませんでした。(3時間の時点で強制終了しました。)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
コード全体を見てみない事には何とも言えませんが、、、 Screen.MousePointer = vbDefault この質問を見た人の多くは、このマウスポインタを変更するだけの処理で「固まるパターンはほぼ無いだろうし、なぜそこだと判断したんだろう?」と思っている人が大半だと思います。 その部分を疑った理由が全く分かりません。 それでも Screen.MousePointer = vbDefault の周辺であるという事だけは間違いないというのであれば、、、 その前後を疑った方がよいと思います。 仮に以下のようなコードがあった場合 ----------------------------------- Private <Sub or Function> メソッド名 On Error Goto エラー処理 Screen.MousePointer = 砂時計マウスポインタ ~メインの「業務処理」~ 終了処理: ~何らかの「終了処理(1)」~ Screen.MousePointer = vbDefault (規定のマウスポインタ) ~何らかの「終了処理(2)」~ Exit <Sub or Function> エラー処理: ~何らかの「エラー処理(1)」~ Goto 終了処理 End <Sub or Function> ----------------------------------- 私の場合は以下の ※業務処理 ※終了処理(1) ※終了処理(2) を疑います。 ------ 追記 ------ また、 >データベースから抽出したデータをCSVに編集して自サーバへ出力するという仕組みです。 とありますが、 ・データベース接続 ・(データベース切断まで繰り返し) ・→データベースからのデータ取得 ・→CSVファイルの作成 ・データベース切断 ・自サーバへ接続 ・自サーバへのCSV転送 ・自サーバへ切断 という流れでしょうか? それと自サーバへのファイル転送はFTPでの転送ですか? WindowsサーバのFTPサーバの機能を利用していると仮定してと、、、 「FTP処理は別EXEを複数キックして転送で、非同期で処理を行い、全ファイルの転送が終了するまで何回もFTPサーバへの接続・切断を繰り返す」みたいな場合、接続/切断が頻繁に行われる事になります。 この接続/切断を高速で繰り返すと、Windowsサーバ側で接続拒否のエラーを発生する場合があります。クライアントにもエラーのステータスが返却されます。 この状況であれば、エラーはサーバ側のイベントログに出力されているはずです。 なぜこのような追記をしたかというと、 「バッチが実行中から終わらない」という状況で想像されるのが ・DBアクセス時のデッドロック ・別EXEキックを行い、そのEXEが終了するまでタイムアウトを考慮せず、永遠に待ち続ける ・FTPとは無関係に、想定外時に陥る無限ループ などのパターンです。 ------------ 結局・・・ ------------ 「実行中のまま」 というキーワードから →「処理が回り続ける」 →「処理が待機し続ける」 という事なので 「終わらないパターンの再調査」をした方がよいと思います。