VB6のScreen.MousePointerについての原因と対策

このQ&Aのポイント
  • VB6で作ったexeをバッチから起動して、データ連携を行っているシステムがあります。先日、このバッチが実行中のままとなり、原因を調査しています。
  • ログの内容から、どの辺で止まっているか調査したところ、Screen.MousePointer = vbDefaultという記述の箇所が怪しいのではないかと思っています。
  • この処理が実行中のままとなるような要因は考えられますでしょうか?5年ほど稼働しているシステムでここ1か月間に2回程度発生しました。再現性が不明で、実行中のままであるバッチを強制終了させて、なにも変えずにリトライすると数分で正常終了します。普段、実行時間は3分程度ですが、実行中のままの場合、3時間待っても終了しませんでした。(3時間の時点で強制終了しました。)
回答を見る
  • ベストアンサー

VB6のScreen.MousePointer

VB6のScreen.MousePointerについて VB6で作ったexeをバッチから起動して、データ連携を行っている システムがあります。 先日、このバッチが実行中のままとなり、原因を調査しています。 ログの内容から、どの辺で止まっているか調査したところ、 Screen.MousePointer = vbDefault という記述の箇所が怪しいのではないかと思っています。 この処理が実行中のままとなるような要因は考えられますでしょうか? ちなみに5年ほど稼働しているシステムでここ1か月間に2回程度発生しました。 再現性が不明で、実行中のままであるバッチを強制終了させて、なにも変えずに リトライすると数分で正常終了します。 普段、実行時間は3分程度ですが、実行中のままの場合、3時間待っても終了しません でした。(3時間の時点で強制終了しました。) 当exeの処理内容は、自サーバから相手サーバへODBCによる接続を行い、相手サーバ側の データベースから抽出したデータをCSVに編集して自サーバへ出力するという仕組みです。 自サーバはWindows Server2008 R2です。 (そもそもVB6のexeは動作保障範囲外かもしれませんが、 .Net等への変換は今のところ考えていません) 原因として考えられるでしょうか? また記述を削除しても良いのでしょうか? よろしくご回答お願いします。

  • torum
  • お礼率61% (19/31)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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とは無関係に、想定外時に陥る無限ループ などのパターンです。 ------------ 結局・・・ ------------ 「実行中のまま」 というキーワードから →「処理が回り続ける」 →「処理が待機し続ける」 という事なので 「終わらないパターンの再調査」をした方がよいと思います。

関連するQ&A

  • ActiveX → VB を起動するとCreateObjectできない。

    初めまして。 2003Server+IIS6.0の環境でASP内のActiveXからShell関数でvbのexeを実行させる処理を作成しております。 サーバーから直接exeを実行させると正常に動くのですが、Web上からasp→ActiveX→exeを起動させるとテキストに書き込む処理はできるのですが、「CreateObject」文で「ActiveX コンポーネントはオブジェクトを作成できません」というエラーが返ります。 VB内でなぜ「CreateObject」が出来ないのかご存知の方はいますでしょうか。 宜しくお願いいたします。

  • VBからサーバーアップ&実行

    次のようなプログラムを作成しようとしてます。 ・インターフェースはVB ・VBでのボタンを押すとプログラム開始 ・開始すると、サーバーに指定されたプログラムをアップ ・サーバー上でそのプログラムを実行、結果をテキストファイルへ ・サーバーでのプログラム終了後、VB上で結果を表示 この中で、バッチファイルをVB上で呼び出せばサーバーにアップはできるのではないか・・・と思ってますが、アップの後実行する方法がわかりません。何か意見がありましたら教えてください

  • shell関数について

    毎度、お世話になっています。 現在、C言語で書いた複数のプログラムをBATファイルで処理するように記述しています。VBでその制御を行っているのですが、VBの処理手順として子フォーム(textあり)にデータを書きこんで、ボタンを押すとshellでbatファイルを起動し、バッチファイルの結果として、あるディレクトリにresult.txtが作成され、VBで他の子フォームに読みとらせようとしているのですが、shellだと、実行の終了を待たずに次にいってしまうので、そのバッチファイルの実行処理が終わらず、result.txtの内容を読み込むことができません。 待つようにするにはどうすればよいのでしょうか? ちなみにVBは一週間前にはじめて、自分でも調べてなんとか作ろうとしたのですが、時間がないため、ここに質問させていただきました。なるべく簡単なアルゴリズムで、よろしくお願いします。 VBのプロセス    テキストにデータを書き込む      ↓     ボタン   →        テキストの内容を*.txtとして保存                        ↓                      バッチファイル起動    ↓(ここで右の実行を待たない     ↓     ので読み込むことができない)   C言語で書かれたプログラム実行                        ↓ result.txtを    ←        結果としてresult.txtが出来上がる 読み込んで表示     

  • VBで作成した実行形式をASPを用いて実行したい

    VBで作成した標準EXEをWEBサーバ上で実行しようと考えていまして現在苦悩しています。 BASP21を使用してEXEを実行したところ、PROCESSには起動したEXEが表示されているので実行はされてはいるのですが処理が適切になされていない状況です。 VBで作成した実行形式をASPを用いて実行する場合には、何か方法があるのでしょうか? よろしくおねがいします。 [動作環境] OS:Windows2000 ServerSP3 ブラウザー:IE6.0 VB6.0+SP5 実行形式の処理内容 SUB MAINを起動関数に設定し、OPEN関数でFILE書き込みを行う。 なお、このファイルはサーバー上に作成される。

  • 「.exe(fortranで作成したもの)を起動させて文字入力」の自動化ってできますか?

    .exeを立ち上げ,ある文字を入力し,.exeを実行. ということをVBの中で自動的に処理させたいのですが… 流れとしましては,VB画面で, 実行ボタンを押す → 「.exe起動 → .exe画面に文字入力 → .exe実行」 → 終了 です.「」内は表示されず,実行ボタンをおしたら自動的に処理させたい内容です. .exeを表示させずに起動するところまではできるのですが, 次に文字入力の処理ができません... どのように記述すればいいのでしょうか? まったく分からないのでよろしくお願いします!! うまく説明できなくて意味わからなかったら,言ってください...

  • VBがデバッグ時落ちてしまう

    VC6.0でDLLを作成し、VB6.0で呼び出すプログラムを作成しています。 DLLの内容はWindowハンドルを引数にしてそのハンドルを持つWindow上にListboxを作成するというようなものです。(もともとC言語用のDLLだったものをVBで使いまわしています) このプログラムをデバッグ実行し、デバッガ上で停止[実行->終了]とすると、VB6.exeがアプリケーションエラーで落ちてしまいます。(DLLの関数を呼ばない限り大丈夫です) デバッグ実行でも普通に終了(アプリケーションでの終了)であれば正常に終了してくれます。 このままですと、実行時エラーで止まる度にVB6.exeが落ちてしまい非常に不便です。 このような現象で困った方いませんか? 解決策がありましたら教えてください。

  • VB5が起動しない

    VB起動時,vb5.exeアプリケーションエラーのメッセージボックスが表示され,強制終了してしまいます. どうしてでしょうか?

  • VBで作成した実行形式の戻り値を作成したい

    VBで作成した実行形式の戻り値を作成したいと考えています. たとえば,A.exeという実行形式をVBで作成します. このA.exeを別のプロジェクトでshell関数などで起動します. 処理が終了した時に, A.exeの処理が成功した場合に1 A.exeの処理が失敗した場合には0を返すようにしたいと考えています. 可能でしょうか? 環境:Windows2000+SP3 Visual Basic 6.0+SP5

  • バッチ処理後に自動的にウインドウを閉じたい

    初心者です。 以下の記述をしたバッチファイルをして実行していますが、処理終了後にsqlplusのウインドウが開いたままになってしまします。自動的に閉じるにはどの様に対応したらよろしいでしょうか? ご存じの方、よろしくお願いいたします。 sqlplusw.exe mama/mama@mama @\\Mama-server\mama\NEOS\sei\mmw_billview.sql exit

  • DLLの登録をVBで行いたい(VB2005)

    いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。

専門家に質問してみよう