- PR -

アプリケーションエラーを閉じるバッチの作成方法について

投稿者投稿内容
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2008-03-10 16:18
引用:
申し訳ありません。バッチとはぱてお様が言われるようなイメージです。


うーん、ますます解りません。
そういうイメージだとするとユーザーにメリットがあるとは思えないのですけれど。
アプリが出しているエラーダイアログをユーザーがクリックして閉じるのと
ダイアログが出るたびに特定のバッチプログラムをユーザーが起動するのと
手間的には全く同じだと思います。
それだったらユーザーが直接閉じた方がプログラムを作成する必要がない分だけ
お得だと思いますけれど。

引用:
それから、大変申し訳ありませんが、私が実現させる必要がある
プログラムは以下の通りです。
「OSが出したアプリケーションエラーを検知して(どのプログラムが出したのかも)
検知する)特定のプログラムが出したアプリケーションエラーだったら、
閉じる処理を行う」
これをVBで実現するということです。


検知するためにはPCが動作している間、もしくは特定のシステムが稼働中は
そのツールも動きっぱなしでないと検知できないのでは有りませんか?
ユーザーが終了指示するまで常駐して動くようなプログラムをバッチとは言わないと思いますよ。
基本的には動きっぱなしの状態で定期的に表示されているウインドウを検索して
問題になるウインドウが出ていないかとチェックし、出ている場合は表示されている
メッセージ等から問題のプログラムに関するものかどうかを判断し、
もし対象のダイアログであればそのウインドウのOKボタンのクリックイベントを起こして
閉じさせると言う流れになるかと思います。
この辺は私自身がVB使いでは無いのではっきりとは言えませんけれど、
Win32APIの関数を使えば、表示中のウインドウを列挙して特定のウインドウを
見つける等言うような事は出来ると思うので同様な事が出来るのではと思います。
.netベースのVBならSystem系のネームスペースにこう言う事ができる物が
ないのかなぁ。

ただ、気になるのは既に私が書いている懸念事項に関しては大丈夫なんでしょうか?
単に閉じるだけと言う事になると既に上げているような懸念事項が考えられるとおもうんですが。
モロ
会議室デビュー日: 2008/03/10
投稿数: 6
投稿日時: 2008-03-10 22:24
返信おそくなりました。
>アプリが出しているエラーダイアログをユーザーがクリックして閉じるのと
>ダイアログが出るたびに特定のバッチプログラムをユーザーが起動するのと
>手間的には全く同じだと思います。
>それだったらユーザーが直接閉じた方がプログラムを作成する必要がない分だけ
>お得だと思いますけれど。

ユーザ様に確認をとりました。今まではエラーが発生したら、
直接閉じていたとのことですが、今後はその手間を省きたいということでした。
特にバッチに拘りがあった訳ではなかったので、ここで教えて頂いた事を
話したところ、実現方法はお任せすると言われました。


>単に閉じるだけと言う事になると既に上げているような懸念事項が考えられるとおもう>んですが。

それから指摘頂いている懸念事項についてですが、閉じても再起動するように
なっているとのことなので、そこは気にしないで良いと言われました。

VBも始めて触るので、これから教えて頂いたことについて調べてみたいと思います。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-10 22:38
引用:

モロさんの書き込み (2008-03-10 13:06) より:
今回、このプログラムを作ることになった経緯としまして、ある常駐のプロセスが
あって、それが終了せず、アプリケーションエラーが発生してしまうという問題が
あります。原因が特定できない為、暫定対応として、アプリケーションエラーが
発生したらダイアログを自動で閉じるようにしましょうという話になりました。


 普通は、何が問題なのか、究明します。
 「ある常駐のプロセス」が終了しないことが、アプリケーション エラーが発生することとどのように関係するのでしょう?つまり、「ある常駐プロセス」が、アプリケーション エラーとして報告されるのですか?それとも、このプロセスが反応しないことによって、何らかのアプリケーションがエラーになってしまうのですか?

 後者ならば、タイムアウトさせるなどの処理で、アプリケーション エラーとならないようにできますよね?
 前者であっても、せめてどのタイミングでそういう状態になるのか、調査は必要と思われます。また、メモリやリソースをリークさせていないか、チェックが必要でしょう。あるいは、バッファ オーバー ランをさせていないか、チェックしておく方がよいと思います。

 で、ぱておさんが指摘されているように、常駐プログラムにしなければならないと思うのですが、原因となっているのが「常駐のプロセス」ということなので、ミイラ取りがミイラになるような気がしないでもありません。やはり原因究明が必要かと思われます。
モロ
会議室デビュー日: 2008/03/10
投稿数: 6
投稿日時: 2008-03-11 09:02
Jitta様お返事ありがとうございます。

>普通は、何が問題なのか、究明します。
>「ある常駐のプロセス」が終了しないことが、アプリケーション エラーが発生するこ
>ととどのように関係するのでしょう?つまり、「ある常駐プロセス」が、アプリケーシ>ョン エラーとして報告されるのですか?それとも、このプロセスが反応しないことに
>よって、何らかのアプリケーションがエラーになってしまうのですか?

「ある常駐プロセス」が、アプリケーション エラーとして報告されるので、
前者です。
発生タイミングの調査等は現在別で行われているところです。
今回の対応はあくまで「暫定対応」であり、原因究明は必要だという
ご意見はもっともだと思っています。
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-03-11 11:14
どんなエラーダイアログが出ているのか知らないけど、drwtsn を無効にするとか、XP ならエラー報告の設定で解決できるんじゃないですかねえ。

[コントロールパネル] - [システム] - [詳細設定] - [エラー報告] - [プログラムの選択]
[次のプログラムのエラーは報告しない] 欄にプログラムを追加。
未記入
会議室デビュー日: 2008/03/11
投稿数: 2
投稿日時: 2008-03-11 16:20
新規で質問をと思いましたが、関連する質問がありましたので、
ここで質問させて頂きたいです。
VB.netでアプリケーションエラーを発生させるテストプログラムを作ることと
なりました。
アプリケーションエラーの内容はメモリの参照エラーです。
エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。
何か良い方法など御座いましたら、教えて頂けないでしょうか?
よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-11 18:58
引用:

kenさんの書き込み (2008-03-11 16:20) より:

VB.netでアプリケーションエラーを発生させるテストプログラムを作ることとなりました。アプリケーションエラーの内容はメモリの参照エラーです。エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。何か良い方法など御座いましたら、教えて頂けないでしょうか?よろしくお願い致します。


AccessViolationException を Throw するだけではダメで、その状況を作り出さねばなりませんか? だとすれば、アンマネージ コードと対話しない限り起こり得ません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-11 20:05
引用:

kenさんの書き込み (2008-03-11 16:20) より:
新規で質問をと思いましたが、関連する質問がありましたので、
ここで質問させて頂きたいです。
VB.netでアプリケーションエラーを発生させるテストプログラムを作ることと
なりました。
アプリケーションエラーの内容はメモリの参照エラーです。
エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。
何か良い方法など御座いましたら、教えて頂けないでしょうか?
よろしくお願い致します。


同じスレッドでする話題じゃないね
http://bbs.wankuma.com/index.cgi?mode=al2&namber=15345

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