.NETアプリケーション「問題が発生したため、プログラムが正しく動作しなくなりました。」エラーが表示した際の原因の特定と解消方法

「問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。」というエラーが表示された時の原因の特定と対処方法を掲載。

問題が発生したため、プログラムが正しく動作しなくなりました。エラーメッセージ画面

上記エラーが発生した場合は、まずは、コントロールパネル→管理ツール→イベントビューアーを確認します。そうすると、発生時刻と同時にエラーが出力されています。

イベントビューアーログ画面

通常のアプリケーションの場合は、エラーが発生した実行ファイル(*.exe)に対して発生したdllなどが記載されあまり参考にはなりませんが、.NETアプリケーションであれば .NET Runtimeのエラーがイベントログに出力されている場合があります。

下記はサンプルですが、.NET Runtimeエラーが出力されています。

イベントビューアーログ画面

詳細を見ると、アプリケーション欄に「発生したアプリケーション名」がセットされています。説明欄に「System.UnauthorizedAccessException」とあり、スタックトレースが出力されています。System.IO.Error.WinIOError(Int32, System.String)とあるため、アプリケーションでI/Oエラーが発生してアプリケーションが異常終了したことがわかります。

基本的に、上記のようなエラーが発生した場合は、ソフトウェアの開発元に問い合わせするしかないのが現状です。ただ、ヒントはあって、上記のようなI/Oエラーの場合、大抵ファイルに書き込もうとして書き込めない時にエラーが発生します。

たとえば、ログファイルを出力しているときに、sakuraエディタなどで開きっぱなしでファイルをロックしている場合や管理者権限でアプリケーションを実行していないので、ファイルに書き込めない。他の監視アプリケーションがファイルを掴んでいるなどが考えられるため、そのあたりから対処していくと解消することがあります。まれにウィルスソフトやセキュリティソフト等が悪さするケースもあります。

今回の場合は、ログファイルを掴んだ状態だったので、ファイルにログを追記できず起きた現象でした。また、プログラムレベルで見ると、実は上記のエラーは「UnauthorizedAccessException」をプログラム内部でキャッチして例外処理をしていないことが原因です。.NETアプリケーションでは、適切に例外をアプリケーション内部でキャッチして、例外の処理を記述していれば、発生しません。アプリケーション開発元の考慮不足も考えられるため、イベントログと一緒に提供して修正依頼してみるのも手かと思います。