1.概要
アプリケーションが起動後すぐ落ちてしまう不具合が発生しました。
全く起動しないのではなく、起動してすぐに落ちるという状況です。
windowsのイベントログを確認してみると
説明: ハンドルされない例外のため、プロセスが中止されました。
例外情報:System.NullReferenceException
といったエラーログが出力されていました。
これまで動作していたアプリケーションが急に起動しなくなった
という謎の現象について調べてみました。
2.エラーの特定
そもそもどこでエラーが起きているのかというと
アプリケーションの起動時に起きていることがわかりました。
更に細かくみてみると、アプリケーションの設定ファイルである
XMLファイルの読み込み時にどうやらエラーが発生しているようです。
3.壊れたXMLファイル
設定ファイルが読めないだけで、アプリケーションが起動しなくなるのは
考えにくいので、該当するXMLファイルを確認してみました。
読めないXMLファイルを開いてみると、スペース?で埋め尽くされているような感じでした。
詳しく調べるためバイナリエディタで確認してみると
どうやら【null】で埋め尽くされているといった状態でした。
該当アプリはXMLファイルを読み込んでから【XmlSerializer】でデシリアライズしていたので
確かにこの状態だとエラーが起きるだろうと判断しました。
ではなぜXMLファイルがこのような状態になるのでしょうか?
4.原因の特定
XMLファイルが壊れた状態になるのには法則性がありました。
それは
Windowsが停電で異常終了し、その後起動した際にファイルが壊れてしまうという状況です。
法則はわかったのですが何故こんなことが起きるのでしょうか?
5.さらなる原因
しばらく調べていると、原因がはっきりしました。
該当アプリの動作ですが
②XMLファイルの読み込み
③XMLファイルの書き込み
といった順番で処理を行っていましたが
③XMLファイルの書き込み
の部分でファイルを壊してしまっていたようです。
更に何故③の処理を行っていたのかも分からないので
③の処理をやめたところ、XMLファイルが壊れるといった現象は
発生しなくなりました。
考察として
ファイルアクセス処理(書き込み)をすぐに行うとファイルが壊れてしまう