【Windows10】アプリ(プログラム)が起動しなくなった場合の対処方法【System.Xml.XmlException】

  • 投稿 : 2018-10-22
試す場合は、自己責任で!!

現象と解決方法

現象

・.NET Framework ランタイムを利用したアプリ
・今まで起動してたのに、起動しなくなった。
・今まで起動してたのに、エラーで起動しなくななった
・アプリをアンインストールして、再インストールしても治らない

ネットで検索すると、アプリ(プログラム)は違うけど、似たような症状が結構ありました。たぶん、原因が同じなら、同じ方法で解決できると思います。

原因と解決方法

・アプリ内部で利用している設定ファイルの読み込みで失敗している
・アプリのアンインストールでは削除されずに残る

上記のように推測できて、その推測が正しいのなら、
解決方法は、アプリ内部で利用している設定ファイルを見つけ出して削除するです。

イベントビューアーで確認する

アプリが起動しない、変な終了の仕方をする場合は、イベントビューアで確認するとなにか情報がある場合が多いです。

「System.Xml.XmlException」
「System.Xml.XmlTextReaderImpl.ParseText(Int32 ByRef, Int32 ByRef, Int32 ByRef)」
「System.Configuration.ConfigurationErrorsException」

こんな感じのエラー(Exception)がでていたら、たぶん同じ系統の現象だと思います。

アプリケーション:PngGauntlet.exe
フレームワークのバージョン:v4.0.30319
説明: ハンドルされない例外のため、プロセスが中止されました。
例外情報:System.Xml.XmlException
場所 System.Xml.XmlTextReaderImpl.Throw(System.Exception)
場所 System.Xml.XmlTextReaderImpl.ParseText(Int32 ByRef, Int32 ByRef, Int32 ByRef)
場所 System.Xml.XmlTextReaderImpl.ParseText()
場所 System.Xml.XmlTextReaderImpl.ParseElementContent()
場所 System.Xml.XmlTextReaderImpl.Skip()
場所 System.Configuration.XmlUtil.StrictSkipToNextElement(System.Configuration.ExceptionAction)
場所 System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(System.Configuration.XmlUtil, System.String, Boolean, System.String, System.Configuration.OverrideModeSetting, Boolean)
場所 System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(System.Configuration.XmlUtil, System.String, Boolean, System.String, System.Configuration.OverrideModeSetting, Boolean)
場所 System.Configuration.BaseConfigurationRecord.ScanSections(System.Configuration.XmlUtil)
場所 System.Configuration.BaseConfigurationRecord.InitConfigFromFile()

例外情報:System.Configuration.ConfigurationErrorsException
場所 System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean)
場所 System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors)
場所 System.Configuration.ClientConfigurationSystem.OnConfigRemoved(System.Object, System.Configuration.Internal.InternalConfigEventArgs)

例外情報:System.Configuration.ConfigurationErrorsException
場所 System.Configuration.ClientConfigurationSystem.OnConfigRemoved(System.Object, System.Configuration.Internal.InternalConfigEventArgs)
場所 System.Configuration.Internal.InternalConfigRoot.OnConfigRemoved(System.Configuration.Internal.InternalConfigEventArgs)
場所 System.Configuration.Internal.InternalConfigRoot.RemoveConfigImpl(System.String, System.Configuration.BaseConfigurationRecord)
場所 System.Configuration.BaseConfigurationRecord.GetSectionRecursive(System.String, Boolean, Boolean, Boolean, Boolean, System.Object ByRef, System.Object ByRef)
場所 System.Configuration.BaseConfigurationRecord.GetSection(System.String)
場所 System.Configuration.ConfigurationManager.GetSection(System.String)
場所 System.Configuration.ClientSettingsStore.ReadSettings(System.String, Boolean)
場所 System.Configuration.LocalFileSettingsProvider.GetPropertyValues(System.Configuration.SettingsContext, System.Configuration.SettingsPropertyCollection)
場所 System.Configuration.SettingsBase.GetPropertiesFromProvider(System.Configuration.SettingsProvider)
場所 System.Configuration.SettingsBase.GetPropertyValueByName(System.String)
場所 System.Configuration.SettingsBase.get_Item(System.String)
場所 System.Configuration.ApplicationSettingsBase.GetPropertyValue(System.String)
場所 System.Configuration.ApplicationSettingsBase.get_Item(System.String)
場所 PngGauntlet.Properties.Settings.get_OutputDir()
場所 PngGauntlet.MainForm.InitializeComponent()
場所 PngGauntlet.MainForm..ctor()
場所 PngGauntlet.Program.Main()

設定ファイルを探して、削除する

C:\Users\kuro\AppData

※kuroの部分は、ログインユーザー名に置き換えてください。

アプリの設定データ、作業ファイルは上記の場所を使われてることが多いです。隠しフォルダになってますが、エクスプローラのアドレスバーに直接入力すると表示できます。上記のフォルダの中で、該当するフォルダを見つけ出して、削除すればOKです。ただし、関係ないほかのアプリのものを削除すると、おかしくなるので注意してください。

今回は目視で探せなかったので、矢印の部分にアプリ名(実行ファイル名)「PngGauntlet」を入力して検索をかけて見つけ出しました。

C:\Users\kuro\AppData\Local\Benjamin_Hollis\PngGauntlet.exe_StrongName_pzlhlsj2t4i4e5ym4uf2tg4ffi52zszg

見つけたフォルダはこれで、たぶんPngGauntletが使用しているものに間違いなさそうです。

上記フォルダを削除すると、PngGauntletが起動できるようになりました。設定は初期値で使用してたので特に問題ありません。また、アプリ実行後にこの場所にこのファイルができていることを確認しました。「user.config」というファイルは、xml形式で、削除する前の中身をみると、ファイルの内容が途中で切れていてxml形式になってませんでした。何かのタイミングで、このファイルが壊れたようです。

起動時にこのuser.configを読むが、ファイルが壊れていて読めない=>エラーで起動できない

となっていたようです。

スポンサーリンク
タグ#Windows