none
ApplicationExitイベントハンドラが働かないが、原因がわかりません。 RRS feed

  • 質問

  • こんにちは。VB2008でソフトを作成しています。

    以下のような宣言でアプリケーション終了時の処理を作りました。

    作成後、うまく動作していましたが、なぜか今日動作していないことに気づき、

    原因が分かりません。どなたかヒントをいただけると助かります。

    よろしくお願いします。

    ★追記 5/29
      同じプログラムで、別のパソコン上では正常に動作しました。
    VBの設定で、同機能が有効、無効と違いがでるのでしょうか?

    フォームのLoadイベントハンドラ

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load 'ApplicationExitイベントハンドラを追加

      AddHandler Application.ApplicationExit, AddressOf Application_ApplicationExit End Sub

     'ApplicationExitイベントハンドラ

    Private Sub Application_ApplicationExit(ByVal sender As Object, ByVal e As EventArgs) MessageBox.Show("アプリケーションが終了されます。") 'ApplicationExitイベントハンドラを削除RemoveHandler Application.ApplicationExit, AddressOf Application_ApplicationExit End Sub


    • 編集済み BasicVisual 2012年5月29日 0:06 補足追記
    2012年5月28日 14:01

回答

  • ApplicationExitイベントハンドラの追加を、Application.Runメソッドを呼び出す前に行った場合どうなりますか?
    また、終了時にはMy.Application.Shutdownイベントも使えるようです。

    (参考)
    アプリケーションの開始時または終了時に行う処理を記述する
    http://dobon.net/vb/dotnet/programing/applicationstart.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 山本春海 2012年6月12日 8:22
    • 回答としてマーク 山本春海 2012年6月28日 7:56
    2012年5月29日 2:29
    モデレータ

すべての返信

  • 終了するときの処理はなにも影響しておらず、
    そこに書いたコードだけでうまくいくものといかないものがあるってことですか?
    そうであれば、それぞれのPCの環境を比較するべきだと思います。
    そうではなく、終了するときの処理の有無で変わってくるならば、
    終了するときの処理も明確にしたほうがよいと思います。
    2012年5月29日 0:17
  • ありがとうございます。

    コードは同じで、動作が違うのでPC環境に違いがありそうです。

    VBに関する環境設定は変更してはいないと思っていますが、この機能をON、OFFする設定があればそれを確認してみようかと思いました。もともと動作しなくなったPC環境でも以前は機能していましたので、どう原因を突き止めていけばいいのかお手上げ状態です。

    また、何か、アドバイスございましたら、よろしくお願いします。

    2012年5月29日 0:31
  • > コードは同じで、動作が違うのでPC環境に違いがありそうです。

    その「コード」というのは、
    あなたの最初の投稿にあるようなメッセージボックスを出すだけのコードなのですか?
    それとも何か他の処理もしているものですか(普通はログ書いたりするとおもいますが)?
    というのが私の質問です。
    なぜそれを聞くかというと、どこを根拠にApplicationExitイベントが起きていない、
    という判断をされたのかわからないからです。
    多分、最初の投稿の、超単純なコードで試されたので
    ApplicationExitイベントが起きていないと判断されたのだと思いますが、
    もしそうでないなら他の原因がコード内にありうると思います。
    あと、他のマシンで動いているexeと問題のexeがそもそも同じじゃない、っていうこともありえます。

    > この機能をON、OFFする設定

    どの機能でしょうか。
    シャットダウンモードというのがありましたが、これは関係しているのかな?
    2012年5月29日 1:03
  • アプリケーションの終了の仕方に何か違いはないのでしょうか?
    例えば、アプリケーションを明示的に終了するわけではなくて Windows のシャットダウン時に終了するだとか、VB の IDE 上でデバッグ実行中に [デバッグの停止] で終了させているだとか、他のプロセスによって強制終了させられているとか、何らかの例外が発生したことによって終了しているとか。
    あるいは、そもそも ApplicationExit イベントにハンドラーを設定する処理を通らないパスがあるとか。(さすがにこれはないでしょうけど。)
    2012年5月29日 2:02
  • ApplicationExitイベントハンドラの追加を、Application.Runメソッドを呼び出す前に行った場合どうなりますか?
    また、終了時にはMy.Application.Shutdownイベントも使えるようです。

    (参考)
    アプリケーションの開始時または終了時に行う処理を記述する
    http://dobon.net/vb/dotnet/programing/applicationstart.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 山本春海 2012年6月12日 8:22
    • 回答としてマーク 山本春海 2012年6月28日 7:56
    2012年5月29日 2:29
    モデレータ
  • こんにちは。

    ご回答ありがとうございます。

    もともとは、もっと沢山記述した大きなプログラムで、この問題が発生しました。

    そこで原因を突き止めるために、単純化したコード群(投稿したものと同じ)を動作させたところ、2つのパソコンで片方は動作、もう一つは動作せずとなりました。

    >あと、他のマシンで動いているexeと問題のexeがそもそも同じじゃない、っていうこともありえます。

     デバッグモードで動作確認しています。

    >どの機能でしょうか。
    >シャットダウンモードというのがありましたが、これは関係しているのかな?

     ウインドウ右上のコントロールボックス(最大、最小、閉じる)ボタンの有効、無効プロパティみたいなものが、あるかも知れないと思ったもので、質問させていただいた次第です。

    よろしくお願いします。

    2012年5月29日 2:31
  • アドバイス、ありがとうございます。

    先ほど別投稿しましたように、原因究明のため、単純化したコード群(質問投稿に記述したもの)を使ってデバッグモードで動作させて、2つの環境で違いが出ています。終了はもちろんウインドウの閉じるボタンで動かして確認しています。

    よろしくお願いします。

    2012年5月29日 2:37
  • こんにちは、BasicVisual さん。
     
    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    その後いかがでしょうか。
    継続したご質問がないようなので、勝手ながら私のほうで参考になったのではと思われる投稿に回答としてマークさせていただきました。
    情報くださったみなさん、ありがとうございます。
    もしまだ解決していない場合には、現在の状況など情報更新して質問を続けてくださいね。
    今後とも MSDN フォーラムをよろしくお願いいたします。それでは。
    ____________                                                 
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年6月28日 7:56