- - PR -
Windowsフォームでプログラム終了について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-31 23:55
お世話になります.
現在Windowsフォームのプログラムを作成しておりますが,いつのまにかプログラムが 終了してしまうという現象が発生しております. FormのClosingとFormを呼び出している部分にログに書き込むコードを記述していますが ここを通っていないようで何もログには書かれていません. このような場合にどこで問題が発生しているのか調べる方法はありませんでしょうか? この現象は開発している環境では発生せずお客様の環境のみで発生しているため,調査方法が分からず苦労しております. 以上,よろしくお願いします. 開発環境:VS 2005 言語:C# // Formを呼び出している部分 try { Application.Run(new Form1()); } catch (Exception ex) { // ログ書き込み } | ||||||||||||
|
投稿日時: 2007-08-01 02:08
イベントドリブンで無操作な状態で勝手に終了することはありません。 #他のプログラム(最悪ウィルス)が終了させているということはあるかもしれませんが。 まずは単に非表示になっているなんてオチの無いよう、タスクマネージャでプロセスがあるかどうかを確認しましょう。
通ってないとどうやって確認しましたか? この例外を握りつぶしている状態でログの書き込み自体が失敗したらどうなるでしょうか? それでも例外ダイアログが表示されないのですから、たぶん、ログ書き込み処理も同じようなTry句で囲まれているのではないですか? とにかく少なくとも一番外側のTry句をはずして動かさなければ先へは進まないでしょう。 | ||||||||||||
|
投稿日時: 2007-08-01 08:28
アプリケーションで発生した例外を確実にログに取るために、
AppDomain.CurrentDomain.UnhandledException Application.ThreadException のイベントハンドラを追加してその中でログを取ったら確実にログが取れると思います。 Windows アプリケーションの場合 System.Windows.Forms.Application.ThreadException イベントハンドラも使えます。 これで例外発生の原因が調査できると思います。 | ||||||||||||
|
投稿日時: 2007-08-01 11:05
回答ありがとうございました.
まどか さん
タスクマネージャ上にも無かったようです
ログの書き込みもTry句で囲んでおりました. そこで再スローしているので外側のTry句で捕捉できると思っていました. 一番外側のTry句について再度検討してみます. k_kazu さん
このイベントハンドラを追加して確認したいと思います. 進展がありましたらまた投稿致します. | ||||||||||||
|
投稿日時: 2007-08-01 12:23
application.exit で終了しているとか?
| ||||||||||||
|
投稿日時: 2007-08-01 14:19
Jitta さん
コメントありがとうございます.
サードパーティ製のコンポーネントを使用しており,application.exitが呼ばれているような挙動がありますが,その場合には以下のコードの終了ログ書き込みはされるためこれが原因ではないような気がしています. この現象が発生した場合には,catch内のログも終了ログも書き込みされない状態になっています. // Formを呼び出している部分 try { Application.Run(new Form1()); } catch (Exception ex) { // ログ書き込み } // 終了ログ書き込み | ||||||||||||
|
投稿日時: 2007-08-01 14:39
それはひどいコンポーネントですね。
それを言ってしまえば System.Environment.Exit メソッドや、System.Diagnostics.Process.GetCurrentProcess() から Kill メソッドなどコード側でも幾ばくか可能性はあります。 個人的には何かしろの原因で Exception すら発生せず有無を言わさずプロセスが死んでいることを疑いますが、いずれにせよまだ調査が足りないでしょう。 ロギングを仕込むなどして調査を進めるのが早道かと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-08-01 17:02
じゃんぬねっと さん
コメントありがとうございました.
このメソッドで終了させるツールを作成して確認してみましたが,今回の問題と全く同じ現象となりました.
私もExceptionすら発生せず有無を言わさずプロセスが死んでいることに疑いを持っていますが,現状では調査不足でそれが証明できないため,もっとロギングを仕込んで調査していきたいと思います. |