- PR -

APL強制終了時のイベントの発生について

投稿者投稿内容
NiceDay
会議室デビュー日: 2006/10/02
投稿数: 18
投稿日時: 2007-09-25 17:57
どなたかご教授ください。

VB6.0 でAPLを開発しています。
このAPLを終了する際(End の前)に、ある終了ロジックを呼び出し処理する必要があります。
正常、異常を問わず終了(終了のイベント)時にはこれを実現できるのですが、タスクマネージャなどで外部から強制終了した場合にも同様な処置を施す必要があります。

色々なイベントでテストして見たのですが解決に至っていません。
そもそも、強制終了時にAPLでハンドリングできるイベントは発生するのでしょうか?
発生するのであれば実現可能であると思っています。また他に良い方法がありましたら合わせて教えていただけますでしょうか。

よろしくお願いいたします。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-09-25 18:06
QueryUnloadイベントのUnloadModeで判断できるのではないでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-25 18:23
引用:

NiceDayさんの書き込み (2007-09-25 17:57) より:

正常、異常を問わず終了(終了のイベント)時にはこれを実現できるのですが、タスクマネージャなどで外部から強制終了した場合にも同様な処置を施す必要があります。色々なイベントでテストして見たのですが解決に至っていません。そもそも、強制終了時にAPLでハンドリングできるイベントは発生するのでしょうか?


強制終了ですか。 プロセスが Kill されるような場合は無理でしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-09-25 18:51
引用:

じゃんぬねっとさんの書き込み (2007-09-25 18:23) より:
引用:

NiceDayさんの書き込み (2007-09-25 17:57) より:

正常、異常を問わず終了(終了のイベント)時にはこれを実現できるのですが、タスクマネージャなどで外部から強制終了した場合にも同様な処置を施す必要があります。色々なイベントでテストして見たのですが解決に至っていません。そもそも、強制終了時にAPLでハンドリングできるイベントは発生するのでしょうか?


強制終了ですか。 プロセスが Kill されるような場合は無理でしょうね。


ですね。

UnixならSignalがあるんですが、Windowsには同等の機能がありません。
どうしても確実に終了処理を行う必要があるなら、別プロセスから監視して、別プロセスで終了処理を行う以外にないはずです。

あるいは一般ユーザーから強制終了させられないように、サービスとして動作させた上で、ユーザ権限の管理をしっかりするかですね。

#終了処理なしで強制終了されても大丈夫なように設計するのが基本です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-25 19:57
引用:

NiceDayさんの書き込み (2007-09-25 17:57) より:

このAPLを終了する際(End の前)に、ある終了ロジックを呼び出し処理する必要があります。


半分興味で伺うのですが、この "ある終了ロジック" についてどういったロジックなのか教えて頂きませんでしょうか? 必要となるシナリオが想像できませんでした。 たとえばリソース関係だったらプロセスが死んでいる時点で無意味なことこの上ないですから。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NiceDay
会議室デビュー日: 2006/10/02
投稿数: 18
投稿日時: 2007-09-25 20:09
投稿者です。
みなさま、早急なご回答ありがとうございました。

J.J. さんから頂いた、「QueryUnloadイベントのUnloadModeで判断」については、テストAPLでは問題なかったです。ただ、システムでは、引き継いだ事を言い訳にして...どうしてもイベントがハンドリングできませんでした。
画面を同時に数多く使用しており、それらをモーダルやハイドなどで切り替えているためなのか? すべての画面の「QueryUnloadイベント」にコーディングしてもダメなのです。
タスクマネージャに表示されているアプリケーションの実態が何だか分からない状況になってきました。

甕星 さんからの設計思想なのですが...言い訳です。特殊な?キーボード(ハード)を制御するためのソフトAを某メーカーから購入して使用しています。このソフトがちょくちょく使用不可のエラーとなり、APL自体を強制終了せざるを得ない事態になっています。
この時、この状態のままAPLを再起動しても、中途半端な状態でソフトAが終了していることを何処かで握ったままになっているのか、APL全体が使用不能になりリブートしかない状況になっているのです。
これを打破するために、強制終了時にその一歩手前で、ソフトAを正常に終了させてから(方法はあります)APLを終わらせる方法を探しておりました。彷徨い続けます...

皆様、ありがとうございました。
NiceDay
会議室デビュー日: 2006/10/02
投稿数: 18
投稿日時: 2007-09-25 20:15
投稿者です。
じゃんぬねっと さんからの "ある終了ロジック" とは、前出の「ソフトA」を正常に終了させるプロシージャのことになります。APLを終了する際には(正常でも異常でも)、このプロシージャを必要としている様です。(某メーカーより)
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-09-26 00:01
私のはある程度単純なものを想像してましたので、おっしゃっている状況ではあまり役に立てないかもしれません。


で、以下は予想。

ソフトAのプロセスを格納する変数を、グローバルな形で保持しているような印象を受けました。
本来ならそういう設計自体があまりよろしくないのですが、いろんな事情によりそれも難しいのでしょう。

複数の画面を使用しているとのことですので、可能であれば基となる画面の終了時にそういった処理を纏めるのが一番かと思います。

スキルアップ/キャリアアップ(JOB@IT)