中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【windows10】アプリケーションが起動後すぐ落ちる原因を考える---.NET Runtime イベントID1026

1.概要

アプリケーションが起動後すぐ落ちてしまう不具合が発生しました。
全く起動しないのではなく、起動してすぐに落ちるという状況です。

windowsのイベントログを確認してみると

フレームワークのバージョン:v4.0.30319
説明: ハンドルされない例外のため、プロセスが中止されました。
例外情報:System.NullReferenceException

といったエラーログが出力されていました。
f:id:tsu--kun:20201118151635p:plain


これまで動作していたアプリケーションが急に起動しなくなった
という謎の現象について調べてみました。


2.エラーの特定

そもそもどこでエラーが起きているのかというと
アプリケーションの起動時に起きていることがわかりました。

更に細かくみてみると、アプリケーションの設定ファイルである
XMLファイルの読み込み時にどうやらエラーが発生しているようです。


3.壊れたXMLファイル

設定ファイルが読めないだけで、アプリケーションが起動しなくなるのは
考えにくいので、該当するXMLファイルを確認してみました。
読めないXMLファイルを開いてみると、スペース?で埋め尽くされているような感じでした。

詳しく調べるためバイナリエディタで確認してみると
どうやら【null】で埋め尽くされているといった状態でした。
f:id:tsu--kun:20201118151746p:plain


該当アプリはXMLファイルを読み込んでから【XmlSerializer】でデシリアライズしていたので
確かにこの状態だとエラーが起きるだろうと判断しました。


ではなぜXMLファイルがこのような状態になるのでしょうか?


4.原因の特定

XMLファイルが壊れた状態になるのには法則性がありました。

それは

停電が発生し、Windowsが正常に終了しなかった場合
であることが判明しました。

Windowsが停電で異常終了し、その後起動した際にファイルが壊れてしまうという状況です。

法則はわかったのですが何故こんなことが起きるのでしょうか?


5.さらなる原因

しばらく調べていると、原因がはっきりしました。
該当アプリの動作ですが


スタートアップで起動
②XMLファイルの読み込み
③XMLファイルの書き込み


といった順番で処理を行っていましたが
③XMLファイルの書き込み
の部分でファイルを壊してしまっていたようです。


更に何故③の処理を行っていたのかも分からないので
③の処理をやめたところ、XMLファイルが壊れるといった現象は
発生しなくなりました。


考察として

windowsが停電で異常終了後の起動時は
ファイルアクセス処理(書き込み)をすぐに行うとファイルが壊れてしまう
ということでしょうか。。。