• ベストアンサー

VB.NET 自プログラムのプロセス終了のイベント

こんにちは 自プログラム(画面)のプロセスの終了時に、そのイベントを 自プログラムでキャッチするにはどうしたらよういのでしょうか?

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

  • ベストアンサー
回答No.3

> プロセスを強制終了した場合もイベントは拾う事ができるのでしょうか? プロセスの強制終了は、正常にアプリケーションを終了したわけではないので、 走行しませんし、そのような状態を捕捉するイベントもありません。 .NET Framework(CLR)のエラーが発生して異常終了したからといって、後続の処理が 走行しないのと一緒です。

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

VB.NET 2.0以上に限るけど(VS2002やVS2003は不可、VS2005、2008、2010、2012のみ)、終了しつつある時にそれが分かればいいのであればMy.Shutdownイベントに応答すればよかよ。 プロジェクトを右クリックしてプロパティ→アプリケーションタブのアプリケーションイベントの表示(I)→ApplicationEvents.vbがプロジェクト直下にできる→(MyApplicationイベント)のShutdownをプルダウンから選ぶ→MyApplication_Shutdown() Handles Me.Shutdownが出来上がるのでそこにプログラムを書く→バッチグー。ちなみにこのイベントは「もう終わる事が決定した後」で呼び出されるので、このイベントで終了を回避(終了しますかとかYes/Noダイアログを出して、Noを選んだら終了しない)という事はできない。 同じくプロジェクトのプロパティでアプリケーションフレームワークを無効にして、プログラムのエントリポイントをSub Mainにすると全部自分で制御できるようになりますが上級者向けなので興味があれば調べてみてください。

NoMusicNoLife49
質問者

お礼

ご回答頂きアリガトウございます。 是非参考にさせて頂きます。

NoMusicNoLife49
質問者

補足

ご回答頂きありがとうございます。 プロセスを強制終了した場合もイベントは拾う事ができるのでしょうか?

回答No.1

んと、スタートアップオブジェクトを変えればいいのでは。 Public Class Class1 ' これがエントリーポイント <STAThread> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) ' ここから、Form1が終了したあとの処理 Console.WriteLine("プロセス終了前の処理") End Sub End Class

NoMusicNoLife49
質問者

お礼

ご回答頂きアリガトウございます。 是非参考にさせて頂きます。

関連するQ&A

  • プロセス終了の検知について

    Win2000、VB.net、.NET Framework 1.1 でWindowsアプリケーションを作成しています。 画面が表示されていない状態で、ある処理を行っている時に タスクマネージャからプロセスを終了させられたことを検知する イベントを教えてください。 Mainで Application.ApplicationExit, Application.ThreadExit のイベントをAddHandlerで関連付けているのですが タスクマネージャからプロセスを終了しても 関連付けたプロシージャの処理が行われません。 タスクマネージャからプロセスを終了した場合は そのプロセスにメッセージは送られないのでしょうか? また、ある条件になると画面を表示する仕様なのですが 画面を表示中にタスクマネージャからプロセスを終了しても Form_Closingイベントが発生しません。 そういうものなのですか? よろしくお願いいたします。

  • 自分のアプリケーションがプロセス終了したときのイベントを検出したいので

    自分のアプリケーションがプロセス終了したときのイベントを検出したいのですが、どうすれば良いですか? プログラム言語はC#です。 よろしくおねがいします。

  • 誤ってプロセスの終了をしてしまいました

    タスクマネージャーを見ていたとき、誤って何かのプログラムを「プロセスの終了」をクリックすることで終了させてしまいました。 現時点で動作に問題はありませんが、再起動すればそのプログラムは再び動きますか? それとも終了したままですか? 何を終了にしたのか分からないので不安です。

  • VBプログラムの終了

    VB6.0で作成した実行ファイル(exe)を終了させても タスクマネージャのプロセスに残ってしまい、 もう一度プログラムを起動することができません。 (プログラムで二重起動防止の処理をしています) このプログラムをVBのラインタイムが入っていない マシンで動かしているのですが、 やはりそれが問題なのでしょうか? それとも別に何か原因があるのでしょうか?

  • プロセスの終了

    密かに容量を食っているプログラム(CLIexe svchost.exe等)を開放したいのですが、 タスクマネージャーの「プロセスの終了」で強制終了した場合、 そのプログラムは二度と使用する事が出来なくなってしまうのでしょうか? どなたかご教示願います。

  • 自ウィンドウがアクティブなのか監視をしたい。

    プログラムを起動した時は自分のプロセスが アクティブ(タスクバーのタイトルが凹んでいる)ですが、 他のプロセスを任意にクリックすると非アクティブ (タスクバーのタイトルが出っ張る)になると思いますが、 その時にイベントを起こす事ができるのでしょうか? Form_LostFocusやForm_Deactivateを使用しても できませんでした。 自プロセスから他プロセスに移行したと認識したいと 思っております。 説明が下手で解りづらいと思いますが、 よろしくお願い致します。

  • プロセスの終了について教えて下さい。

    タスクマネージャーにある、プロセスの終了は、どのような時使うのですか。 メモリ使用量の多いところを選択して、・プロセスの終了・をクリックするとパソコンが高速化するとか、、ネット上にでていましたがプロセスの終了とはどのようなことですか。 警告が出るのでまだクリックしたことはありません。

  • 異なるプロセス間でのイベントハンドルの共有

    異なるプロセス間でのイベントハンドルの共有 WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。 (1) プロセスAで「本物」のプロセスハンドルを取得   DuplicateHandle(     GetCurrentProcess(),         GetCurrentProcess(),    // 疑似ハンドル     GetCurrentProcess(),     &RealProcessHandle,     // 本物のハンドル     0,     FALSE,     DUPLICATE_SAME_ACCESS   ); (2) プロセスAでイベントを作成   hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); (3) プロセスBでイベントハンドルを複製   DuplicateHandle(     RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル     hEvent,           // プロセスAが(2)で取得したイベントハンドル     GetCurrentProcess(),     &hNewEvent,         // プロセスBで利用するためのイベントハンドル     0,     FALSE,     DUPLICATE_SAME_ACCESS   ); 上記のプログラムを実行すると、(1)と(2)は成功するものの、(3)の時点でエラーになり、 GetLastErrorでは6(ハンドルの異常)が表示されます。 プログラムのどこが悪いのでしょうか? 尚、OpenEventによるイベントハンドル共有は、 イベントに名前をつけなくてはならない問題があり、利用しない方針です。

  • プログラムが終了しているのにプロセスにプログラムが残る

    日本語がおかしいような気がしますがすみません。 先ほどまでプログラムを組んでいたのですが、WinMainがしっかりと return 0; を返しているのにウィンドウは消えるのですがタスクマネージャーにはしっかりとプロセスが表示されています。 現在はreturn 0;の前でexit(0);でごまかしているのですが・・・。 無限ループしているわけでもないのにアプリケーションが終了しないなんてことはあるのでしょうか?? 現在やっていることといえばSTLのリストとnewで領域の確保、管理をしている程度です。 ご教授願います。

  • VB6から他のプログラムを強制終了したい

    こんにちは、ただいま、VB6からあるプログラムを強制終了したいのプログラムを作りだいです。 強制終了したいのプログラムがVBのプログラムから起動じゃなくで、VBのプログラム実行する前に起動したのプログラムです。 API関数 TerminateProcess(hProcessHandle, 0&) を使いたいですが、現存のプロセスのProcessHandleを取得できません。 困ってる。 お手数ですが、解決方法が有れば教えてください

専門家に質問してみよう